メソッドの配列を取得する

  • ≪ ReflectionClass::getMethod
  • ReflectionClass::getModifiers ≫
  • PHP Manual
  • ReflectionClass
  • メソッドの配列を取得する

ReflectionClass::getMethods

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getMethods — メソッドの配列を取得する

説明

public ReflectionClass::getMethods(?int $filter = null): array

クラスのメソッドの配列を取得します。

パラメータ

filter

結果をフィルタして、特定の属性を持つメソッドだけを含めるようにします。 デフォルトは、何もフィルタしません。

ReflectionMethod::IS_STATIC、
ReflectionMethod::IS_PUBLIC、
ReflectionMethod::IS_PROTECTED、
ReflectionMethod::IS_PRIVATE、
ReflectionMethod::IS_ABSTRACT、
ReflectionMethod::IS_FINAL
の任意の組み合わせ。
指定した属性の いずれか を持つすべてのメソッドを返します。

注意: その他のビット演算 (~ など) は期待通りの挙動にはなりません。 つまり、たとえば static ではないメソッドをすべて取得するなどといったことはできません。

戻り値

各メソッドを表す ReflectionMethod オブジェクトの配列を返します。

変更履歴

バージョン | 説明
7.2.0 | filter は、nullable になりました。

例

例1 ReflectionClass::getMethods() の基本的な使用例

<?php
class Apple {
public function firstMethod() { }
final protected function secondMethod() { }
private static function thirdMethod() { }
}

$class = new ReflectionClass('Apple');
$methods = $class->getMethods();
var_dump($methods);
?>

上の例の出力は以下となります。

array(3) {
  [0]=>
  object(ReflectionMethod)#2 (2) {
    ["name"]=>
    string(11) "firstMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [1]=>
  object(ReflectionMethod)#3 (2) {
    ["name"]=>
    string(12) "secondMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [2]=>
  object(ReflectionMethod)#4 (2) {
    ["name"]=>
    string(11) "thirdMethod"
    ["class"]=>
    string(5) "Apple"
  }
}

例2 ReflectionClass::getMethods() のフィルタリング

<?php
class Apple {
public function firstMethod() { }
final protected function secondMethod() { }
private static function thirdMethod() { }
}

$class = new ReflectionClass('Apple');
$methods = $class->getMethods(ReflectionMethod::IS_STATIC | ReflectionMethod::IS_FINAL);
var_dump($methods);
?>

上の例の出力は以下となります。

array(2) {
  [0]=>
  object(ReflectionMethod)#2 (2) {
    ["name"]=>
    string(12) "secondMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [1]=>
  object(ReflectionMethod)#3 (2) {
    ["name"]=>
    string(11) "thirdMethod"
    ["class"]=>
    string(5) "Apple"
  }
}

参考

  • ReflectionClass::getMethod() - クラスメソッドの ReflectionMethod を取得する
  • get_class_methods() - クラスメソッドの名前を取得する

User Contributed Notes

tom at r dot je 11-Jun-2014 05:40
ReflectionClass::getMethods() sorts the methods by class (lowest in the inheritance tree first) then by the order they are defined in the class definition:

<?php
class A {
    public function method1() {

    }

    public function method2() {

    }
}

class B extends A {

    public function method3() {

    }

    public function method4() {

    }
}

$class = new ReflectionClass('B');
print_r($class->getMethods());
?>

This will output:

Array
(
    [0] => ReflectionMethod Object
        (
            [name] => method3
            [class] => B
        )

    [1] => ReflectionMethod Object
        (
            [name] => method4
            [class] => B
        )

    [2] => ReflectionMethod Object
        (
            [name] => method1
            [class] => A
        )

    [3] => ReflectionMethod Object
        (
            [name] => method2
            [class] => A
        )

)
x_atrix at yahoo dot com 10-Jul-2013 05:00
Note, for ReflectionClass::getMethods() not all methods in a final class are final, just the ones that have explicit modifier.
If you want to use an and operator for the filter, here is a simple implementation
<?php
final class Apple {
    public function publicMethod() { }
    public final function publicFinalMethod() { }
    protected final function protectedFinalMethod() { }
    private static function privateStaticMethod() { }
}

class MyReflection extends ReflectionClass {
    public function __construct($argument) {
        parent::__construct($argument);
    }

    /**
     * (non-PHPdoc)
     * @see ReflectionClass::getMethods()
     */
    public function getMethods($filter = null, $useAndOperator = true) {
        if ($useAndOperator !== true) {
            return parent::getMethods($filter);
        }

        $methods = parent::getMethods($filter);
        $results = array();

        foreach ($methods as $method) {
            if (($method->getModifiers() & $filter) === $filter) {
                $results[] = $method;
            }
        }

        return $results;
    }
}

$class = new MyReflection('Apple');
$methods = $class->getMethods(ReflectionMethod::IS_FINAL | ReflectionMethod::IS_PUBLIC);
var_dump($methods);

$methods = $class->getMethods(ReflectionMethod::IS_FINAL | ReflectionMethod::IS_PUBLIC, false);
var_dump($methods);
?>

Result:
array(1) {
  [0]=>
  object(ReflectionMethod)#4 (2) {
    ["name"]=>
    string(17) "publicFinalMethod"
    ["class"]=>
    string(5) "Apple"
  }
}

array(3) {
  [0]=>
  &object(ReflectionMethod)#5 (2) {
    ["name"]=>
    string(12) "publicMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [1]=>
  &object(ReflectionMethod)#3 (2) {
    ["name"]=>
    string(17) "publicFinalMethod"
    ["class"]=>
    string(5) "Apple"
  }
  [2]=>
  &object(ReflectionMethod)#6 (2) {
    ["name"]=>
    string(20) "protectedFinalMethod"
    ["class"]=>
    string(5) "Apple"
  }
}
deminy at deminy dot net 22-Jun-2011 09:24
Method ReflectionClass::getMethods doesn't work constantly across different versions of PHP. For following code piece

<?php
class Dummy implements Iterator
{
    public function current () {}
    public function next () {}
    public function key () {}
    public function valid () {}
    public function rewind () {}
}

$reflection = new ReflectionClass('Dummy');
$aMethods = $reflection->getMethods();
echo '# of methods: ', count($aMethods), "\n";
?>

, it outputs "# of methods: 10" on PHP 5.2.14 and PHP 5.2.17, including all methods defined in the class itself and in the interface no matter if a method has been implemented or overridden; however, it returns "# of methods: 5" on PHP 5.3.5. Based on some other tests did by my colleagues, I assume it also returns "# of methods: 5" on PHP 5.2.10 and PHP 5.3.6.


クラス修飾子を取得する

  • ≪ ReflectionClass::getMethods
  • ReflectionClass::getName ≫
  • PHP Manual
  • ReflectionClass
  • クラス修飾子を取得する

ReflectionClass::getModifiers

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getModifiers — クラス修飾子を取得する

説明

public ReflectionClass::getModifiers(): int

このクラスのアクセス修飾子のビットフィールドを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

修飾子定数 のビットマスクを返します。

参考

  • ReflectionClass::getProperties() - プロパティを取得する
  • Reflection::getModifierNames() - 修飾子の名前を取得する

User Contributed Notes

Nicola Pietroluongo 26-Feb-2015 01:17
It's the amount of memory allocation in bit.
By default many systems allocate 1048576 bit (1 Megabit).

/* Example 1 */

class Test {}
$classTest = new Test();
$reflectionClass = new \ReflectionClass('Test');
$classModifiers = $reflectionClass->getModifiers();
var_export($classModifiers);

//output
1048576

/* Example 2 */

class Test {}
//the constructor is missing
$reflectionClass = new \ReflectionClass('Test');
$classModifiers = $reflectionClass->getModifiers();
var_export($classModifiers);

//output
0


クラスの名前を取得する

  • ≪ ReflectionClass::getModifiers
  • ReflectionClass::getNamespaceName ≫
  • PHP Manual
  • ReflectionClass
  • クラスの名前を取得する

ReflectionClass::getName

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getName — クラスの名前を取得する

説明

public ReflectionClass::getName(): string

クラスの名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

クラスの名前を返します。

例

例1 ReflectionClass::getName() の例

<?php
namespace A\B;

class Foo { }

$function = new \ReflectionClass('stdClass');

var_dump($function->inNamespace());
var_dump($function->getName());
var_dump($function->getNamespaceName());
var_dump($function->getShortName());

$function = new \ReflectionClass('A\\B\\Foo');

var_dump($function->inNamespace());
var_dump($function->getName());
var_dump($function->getNamespaceName());
var_dump($function->getShortName());
?>

上の例の出力は以下となります。

bool(false)
string(8) "stdClass"
string(0) ""
string(8) "stdClass"

bool(true)
string(7) "A\B\Foo"
string(3) "A\B"
string(3) "Foo"

参考

  • ReflectionClass::getNamespaceName() - 名前空間の名前を取得する

User Contributed Notes

There are no user contributed notes for this page.


名前空間の名前を取得する

  • ≪ ReflectionClass::getName
  • ReflectionClass::getParentClass ≫
  • PHP Manual
  • ReflectionClass
  • 名前空間の名前を取得する

ReflectionClass::getNamespaceName

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionClass::getNamespaceName — 名前空間の名前を取得する

説明

public ReflectionClass::getNamespaceName(): string

名前空間の名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

名前空間の名前を返します。

例

例1 ReflectionClass::getNamespaceName() の例

<?php
namespace A\B;

class Foo { }

$class = new \ReflectionClass('stdClass');

var_dump($class->inNamespace());
var_dump($class->getName());
var_dump($class->getNamespaceName());
var_dump($class->getShortName());

$class = new \ReflectionClass('A\\B\\Foo');

var_dump($class->inNamespace());
var_dump($class->getName());
var_dump($class->getNamespaceName());
var_dump($class->getShortName());
?>

上の例の出力は以下となります。

bool(false)
string(8) "stdClass"
string(0) ""
string(8) "stdClass"

bool(true)
string(7) "A\B\Foo"
string(3) "A\B"
string(3) "Foo"

参考

  • ReflectionClass::getParentClass() - 親クラスを取得する
  • 名前空間

User Contributed Notes

francois 14-Aug-2011 04:08
If the object does not belong to a namespace, an empty string is returned


親クラスを取得する

  • ≪ ReflectionClass::getNamespaceName
  • ReflectionClass::getProperties ≫
  • PHP Manual
  • ReflectionClass
  • 親クラスを取得する

ReflectionClass::getParentClass

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getParentClass — 親クラスを取得する

説明

public ReflectionClass::getParentClass(): ReflectionClass|false

親クラスを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionClass を返します。 親が存在しない場合は、false を返します。

参考

  • ReflectionClass::__construct() - ReflectionClass を作成する

User Contributed Notes

isaac dot z dot foster at gmail dot com 15-Jun-2013 09:02
To find all parents of a class you can use the following code:

        $class = new ReflectionClass('classname');

        $parents = [];

        while ($parent = $class->getParentClass()) {
            $parents[] = $parent->getName();
            $class = $parent;
        }

        echo "Parents: " . implode(", ", $parents);


プロパティを取得する

  • ≪ ReflectionClass::getParentClass
  • ReflectionClass::getProperty ≫
  • PHP Manual
  • ReflectionClass
  • プロパティを取得する

ReflectionClass::getProperties

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getProperties — プロパティを取得する

説明

public ReflectionClass::getProperties(?int $filter = null): array

プロパティを取得します。

パラメータ

filter

オプションのフィルタで、取得したいプロパティの型を絞り込みます。 ReflectionProperty の定数 で設定し、デフォルトではすべてのプロパティ型を取得します。

戻り値

ReflectionProperty オブジェクトの配列を返します。

変更履歴

バージョン | 説明
7.2.0 | filter は、nullable になりました。

例

例1 ReflectionClass::getProperties() でのフィルタリングの例

この例では、オプションのパラメータ filter を使って private プロパティを読み飛ばします。

<?php
class Foo {
public $foo = 1;
protected $bar = 2;
private $baz = 3;
}

$foo = new Foo();

$reflect = new ReflectionClass($foo);
$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED);

foreach ($props as $prop) {
print $prop->getName() . "\n";
}

var_dump($props);

?>

上の例の出力は、 たとえば以下のようになります。

foo
bar
array(2) {
  [0]=>
  object(ReflectionProperty)#3 (2) {
    ["name"]=>
    string(3) "foo"
    ["class"]=>
    string(3) "Foo"
  }
  [1]=>
  object(ReflectionProperty)#4 (2) {
    ["name"]=>
    string(3) "bar"
    ["class"]=>
    string(3) "Foo"
  }
}

参考

  • ReflectionClass::getProperty() - クラスのプロパティを表す ReflectionProperty を取得する
  • ReflectionProperty
  • ReflectionProperty の修飾子定数

User Contributed Notes

kelunik at php dot net 21-Jan-2018 10:58
Note that inherited properties are returned, but no private properties of parent classes. Depending on the use case, you need to check that, too.

do {
    foreach ($reflectionClass->getProperties() as $property) {
        /* ... */
    }
} while ($reflectionClass = $reflectionClass->getParentClass());
postmaster at greg0ire dot fr 08-Jul-2014 09:23
The code in the first example actually does get inherited properties with at least php 5.5.9 . I don't know if / when this behavior changed.

Here is the output:
    array(2) {
     [0] =>
     class ReflectionProperty#2 (2) {
       public $name =>
       string(2) "a2"
       public $class =>
       string(2) "AA"
     }
     [1] =>
     class ReflectionProperty#3 (2) {
       public $name =>
       string(2) "a1"
       public $class =>
       string(1) "A"
     }
    }
Yzmir Ramirez 16-Oct-2010 08:53
Looks like you can access public, protected, private variables by casting the object to an array (useful for Unit Testing).  However casting to an array still won't allow you access to protected and private static variables.

In PHP 5.3.0+ use ReflectionProperty::setAccessable(true);

<?php

echo "PHP Version: ".phpversion()."\n";

class Foo {
    public    $foo  = 'public';
    protected $bar  = 'protected';
    private   $baz  = 'private';

    public static    $sfoo  = 'public static';
    protected static $sbar  = 'protected static';
    private static   $sbaz  = 'private static';

    const COO = 'const';

}

$obj = new Foo;

$arr = (array)$obj;

print_r($arr);

echo "Accessing Public Static: ".Foo::$sfoo."\n";
// echo Foo::$sbar."\n"; // Fatal error: Cannot access protected property Foo::$sbar
// echo Foo::$sbaz."\n"; // Fatal error: Cannot access private property Foo::$sbaz
echo "Accessing Constant: ".Foo::COO."\n";
?>

PHP Version: 5.2.12
Array
(
    [foo] => public
    [*bar] => protected
    [Foobaz] => private
)
Accessing Public Static: public static
Accessing Constant: const

PHP Version: 5.1.6
Array
(
    [foo] => public
    [*bar] => protected
    [Foobaz] => private
)
Accessing Public Static: public static
Accessing Constant: const
mcurtis 28-Jan-2009 02:41
It should be noted that the 'filter' parameter in the getProperties(filter) method is expected to be of type long.  Not sure why, but it doesn't function as a way of passing in a string to fetch a subset of properties by string match.
muratyaman at gmail dot com 22-Jan-2009 07:47
Some may find this useful.

<?php
/**
 * Recursive function to get an associative array of class properties by property name => ReflectionProperty() object
 * including inherited ones from extended classes
 * @param string $className Class name
 * @param string $types Any combination of <b>public, private, protected, static</b>
 * @return array
 */
function getClassProperties($className, $types='public'){
    $ref = new ReflectionClass($className);
    $props = $ref->getProperties();
    $props_arr = array();
    foreach($props as $prop){
        $f = $prop->getName();

        if($prop->isPublic() and (stripos($types, 'public') === FALSE)) continue;
        if($prop->isPrivate() and (stripos($types, 'private') === FALSE)) continue;
        if($prop->isProtected() and (stripos($types, 'protected') === FALSE)) continue;
        if($prop->isStatic() and (stripos($types, 'static') === FALSE)) continue;

        $props_arr[$f] = $prop;
    }
    if($parentClass = $ref->getParentClass()){
        $parent_props_arr = getClassProperties($parentClass->getName());//RECURSION
        if(count($parent_props_arr) > 0)
            $props_arr = array_merge($parent_props_arr, $props_arr);
    }
    return $props_arr;
}

//USAGE

class A{
  public $a1;

    function abc(){
        //do something
    }
}

class AA extends A{
    public $a2;

    function edf(){
        //do something
    }
}

class AAA extends AA{
  //may not have extra properties, but may have extra methods
    function ghi(){
        //ok
    }
}

//$ref = new ReflectionClass('AAA'); $props = $ref->getProperties();//This will get no properties!
$props_arr = getClassProperties('AAA', 'public');//Use this
var_dump($props_arr);
/*
OUTPUT on PHP5.2.6:
array
  'a1' =>
    object(ReflectionProperty)[4]
      public 'name' => string 'a1' (length=2)
      public 'class' => string 'AAA' (length=3)
  'a2' =>
    object(ReflectionProperty)[3]
      public 'name' => string 'a2' (length=2)
      public 'class' => string 'AAA' (length=3)

*/

?>
david dot thalmann at gmail dot com 05-Jan-2009 08:19
With PHP 5.3 protected or private properties are easy to access with setAccessible(). However, it's sometimes needed (e.g. Unit Tests) and here is a workaround for getValue():

<?php

$class = new ReflectionClass('SomeClass');
$props = $class->getProperties();
// $propsStatic = $class->getStaticProperties();

$myPrivatePropertyValue = $props['aPrivateProperty'];

?>

Note that it wont work if you access the property directly with getProperty().


クラスのプロパティを表す ReflectionProperty を取得する

  • ≪ ReflectionClass::getProperties
  • ReflectionClass::getReflectionConstant ≫
  • PHP Manual
  • ReflectionClass
  • クラスのプロパティを表す ReflectionProperty を取得する

ReflectionClass::getProperty

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getProperty — クラスのプロパティを表す ReflectionProperty を取得する

説明

public ReflectionClass::getProperty(string $name): ReflectionProperty

クラスのプロパティを表す ReflectionProperty を取得します。

パラメータ

name

プロパティの名前。

戻り値

ReflectionProperty を返します。

例

例1 ReflectionClass::getProperty() の基本的な使用例

<?php
$class = new ReflectionClass('ReflectionClass');
$property = $class->getProperty('name');
var_dump($property);
?>

上の例の出力は以下となります。

object(ReflectionProperty)#2 (2) {
  ["name"]=>
  string(4) "name"
  ["class"]=>
  string(15) "ReflectionClass"
}

参考

  • ReflectionClass::getProperties() - プロパティを取得する

User Contributed Notes

dohpaz42 16-Jun-2015 04:16
Accessing private properties is possible, but care must be taken if that private property was defined lower into the inheritance chain. For example, if class A extends class B, and class B defines a private property called 'foo', getProperty will throw a ReflectionException.

Instead, you can loop over getParentClass until it returns false to look for the private property, at which point you can access and/or modify its value as needed.
eric at naeseth dot com 02-Aug-2011 03:38
If the class doesn't have a property with the given name, a ReflectionException will be raised.


クラス定数の ReflectionClassConstant を取得する

  • ≪ ReflectionClass::getProperty
  • ReflectionClass::getReflectionConstants ≫
  • PHP Manual
  • ReflectionClass
  • クラス定数の ReflectionClassConstant を取得する

ReflectionClass::getReflectionConstant

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClass::getReflectionConstant — クラス定数の ReflectionClassConstant を取得する

説明

public ReflectionClass::getReflectionConstant(string $name): ReflectionClassConstant|false

クラス定数の ReflectionClassConstant を取得します。

パラメータ

name

クラス定数の名前

戻り値

ReflectionClassConstant を返します。 失敗した場合に false を返します

参考

  • ReflectionClass::getReflectionConstants() - クラス定数を取得する
  • ReflectionClassConstant

User Contributed Notes

There are no user contributed notes for this page.


クラス定数を取得する

  • ≪ ReflectionClass::getReflectionConstant
  • ReflectionClass::getShortName ≫
  • PHP Manual
  • ReflectionClass
  • クラス定数を取得する

ReflectionClass::getReflectionConstants

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClass::getReflectionConstants — クラス定数を取得する

説明

public ReflectionClass::getReflectionConstants(?int $filter = null): array

リフレクションされた定数を取得します。

パラメータ

filter

オプションのフィルタで、取得したい定数の型を絞り込みます。 ReflectionClassConstant の定数 で設定し、デフォルトではすべての定数を取得します。

戻り値

ReflectionClassConstant の配列を返します。

変更履歴

バージョン | 説明
8.0.0 | filter が追加されました。

例

例1 基本的な ReflectionClass::getReflectionConstants() の例

<?php
class Foo {
public const FOO = 1;
protected const BAR = 2;
private const BAZ = 3;
}

$foo = new Foo();

$reflect = new ReflectionClass($foo);
$consts = $reflect->getReflectionConstants();

foreach ($consts as $const) {
print $const->getName() . "\n";
}

var_dump($consts);

?>

上の例の出力は、 たとえば以下のようになります。

FOO
BAR
BAZ
array(3) {
  [0]=>
  object(ReflectionClassConstant)#3 (2) {
    ["name"]=>
    string(3) "FOO"
    ["class"]=>
    string(3) "Foo"
  }
  [1]=>
  object(ReflectionClassConstant)#4 (2) {
    ["name"]=>
    string(3) "BAR"
    ["class"]=>
    string(3) "Foo"
  }
  [2]=>
  object(ReflectionClassConstant)#5 (2) {
    ["name"]=>
    string(3) "BAZ"
    ["class"]=>
    string(3) "Foo"
  }
}

参考

  • ReflectionClass::getReflectionConstant() - クラス定数の ReflectionClassConstant を取得する
  • ReflectionClassConstant

User Contributed Notes

There are no user contributed notes for this page.


短い名前を取得する

  • ≪ ReflectionClass::getReflectionConstants
  • ReflectionClass::getStartLine ≫
  • PHP Manual
  • ReflectionClass
  • 短い名前を取得する

ReflectionClass::getShortName

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionClass::getShortName — 短い名前を取得する

説明

public ReflectionClass::getShortName(): string

名前空間部分を除いた、クラスの短い名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

クラスの短い名前を返します。

例

例1 ReflectionClass::getShortName() の例

<?php
namespace A\B;

class Foo { }

$function = new \ReflectionClass('stdClass');

var_dump($function->inNamespace());
var_dump($function->getName());
var_dump($function->getNamespaceName());
var_dump($function->getShortName());

$function = new \ReflectionClass('A\\B\\Foo');

var_dump($function->inNamespace());
var_dump($function->getName());
var_dump($function->getNamespaceName());
var_dump($function->getShortName());
?>

上の例の出力は以下となります。

bool(false)
string(8) "stdClass"
string(0) ""
string(8) "stdClass"

bool(true)
string(7) "A\B\Foo"
string(3) "A\B"
string(3) "Foo"

参考

  • ReflectionClass::getName() - クラスの名前を取得する

User Contributed Notes

There are no user contributed notes for this page.


開始行を取得する

  • ≪ ReflectionClass::getShortName
  • ReflectionClass::getStaticProperties ≫
  • PHP Manual
  • ReflectionClass
  • 開始行を取得する

ReflectionClass::getStartLine

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getStartLine — 開始行を取得する

説明

public ReflectionClass::getStartLine(): int|false

開始行を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

開始行を整数で返します。 開始行が不明な場合は、false を返します。

参考

  • ReflectionClass::getEndLine() - 終了行を取得する

User Contributed Notes

info at ensostudio dot ru 31-Oct-2021 04:28
Note: lines in file start from 1!
Sample to get class code:
<?php
$class = new ReflectionClass('Foo');
$offset = $class->getStartLine() - 1;
$code = implode(
    '',
    array_slice(
        file($class->getFileName()),
        $offset,
        $class->getEndLine() - $offset
    )
);
?>


staticプロパティを取得する

  • ≪ ReflectionClass::getStartLine
  • ReflectionClass::getStaticPropertyValue ≫
  • PHP Manual
  • ReflectionClass
  • staticプロパティを取得する

ReflectionClass::getStaticProperties

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getStaticProperties — staticプロパティを取得する

説明

public ReflectionClass::getStaticProperties(): array

staticプロパティを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

staticプロパティを配列で返します。

変更履歴

バージョン | 説明
8.3.0 | ReflectionClass::getStaticProperties() の戻り値の型が、?array から array に変更されました。

参考

  • ReflectionClass::getStaticPropertyValue() - staticプロパティの値を取得する
  • ReflectionClass::setStaticPropertyValue() - staticプロパティの値を設定する

User Contributed Notes

joao dot felipe dot c dot b at gmail dot com 24-Mar-2016 01:06
getStaticProperties return a set of the property itself. It's diferente from getProperties(ReflectionProperty::IS_STATIC) because it return a set of ReflectionProperty class.
jlennox @ google mail 08-May-2010 10:03
I had the need to recursive merge the results from a subclass with all of it's parents, and this was the resulting code:

<?php
function GetStaticPropertiesRecursive($class) {
    $currentClass = $class;
    $joinedProperties = array();
    do {
        $reflection = new ReflectionClass($class);
        $staticProperties = $reflection->getStaticProperties();
        foreach ($staticProperties as $name => $value) {
            if (is_array($value)) {
                if (isset($joinedProperties[$name]))
                    $joinedProperties[$name] = array_merge($value, $joinedProperties[$name]);
                else
                    $joinedProperties[$name] = $value;
            } else {
                if (isset($joinedProperties[$name]))
                    $joinedProperties[$name][] = $value;
                else
                    $joinedProperties[$name] = array($value);
            }
        }
    } while ($class = get_parent_class($class));
    return $joinedProperties;
}

Using this function:
class base {
    public static $Test = array("foo1", "foo2");
}
class sub extends base {
    public static $Test = "sub";
}

print_r(GetStaticPropertiesRecursive("sub"));
?>

That outputs:
Array
(
    [Test] => Array
        (
            [0] => foo1
            [1] => foo2
            [2] => sub
        )

)

The merge follows the rules of array_merge on duplicate keys.


staticプロパティの値を取得する

  • ≪ ReflectionClass::getStaticProperties
  • ReflectionClass::getTraitAliases ≫
  • PHP Manual
  • ReflectionClass
  • staticプロパティの値を取得する

ReflectionClass::getStaticPropertyValue

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::getStaticPropertyValue — staticプロパティの値を取得する

説明

public ReflectionClass::getStaticPropertyValue(string $name, mixed &$def_value = ?): mixed

このクラスのstaticプロパティの値を取得します。

パラメータ

name

値を返したいstaticプロパティの名前。

def_value

指定した名前のstaticプロパティがそのクラスに存在しない場合に返す、デフォルト値。 プロパティが存在せず、かつこの引数も省略されていた場合は、 ReflectionException が発生します。

戻り値

staticプロパティの値を返します。

例

例1 ReflectionClass::getStaticPropertyValue() の基本的な使用例

<?php
class Apple {
public static $color = 'Red';
}

$class = new ReflectionClass('Apple');
var_dump($class->getStaticPropertyValue('color'));
?>

上の例の出力は以下となります。

string(3) "Red"

参考

  • ReflectionClass::getStaticProperties() - staticプロパティを取得する
  • ReflectionClass::setStaticPropertyValue() - staticプロパティの値を設定する

User Contributed Notes

Antares 16-Aug-2011 07:11
It seems this method has a security level different from the getStaticProperties method.

If you make two classes A and B looking like

<?php
class A{
        protected static $static_var='foo';

        public function getStatic(){
           $class=new ReflectionClass($this);
           return $class->getStaticPropertyValue('static_var');
        }

        public function getStatic2(){
            $class=new ReflectionClass($this);
            $staticProps=$class->getStaticProperties();
            return $staticProps['static_var'];
        }

        public function __construct(){
              echo $this->getStatic2();
              echo $this->getStatic();
        }
}

class B extends A{
        protected static $static_var='foo2';

}
?>

Then the output will be an exception for the getStatic() call, when the getStatic2() will correctly return 'foo2';
Mauro Gabriel Titimoli 21-Jan-2010 12:05
If you want to change a static property of a variable class...

PHP 5.2
<?php
$reflection = new ReflectionClass($className);
$staticPropertyReference = & $reflection->getStaticPropertyValue($staticPropertyName);

$staticPropertyReference = 'new value';
?>

PHP 5.3
<?php
$className::$$classProperty
?>


トレイトのエイリアスの配列を返す

  • ≪ ReflectionClass::getStaticPropertyValue
  • ReflectionClass::getTraitNames ≫
  • PHP Manual
  • ReflectionClass
  • トレイトのエイリアスの配列を返す

ReflectionClass::getTraitAliases

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionClass::getTraitAliases — トレイトのエイリアスの配列を返す

説明

public ReflectionClass::getTraitAliases(): array

現在のクラスで定義された、トレイトのメソッドのエイリアスの配列を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

新しいメソッド名をキー、その元の名前 ("TraitName::original" 形式) を値とする配列を返します。

User Contributed Notes

dhairya dot coder at gmail dot com 10-Feb-2016 11:43
trait A {
    public function smallTalk() {
        echo 'a';
    }
    public function bigTalk() {
        echo 'A';
    }
}

class Apple{

    use A {
        A::bigTalk as talk;
    }
}

$obj=new ReflectionClass('Apple');
echo "<pre>";
var_dump($obj->getTraitAliases());
echo "</pre>";


このクラスが使うトレイトの名前の配列を返す

  • ≪ ReflectionClass::getTraitAliases
  • ReflectionClass::getTraits ≫
  • PHP Manual
  • ReflectionClass
  • このクラスが使うトレイトの名前の配列を返す

ReflectionClass::getTraitNames

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionClass::getTraitNames — このクラスが使うトレイトの名前の配列を返す

説明

public ReflectionClass::getTraitNames(): array

このクラスが使うトレイトの名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

トレイト名を値とする配列を返します。

User Contributed Notes

emulienfou at gmail dot com 30-Nov-2013 03:55
This remote return only the trait names from the current class.

If your class extends another class using your trait, you can't get the names. However, you can do something like :

<?php
$traitsNames = [];
$recursiveClasses = function ($class) use(&$recursiveClasses, &$traitsNames) {
    if ($class->getParentClass() != false) {
        $recursiveClasses($class->getParentClass());
    }
    else {
        $traitsNames = array_merge($traitsNames, $class->getTraitNames());
    }
};
$recursiveClasses($controllerClass);


このクラスが使うトレイトの配列を返す

  • ≪ ReflectionClass::getTraitNames
  • ReflectionClass::hasConstant ≫
  • PHP Manual
  • ReflectionClass
  • このクラスが使うトレイトの配列を返す

ReflectionClass::getTraits

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionClass::getTraits — このクラスが使うトレイトの配列を返す

説明

public ReflectionClass::getTraits(): array

このクラスが使うトレイトの配列を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

トレイト名をキー、トレイトの ReflectionClass のインスタンスを値とする配列を返します。 エラー時には null を返します。

User Contributed Notes

Anonymous 15-Jan-2015 04:03
Note that getTraits will NOT return any traits inherited from a parent.

This is currently viewed as the desired behavior.  See https://bugs.php.net/bug.php?id=61554


定数が定義されているかどうかを調べる

  • ≪ ReflectionClass::getTraits
  • ReflectionClass::hasMethod ≫
  • PHP Manual
  • ReflectionClass
  • 定数が定義されているかどうかを調べる

ReflectionClass::hasConstant

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::hasConstant — 定数が定義されているかどうかを調べる

説明

public ReflectionClass::hasConstant(string $name): bool

そのクラスで特定の定数が定義されているかどうかを調べます。

パラメータ

name

調べたい定数の名前。

戻り値

定数が定義されている場合に true、それ以外の場合に false を返します。

例

例1 ReflectionClass::hasConstant() の例

<?php
class Foo {
const c1 = 1;
}

$class = new ReflectionClass("Foo");

var_dump($class->hasConstant("c1"));
var_dump($class->hasConstant("c2"));
?>

上の例の出力は、 たとえば以下のようになります。

bool(true)
bool(false)

参考

  • ReflectionClass::hasMethod() - メソッドが定義されているかどうかを調べる
  • ReflectionClass::hasProperty() - プロパティが定義されているかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


メソッドが定義されているかどうかを調べる

  • ≪ ReflectionClass::hasConstant
  • ReflectionClass::hasProperty ≫
  • PHP Manual
  • ReflectionClass
  • メソッドが定義されているかどうかを調べる

ReflectionClass::hasMethod

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::hasMethod — メソッドが定義されているかどうかを調べる

説明

public ReflectionClass::hasMethod(string $name): bool

そのクラスで特定のメソッドが定義されているかどうかを調べます。

パラメータ

name

調べたいメソッドの名前。

戻り値

メソッドが定義されている場合に true、それ以外の場合に false を返します。

例

例1 ReflectionClass::hasMethod() の例

<?php
Class C {
public function publicFoo() {
return true;
}

protected function protectedFoo() {
return true;
}

private function privateFoo() {
return true;
}

static function staticFoo() {
return true;
}
}

$rc = new ReflectionClass("C");

var_dump($rc->hasMethod('publicFoo'));

var_dump($rc->hasMethod('protectedFoo'));

var_dump($rc->hasMethod('privateFoo'));

var_dump($rc->hasMethod('staticFoo'));

// C には bar メソッドがありません
var_dump($rc->hasMethod('bar'));

// メソッド名は大文字小文字を区別しません
var_dump($rc->hasMethod('PUBLICfOO'));
?>

上の例の出力は以下となります。

bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)

参考

  • ReflectionClass::hasConstant() - 定数が定義されているかどうかを調べる
  • ReflectionClass::hasProperty() - プロパティが定義されているかどうかを調べる

User Contributed Notes

dn dot permyakov at gmail dot com 08-May-2019 11:32
Trait methods can be seen by both actual and alias names

<?php

trait Sauce
{
    public function getSpicy()
    {
        return 'Cayenne';
    }
}

class Sandwich
{
    use Sauce {
        Sauce::getSpicy as getSweet;
    }
}

$class = new \ReflectionClass('Sandwich');
var_dump($class->hasMethod('getSweet'));
var_dump($class->hasMethod('getSpicy'));
?>
bool(true)
bool(true)
Xorifelse 22-Dec-2016 01:23
It might be interesting to know that this is the only method to determine if a trait has a specific method:

  trait a{
    function __wakeup(){}
  }

  class b{}

  class c{
    use a;
  }

  var_dump((new ReflectionClass('a'))->hasMethod('__wakeup')); // true
  var_dump((new ReflectionClass('b'))->hasMethod('__wakeup')); // false
  var_dump((new ReflectionClass('c'))->hasMethod('__wakeup')); // true
flancer64 at gmail dot com 02-Aug-2016 10:50
Annotated methods that are implemented using PHP magic methods are not recognized  by "hasMethod".

<?php
/**
 * @method void annotatedMethod()
 */
class SomeClass
{
    public function __call($name, $arguments)
    {
        echo "this is magic method: $name.\n";
    }

    public function codedMethod()
    {
        echo "this is coded method.\n";
    }
}

$obj = new \SomeClass();
$obj->codedMethod();
$obj->annotatedMethod();

$ref = new ReflectionClass(\SomeClass::class);
echo "SomeClass has 'codedMethod': " . json_encode($ref->hasMethod('codedMethod')) . ".\n";
echo "SomeClass has 'annotatedMethod': " . json_encode($ref->hasMethod('annotatedMethod')) . ".\n";
?>

Output:

this is coded method.
this is magic method: annotatedMethod.
SomeClass has 'codedMethod': true.
SomeClass has 'annotatedMethod': false.
michaelgranados at gmail dot com 19-May-2012 02:47
A way to check if you can call an method over a class:

<?php
function is_public_method(
        /* string */$className,
        /* string */$method
){
    $classInstance = new ReflectionClass($className);
    if ($classInstance->hasMethod($method)) {
        return false;
    }
    $methodInstance = $instance->getMethod($method);
    return $methodInstance->isPublic();
}
?>
phoenix at todofixthis dot com 28-Oct-2010 09:47
Parent methods (regardless of visibility) are also available to a ReflectionObject.  E.g.,

<?php
class ParentObject {
  public function parentPublic(  ) {
  }

  private function parentPrivate(  ) {
  }
}

class ChildObject extends ParentObject {
}

$Instance = new ChildObject();
$Reflector = new ReflectionObject($Instance);

var_dump($Reflector->hasMethod('parentPublic'));  // true
var_dump($Reflector->hasMethod('parentPrivate')); // true
?>
hanguofeng at gmail dot com 20-Oct-2010 09:09
note that even if private method will also be 'has'.


プロパティが定義されているかどうかを調べる

  • ≪ ReflectionClass::hasMethod
  • ReflectionClass::implementsInterface ≫
  • PHP Manual
  • ReflectionClass
  • プロパティが定義されているかどうかを調べる

ReflectionClass::hasProperty

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::hasProperty — プロパティが定義されているかどうかを調べる

説明

public ReflectionClass::hasProperty(string $name): bool

特定のプロパティが定義されているかどうかを調べます。

パラメータ

name

調べたいプロパティの名前。

戻り値

プロパティが定義されている場合に true、それ以外の場合に false を返します。

例

例1 ReflectionClass::hasProperty() の例

<?php
class Foo {
public $p1;
protected $p2;
private $p3;

}

$obj = new ReflectionObject(new Foo());

var_dump($obj->hasProperty("p1"));
var_dump($obj->hasProperty("p2"));
var_dump($obj->hasProperty("p3"));
var_dump($obj->hasProperty("p4"));
?>

上の例の出力は、 たとえば以下のようになります。

bool(true)
bool(true)
bool(true)
bool(false)

参考

  • ReflectionClass::hasConstant() - 定数が定義されているかどうかを調べる
  • ReflectionClass::hasMethod() - メソッドが定義されているかどうかを調べる

User Contributed Notes

dalguete at gmail dot com 18-May-2021 12:48
hasProperty() now is consistent with getProperty() and getProperties() methods, thanks to this fix https://bugs.php.net/bug.php?id=49719

hasProperty() no longer returns true in private properties from parent classes.
dalguete at gmail dot com 17-May-2021 09:19
hasProperty() now is consistent with getProperty() and getProperties() methods, thanks to this fix https://bugs.php.net/bug.php?id=49719

hasProperty() no longer returns true in private properties.
rwilczek at web-appz dot de 13-Oct-2009 05:40
Note, that this method does not guarantee, that you can get a property with ReflectionClass::getProperty().

ReflectionClass::hasProperty() considers the parent classes (ignoring however, that a private property is not inherited), while ReflectionClass::getProperty() and ReflectionClass::getProperties() don't care about inheritance.

(Tested with PHP 5.3.0)

<?php
class Foo
{
    private $x;
}

class Bar extends Foo
{
    //
}

$foo = new ReflectionClass('Foo');
$bar = new ReflectionClass('Bar');

var_dump($foo->hasProperty('x'); // bool(true)
var_dump($bar->hasProperty('x'); // bool(true)

var_dump(get_class($foo->getProperty('x'))); //string(18) "ReflectionProperty"
try {
    $bar->getProperty('x');
} catch (ReflectionException $e) {
    echo $e->getMessage(); // Property x does not exist
}
?>


インターフェイスの実装を調べる

  • ≪ ReflectionClass::hasProperty
  • ReflectionClass::inNamespace ≫
  • PHP Manual
  • ReflectionClass
  • インターフェイスの実装を調べる

ReflectionClass::implementsInterface

(PHP 5, PHP 7, PHP 8)

ReflectionClass::implementsInterface — インターフェイスの実装を調べる

説明

public ReflectionClass::implementsInterface(ReflectionClass|string $interface): bool

インターフェイスを実装しているかどうかを調べます。

パラメータ

interface

インターフェイスの名前。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

ReflectionClass::implementsInterface() は、 interface がインターフェイスでない場合に ReflectionException をスローします。

参考

  • ReflectionClass::isInterface() - このクラスがインターフェイスであるかどうかを調べる
  • ReflectionClass::isSubclassOf() - サブクラスであるかどうかを調べる
  • interface_exists() - インターフェイスが宣言されているかどうかを確認する
  • オブジェクト インターフェイス

User Contributed Notes

jtunaley at gmail dot com 06-Jun-2018 10:22
Note that this method also returns true when the thing you're reflecting is the interface you're checking for:

<?php
interface MyInterface {}

$reflect = new ReflectionClass('MyInterface');
var_dump($reflect->implementsInterface('MyInterface')); // bool(true)
?>
keepchen2016 at gmail dot com 02-Jun-2017 08:49
interface Factory
{
    public function sayHello();
}

class ParentClass implements Factory
{
    public function sayHello()
    {
        echo "hello\n";
    }
}

class ChildrenClass extends ParentClass
{

}

$reflect = new ReflectionClass('ParentClass');
var_dump($reflect->implementsInterface('Factory'));

$second_ref = new ReflectionClass('ChildrenClass');
var_dump($second_ref->isSubclassOf('ParentClass'));

$third_ref = new ReflectionClass('Factory');
var_dump($third_ref->isInterface());

//can not be called as static
var_dump(ReflectionClass::isInterface('Factory'));
die;
//#result
bool(true)
bool(true)
bool(true)
PHP Fatal error:  Non-static method ReflectionClass::isInterface() cannot be called statically
dhairya dot coder at gmail dot com 11-Feb-2016 03:48
//checks that whether class Fruit implements interface apple or not

interface Apple {

    function taste();
}

class Fruit implements Apple {

    function taste() {
        echo "Seet";
    }
}

$obj=new ReflectionClass('Fruit');
var_dump($obj->implementsInterface('Apple'));  //Here it will checks that whether class Fruit implements interface apple or not


名前空間内にあるかどうかを調べる

  • ≪ ReflectionClass::implementsInterface
  • ReflectionClass::isAbstract ≫
  • PHP Manual
  • ReflectionClass
  • 名前空間内にあるかどうかを調べる

ReflectionClass::inNamespace

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionClass::inNamespace — 名前空間内にあるかどうかを調べる

説明

public ReflectionClass::inNamespace(): bool

このクラスが名前空間内で定義されているかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::inNamespace() の例

<?php
namespace A\B;

class Foo { }

$function = new \ReflectionClass('stdClass');

var_dump($function->inNamespace());
var_dump($function->getName());
var_dump($function->getNamespaceName());
var_dump($function->getShortName());

$function = new \ReflectionClass('A\\B\\Foo');

var_dump($function->inNamespace());
var_dump($function->getName());
var_dump($function->getNamespaceName());
var_dump($function->getShortName());
?>

上の例の出力は以下となります。

bool(false)
string(8) "stdClass"
string(0) ""
string(8) "stdClass"

bool(true)
string(7) "A\B\Foo"
string(3) "A\B"
string(3) "Foo"

参考

  • ReflectionClass::getNamespaceName() - 名前空間の名前を取得する
  • PHP 名前空間

User Contributed Notes

There are no user contributed notes for this page.


抽象クラスであるかどうかを調べる

  • ≪ ReflectionClass::inNamespace
  • ReflectionClass::isAnonymous ≫
  • PHP Manual
  • ReflectionClass
  • 抽象クラスであるかどうかを調べる

ReflectionClass::isAbstract

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isAbstract — 抽象クラスであるかどうかを調べる

説明

public ReflectionClass::isAbstract(): bool

抽象クラスであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::isAbstract() の例

<?php
class TestClass { }
abstract class TestAbstractClass { }

$testClass = new ReflectionClass('TestClass');
$abstractClass = new ReflectionClass('TestAbstractClass');

var_dump($testClass->isAbstract());
var_dump($abstractClass->isAbstract());
?>

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • ReflectionClass::isInterface() - このクラスがインターフェイスであるかどうかを調べる
  • クラスの抽象化

User Contributed Notes

baptiste at pillot dot fr 15-Sep-2023 01:06
For traits:
- ReflectionClass::isAbstract returns true if the trait contains at least one un-implemented abstract method, including those declared into used traits.
- ReflectionClass::isAbstract returns false if all methods are implemented.

<?php
trait TI { public function has() {} }
var_dump((new ReflectionClass(TI::class))->isAbstract());

trait TT { abstract public function has(); }
trait T { use TT; }
var_dump((new ReflectionClass(T::class))->isAbstract());
?>
Will output:
bool(false)
bool(true)

For interfaces:
- ReflectionClass::isAbstract returns true if the interface contains at least one method, including into its extended interfaces.
- ReflectionClass::isAbstract returns false if the interface contains no method.

<?php
interface AI {}
var_dump((new ReflectionClass(AI::class))->isAbstract());

interface II { public function has(); }
interface I extends II {}
var_dump((new ReflectionClass(I::class))->isAbstract());
?>
Will output:
bool(false)
bool(true)

For classes:
- Reflection::isAbstract returns true if the class is marked as abstract, no matter if it contains abstract methods or not.
baptiste at pillot dot fr 10-Oct-2016 12:06
For interfaces and traits :

<?php
interface TestInterface { }
trait     TestTrait { }

$interfaceClass = new ReflectionClass('TestInterface');
$traitClass     = new ReflectionClass('TestTrait');

var_dump($interfaceClass->isAbstract());
var_dump($traitClass->isAbstract());
?>

Using PHP versions 5.4- to 5.6, the above example will output:

bool(false)
bool(true)

Using PHP versions 7.0+, the above example will output:

bool(false)
bool(false)


クラスが無名クラスかを調べる

  • ≪ ReflectionClass::isAbstract
  • ReflectionClass::isCloneable ≫
  • PHP Manual
  • ReflectionClass
  • クラスが無名クラスかを調べる

ReflectionClass::isAnonymous

(PHP 7, PHP 8)

ReflectionClass::isAnonymous — クラスが無名クラスかを調べる

説明

public ReflectionClass::isAnonymous(): bool

クラスが無名クラスかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::isAnonymous() の例

<?php
class TestClass {}
$anonClass = new class {};

$normalClass = new ReflectionClass('TestClass');
$anonClass = new ReflectionClass($anonClass);

var_dump($normalClass->isAnonymous());
var_dump($anonClass->isAnonymous());

?>

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • ReflectionClass::isFinal() - final クラスであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


このクラスがクローン可能かどうかを返す

  • ≪ ReflectionClass::isAnonymous
  • ReflectionClass::isEnum ≫
  • PHP Manual
  • ReflectionClass
  • このクラスがクローン可能かどうかを返す

ReflectionClass::isCloneable

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionClass::isCloneable — このクラスがクローン可能かどうかを返す

説明

public ReflectionClass::isCloneable(): bool

このクラスがクローン可能かどうかを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

このクラスがクローン可能である場合に true、そうでない場合に false を返します。

例

例1 ReflectionClass::isCloneable() の基本的な使用例

<?php
class NotCloneable {
public $var1;

private function __clone() {
}
}

class Cloneable {
public $var1;
}

$notCloneable = new ReflectionClass('NotCloneable');
$cloneable = new ReflectionClass('Cloneable');

var_dump($notCloneable->isCloneable());
var_dump($cloneable->isCloneable());
?>

上の例の出力は以下となります。

bool(false)
bool(true)

User Contributed Notes

info at ensostudio dot ru 28-Aug-2022 04:36
similar function:
<?php
function isCloneable(object $obj): bool
{
       return !method_exists($obj, '__clone') || is_callable([$obj, '__clone']);
}
?>
info at ensostudio dot ru 28-Aug-2022 04:01
this method checks is  `__clone()`  method was declared as private
xxxargonxxx at gmail dot com 12-Sep-2019 05:05
I wonder how this method decides of is it clonable or not. There is no explanation.
php at abiusx dot com 18-Aug-2016 04:29
This does not work for many of core-classes, just like most other reflection methods.


列挙型であるかどうかを返す

  • ≪ ReflectionClass::isCloneable
  • ReflectionClass::isFinal ≫
  • PHP Manual
  • ReflectionClass
  • 列挙型であるかどうかを返す

ReflectionClass::isEnum

(PHP 8 >= 8.1.0)

ReflectionClass::isEnum — 列挙型であるかどうかを返す

説明

public ReflectionClass::isEnum(): bool

このクラスが、列挙型(Enum) かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

このクラスが 列挙型(Enum) の場合に true を返します。 そうでない場合、false を返します。

User Contributed Notes

There are no user contributed notes for this page.


final クラスであるかどうかを調べる

  • ≪ ReflectionClass::isEnum
  • ReflectionClass::isInstance ≫
  • PHP Manual
  • ReflectionClass
  • final クラスであるかどうかを調べる

ReflectionClass::isFinal

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isFinal — final クラスであるかどうかを調べる

説明

public ReflectionClass::isFinal(): bool

final クラスであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::isFinal() の例

<?php
class TestClass { }
final class TestFinalClass { }

$normalClass = new ReflectionClass('TestClass');
$finalClass = new ReflectionClass('TestFinalClass');

var_dump($normalClass->isFinal());
var_dump($finalClass->isFinal());

?>

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • ReflectionClass::isAbstract() - 抽象クラスであるかどうかを調べる
  • Final キーワード

User Contributed Notes

There are no user contributed notes for this page.


クラスのインスタンスであるかどうかを調べる

  • ≪ ReflectionClass::isFinal
  • ReflectionClass::isInstantiable ≫
  • PHP Manual
  • ReflectionClass
  • クラスのインスタンスであるかどうかを調べる

ReflectionClass::isInstance

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isInstance — クラスのインスタンスであるかどうかを調べる

説明

public ReflectionClass::isInstance(object $object): bool

あるオブジェクトがクラスのインスタンスであるかどうかを調べます。

パラメータ

object

比べたいオブジェクト。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::isInstance() の例

<?php
// 使用例
$class = new ReflectionClass('Foo');

if ($class->isInstance($arg)) {
echo "Yes";
}

// これも同じ意味です
if ($arg instanceof Foo) {
echo "Yes";
}

// これも同じ意味です
if (is_a($arg, 'Foo')) {
echo "Yes";
}
?>

上の例の出力は、 たとえば以下のようになります。

Yes
Yes
Yes

参考

  • ReflectionClass::isInterface() - このクラスがインターフェイスであるかどうかを調べる
  • 型演算子 (instanceof)
  • オブジェクト インターフェイス
  • is_a() - オブジェクトが指定された型のものか、部分型であるかを調べる

User Contributed Notes

dhairya lakhera 11-Feb-2016 04:55
class  TestClass { }

$TestObj=new TestClass();

$TestObj_assigned=$TestObj;
$TestObj_Refrenced=&$TestObj;
$TestObj_cloned=clone $TestObj;

$obj=new ReflectionClass('TestClass');

var_dump($obj->isInstance($TestObj));
var_dump($obj->isInstance($TestObj_assigned));
var_dump($obj->isInstance($TestObj_Refrenced));
var_dump($obj->isInstance($TestObj_cloned));


クラスのインスタンス化が可能であるかどうかを調べる

  • ≪ ReflectionClass::isInstance
  • ReflectionClass::isInterface ≫
  • PHP Manual
  • ReflectionClass
  • クラスのインスタンス化が可能であるかどうかを調べる

ReflectionClass::isInstantiable

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isInstantiable — クラスのインスタンス化が可能であるかどうかを調べる

説明

public ReflectionClass::isInstantiable(): bool

クラスのインスタンス化が可能であるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::isInstantiable() の例

<?php
class C { }

interface iface {
function f1();
}

class ifaceImpl implements iface {
function f1() {}
}

abstract class abstractClass {
function f1() { }
abstract function f2();
}

class D extends abstractClass {
function f2() { }
}

trait T {
function f1() {}
}

class privateConstructor {
private function __construct() { }
}

$classes = array(
"C",
"iface",
"ifaceImpl",
"abstractClass",
"D",
"T",
"privateConstructor",
);

foreach($classes as $class ) {
$reflectionClass = new ReflectionClass($class);
echo "Is $class instantiable? ";
var_dump($reflectionClass->isInstantiable());
}

?>

上の例の出力は以下となります。

Is C instantiable?  bool(true)
Is iface instantiable?  bool(false)
Is ifaceImpl instantiable?  bool(true)
Is abstractClass instantiable?  bool(false)
Is D instantiable?  bool(true)
Is T instantiable?  bool(false)
Is privateConstructor instantiable?  bool(false)

参考

  • ReflectionClass::isInstance() - クラスのインスタンスであるかどうかを調べる

User Contributed Notes

shaun at slickdesign dot com dot au 19-Apr-2018 05:37
An example missing from the documentation is that `ReflectionClass::isInstantiable` will also return false for traits, as well as interfaces and abstract classes.

<?php
trait t {
    // Optional trait methods and properties etc.
}

$reflectionClass = new ReflectionClass("t");
var_dump($reflectionClass->isInstantiable()); // bool(false)
?>

As for classes with private constructors, it is still possible to create an instance by either bypassing the constructor using `ReflectionClass::newInstanceWithoutConstructor`, or by ensuring the class has a method which can create a new instance.

<?php
class p {
    private function __construct() {
        // Optional constructor logic - not called when ReflectionClass::newInstanceWithoutConstructor is used.
    }

    public static function create() {
        return new p;
    }

    // Optional methods and properties etc.
}

// Class is not classed as instantiable.
$reflectionClass = new ReflectionClass("p");
var_dump($reflectionClass->isInstantiable()); // bool(false)

// We're still able to create an instance using one of the two methods.
$p = p::create();
$p = $reflectionClass->newInstanceWithoutConstructor();
?>

The same is also true for protected constructors, however, the class can be instantiated from either parent or child methods, depending on where the constructor is defined.

<?php
class p {
    protected function __construct() {
        // Optional constructor logic.
    }

    public static function create( $class = "" ) {
        if (!$class) {
            $class = get_called_class();
        }
        return new $class;
    }

    // Optional parent methods and properties etc.
}

class c extends p
{
    // Optional child methods and properties etc.
}

// Both child and parent static methods have access to each other's protected constructor.
$p = c::create("p");
$c = p::create("c");

// Both are still not classed as being instantiable.
$reflectionClassP = new ReflectionClass("p");
$reflectionClassC = new ReflectionClass("c");
var_dump($reflectionClassP->isInstantiable()); // bool(false)
var_dump($reflectionClassC->isInstantiable()); // bool(false)

// We're still able to bypass the constructor and create an instance for each.
$p = $reflectionClassP->newInstanceWithoutConstructor();
$c = $reflectionClassC->newInstanceWithoutConstructor();
?>


このクラスがインターフェイスであるかどうかを調べる

  • ≪ ReflectionClass::isInstantiable
  • ReflectionClass::isInternal ≫
  • PHP Manual
  • ReflectionClass
  • このクラスがインターフェイスであるかどうかを調べる

ReflectionClass::isInterface

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isInterface — このクラスがインターフェイスであるかどうかを調べる

説明

public ReflectionClass::isInterface(): bool

このクラスがインターフェイスであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::isInterface() の基本的な使用例

<?php
interface SomeInterface {
public function interfaceMethod();
}

$class = new ReflectionClass('SomeInterface');
var_dump($class->isInterface());
?>

上の例の出力は以下となります。

bool(true)

参考

  • ReflectionClass::isInstance() - クラスのインスタンスであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュールあるいはコアで定義された内部クラスであるかどうかを調べる

  • ≪ ReflectionClass::isInterface
  • ReflectionClass::isIterable ≫
  • PHP Manual
  • ReflectionClass
  • 拡張モジュールあるいはコアで定義された内部クラスであるかどうかを調べる

ReflectionClass::isInternal

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isInternal — 拡張モジュールあるいはコアで定義された内部クラスであるかどうかを調べる

説明

public ReflectionClass::isInternal(): bool

そのクラスが拡張モジュールやコアで定義された内部クラスである (ユーザーが定義したものではない) かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 ReflectionClass::isInternal() の基本的な使用例

<?php
$internalclass = new ReflectionClass('ReflectionClass');

class Apple {}
$userclass = new ReflectionClass('Apple');

var_dump($internalclass->isInternal());
var_dump($userclass->isInternal());
?>

上の例の出力は以下となります。

bool(true)
bool(false)

参考

  • ReflectionClass::isUserDefined() - ユーザー定義であるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


このクラスがイテレーション可能かを調べる

  • ≪ ReflectionClass::isInternal
  • ReflectionClass::isIterateable ≫
  • PHP Manual
  • ReflectionClass
  • このクラスがイテレーション可能かを調べる

ReflectionClass::isIterable

(PHP 7 >= 7.2.0, PHP 8)

ReflectionClass::isIterable — このクラスがイテレーション可能かを調べる

説明

public ReflectionClass::isIterable(): bool

このクラスがイテレーション可能か(つまり、foreach の内部で使えるか)を調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 基本的な ReflectionClass::isIterable() の例

<?php

class IteratorClass implements Iterator {
public function __construct() { }
public function key() { }
public function current() { }
function next() { }
function valid() { }
function rewind() { }
}
class DerivedClass extends IteratorClass { }
class NonIterator { }

function dump_iterable($class) {
$reflection = new ReflectionClass($class);
var_dump($reflection->isIterable());
}

$classes = array("ArrayObject", "IteratorClass", "DerivedClass", "NonIterator");

foreach ($classes as $class) {
echo "Is $class iterable? ";
dump_iterable($class);
}
?>

上の例の出力は以下となります。

Is ArrayObject iterable? bool(true)
Is IteratorClass iterable? bool(true)
Is DerivedClass iterable? bool(true)
Is NonIterator iterable? bool(false)

参考

  • ReflectionClass::__construct() - ReflectionClass を作成する

User Contributed Notes

There are no user contributed notes for this page.


のエイリアス ReflectionClass::isIterable

  • ≪ ReflectionClass::isIterable
  • ReflectionClass::isReadOnly ≫
  • PHP Manual
  • ReflectionClass
  • のエイリアス ReflectionClass::isIterable

ReflectionClass::isIterateable

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isIterateable — のエイリアス ReflectionClass::isIterable()

説明

のエイリアス ReflectionClass::isIterable()

PHP 7.2.0 以降は、スペルミスがある RefectionClass::isIterateable() の代わりに、 ReflectionClass::isIterable() を使うのが好ましいです。

User Contributed Notes

There are no user contributed notes for this page.


クラスが readonly かを調べる

  • ≪ ReflectionClass::isIterateable
  • ReflectionClass::isSubclassOf ≫
  • PHP Manual
  • ReflectionClass
  • クラスが readonly かを調べる

ReflectionClass::isReadOnly

(PHP 8 >= 8.2.0)

ReflectionClass::isReadOnly — クラスが readonly かを調べる

説明

public ReflectionClass::isReadOnly(): bool

クラスが readonly かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

クラスが readonly の場合は true を返します。そうでない場合、false を返します。

例

例1 ReflectionClass::isReadOnly() の例

<?php
class TestClass { }
readonly class TestReadOnlyClass { }

$normalClass = new ReflectionClass('TestClass');
$readonlyClass = new ReflectionClass('TestReadOnlyClass');

var_dump($normalClass->isReadOnly());
var_dump($readonlyClass->isReadOnly());

?>

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • ReflectionClass::isAbstract() - 抽象クラスであるかどうかを調べる
  • 読み取り専用クラス

User Contributed Notes

There are no user contributed notes for this page.


サブクラスであるかどうかを調べる

  • ≪ ReflectionClass::isReadOnly
  • ReflectionClass::isTrait ≫
  • PHP Manual
  • ReflectionClass
  • サブクラスであるかどうかを調べる

ReflectionClass::isSubclassOf

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isSubclassOf — サブクラスであるかどうかを調べる

説明

public ReflectionClass::isSubclassOf(ReflectionClass|string $class): bool

指定したクラスを継承している、あるいは指定したインターフェイスを実装しているかどうかを調べます。

パラメータ

class

調べたいクラス名の string または、ReflectionClass のオブジェクト

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • ReflectionClass::isInterface() - このクラスがインターフェイスであるかどうかを調べる
  • ReflectionClass::implementsInterface() - インターフェイスの実装を調べる
  • is_subclass_of() - あるオブジェクトが指定したクラスのサブクラスに属するか (あるいは指定したインターフェイスを実装しているか) どうかを調べる
  • get_parent_class() - オブジェクトの親クラスの名前を取得する

User Contributed Notes

voitcus at gmail dot com 23-Oct-2019 06:02
Note, that this method is a bit different than the `instanceof` operator, which returns true, when it is a subclass or the very same class (interface). Here, only being a subclass results in true, eg.

class A {}
class B extends A {}

$a = new ReflectionClass('A');
$AA = new A;
$b = new ReflectionClass('B');
$BB = new B;

var_dump($a->isSubclassOf($b)); // false
var_dump($AA instanceof $BB); // false

var_dump($b->isSubclassOf($a)); // true
var_dump($BB instanceof $AA); // true

var_dump($a->isSubclassOf($a)); // false
var_dump($AA instanceof $AA); // true
dhairya lakhera 11-Feb-2016 05:22
class A {}
class B {}
class C extends B {}

$obj=new ReflectionClass('C');

var_dump($obj->isSubclassOf ('A')); //boolean false
var_dump($obj->isSubclassOf ('B')); //boolean true


トレイトであるかどうかを返す

  • ≪ ReflectionClass::isSubclassOf
  • ReflectionClass::isUserDefined ≫
  • PHP Manual
  • ReflectionClass
  • トレイトであるかどうかを返す

ReflectionClass::isTrait

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionClass::isTrait — トレイトであるかどうかを返す

説明

public ReflectionClass::isTrait(): bool

ReflectionClass が、トレイトを参照しているかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

これがトレイトである場合に true、そうでない場合に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


ユーザー定義であるかどうかを調べる

  • ≪ ReflectionClass::isTrait
  • ReflectionClass::newInstance ≫
  • PHP Manual
  • ReflectionClass
  • ユーザー定義であるかどうかを調べる

ReflectionClass::isUserDefined

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isUserDefined — ユーザー定義であるかどうかを調べる

説明

public ReflectionClass::isUserDefined(): bool

そのクラスが (内部クラスではなく) ユーザーが定義したものであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • ReflectionClass::isInternal() - 拡張モジュールあるいはコアで定義された内部クラスであるかどうかを調べる

User Contributed Notes

dhairya lakhera 11-Feb-2016 05:38
$internalclass = new ReflectionClass('ReflectionClass');

class Apple {}
$userclass = new ReflectionClass('Apple');

var_dump($internalclass->isUserDefined());
var_dump($userclass->isUserDefined());


指定した引数でクラスの新しいインスタンスを作成する

  • ≪ ReflectionClass::isUserDefined
  • ReflectionClass::newInstanceArgs ≫
  • PHP Manual
  • ReflectionClass
  • 指定した引数でクラスの新しいインスタンスを作成する

ReflectionClass::newInstance

(PHP 5, PHP 7, PHP 8)

ReflectionClass::newInstance — 指定した引数でクラスの新しいインスタンスを作成する

説明

public ReflectionClass::newInstance(mixed ...$args): object

クラスの新しいインスタンスを作成します。指定した引数をクラスのコンストラクタに渡します。

パラメータ

args

可変長の引数を受け付け、それを call_user_func() と同じ方式でクラスのコンストラクタに渡します。

戻り値

エラー / 例外

コンストラクタが public でない場合は ReflectionException が発生します。

クラスにコンストラクタがないときに args を指定すると ReflectionException が発生します。

参考

  • ReflectionClass::newInstanceArgs() - 指定した引数でクラスの新しいインスタンスを作成する
  • ReflectionClass::newInstanceWithoutConstructor() - コンストラクタを起動せずに新しいクラスのインスタンスを作成する

User Contributed Notes

glen at delfi dot ee 07-Oct-2015 11:19
looks like reflection class newInstance creates in memory representation of code where values are used, so using reference as constructor signature, you can not use this method.

as  the same input if called via new, or new $class works, but not via reflection:

 class a {
     public function __construct(&$a, $c) {
     }
 }

// this works
 $A = new stdClass();
 $a = new a($A, 11);

 // also this works
 $classname = "a";
 $a = new $classname($A, 10);

 // but this fails:
 $r = new ReflectionClass("a");
 $r->newInstance($A, 10);

 PHP Warning:  Parameter 1 to a::__construct() expected to be a reference, value given in reflection.php on line 15

 PHP Warning:  ReflectionClass::newInstance(): Invocation of a's constructor failed in reflection.php on line 15


指定した引数でクラスの新しいインスタンスを作成する

  • ≪ ReflectionClass::newInstance
  • ReflectionClass::newInstanceWithoutConstructor ≫
  • PHP Manual
  • ReflectionClass
  • 指定した引数でクラスの新しいインスタンスを作成する

ReflectionClass::newInstanceArgs

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

ReflectionClass::newInstanceArgs — 指定した引数でクラスの新しいインスタンスを作成する

説明

public ReflectionClass::newInstanceArgs(array $args = []): ?object

クラスの新しいインスタンスを作成します。指定した引数をクラスのコンストラクタに渡します。

パラメータ

args

クラスのコンストラクタに渡すパラメータを配列で指定します。

戻り値

クラスの新しいインスタンスを返します。 失敗した場合は null を返します。

エラー / 例外

コンストラクタが public でない場合は ReflectionException が発生します。

クラスにコンストラクタがないときに args を指定すると ReflectionException が発生します。

例

例1 ReflectionClass::newInstanceArgs() の基本的な使用例

<?php
$class = new ReflectionClass('ReflectionFunction');
$instance = $class->newInstanceArgs(array('substr'));
var_dump($instance);
?>

上の例の出力は以下となります。

object(ReflectionFunction)#2 (1) {
  ["name"]=>
  string(6) "substr"
}

参考

  • ReflectionClass::newInstance() - 指定した引数でクラスの新しいインスタンスを作成する
  • ReflectionClass::newInstanceWithoutConstructor() - コンストラクタを起動せずに新しいクラスのインスタンスを作成する

User Contributed Notes

kirillsaksin at no-spam dot yandex dot ru 10-Nov-2015 05:59
Hack to properly instantiate class with private constructor:

<?php

class TestClass
{
    private $property;
    private function __construct($argument)
    {
        $this->property = $argument;
    }
}

$ref = new ReflectionClass(TestClass::class);
$instance = $ref->newInstanceWithoutConstructor();
var_dump($instance);
echo PHP_EOL . '------------------------' . PHP_EOL . PHP_EOL;
$constructor = $ref->getConstructor();
$constructor->setAccessible(true);
$constructor->invokeArgs($instance, ['It works!']);
var_dump($instance);

// Output:
// class TestClass#3 (1) {
//   private $property =>
//   NULL
// }
//
// ------------------------
//
// class TestClass#3 (1) {
//   private $property =>
//   string(9) "It works!"
// }

?>
dev at yopmail dot com 04-Jul-2015 03:06
With PHP 5.6, we can use the ... (T_ELLIPSIS) operator

<?php

class Test {
    public function __construct($a, $b) {
        echo $a . ' ' . $b;
    }
}

$args = array(12, 34);
new Test(... $args); // Displays "12 34"

?>
talk at stephensugden dot com 30-Oct-2010 03:17
This is the way I dynamically instantiate objects in my lightweight IoC container

<?php

class SimpleContainer {

  // ...

  // Creates an instance of an object with the provided array of arguments
  protected function instantiate($name, $args=array()){
    if(empty($args))
      return new $name();
    else {
      $ref = new ReflectionClass($name);
      return $ref->newInstanceArgs($args);
    }
  }
  // ...
}
?>

I explicitly do NOT handle the case where a user passes constructor arguments for a constructor-less class, as I this SHOULD fail.
sausage at tehsausage dot com 21-Aug-2010 04:14
Annoyingly, this will throw an exception for classes with no constructor even if you pass an empty array for the arguments. For generic programming you should avoid this function and use call_user_func_array with newInstance.
sarfraznawaz2005 at gmail dot com 14-Dec-2009 11:31
I use reflection class and also detect whether arguments are passed by reference or passed by value
and then initiate/call the method successfully with those arguments:

<?php
    if (count($args) > 1)
    {
        if (method_exists($class_name,  '__construct') === false)
        {
            exit("Constructor for the class <strong>$class_name</strong> does not exist, you should not pass arguments to the constructor of this class!");
        }

        $refMethod = new ReflectionMethod($class_name,  '__construct');
        $params = $refMethod->getParameters();

        $re_args = array();

        foreach($params as $key => $param)
        {
            if ($param->isPassedByReference())
            {
                $re_args[$key] = &$args[$key];
            }
            else
            {
                $re_args[$key] = $args[$key];
            }
        }

        $refClass = new ReflectionClass($class_name);
        $class_instance = $refClass->newInstanceArgs((array) $re_args);
    }
?>
kevinpeno at gmail dot com 16-Sep-2009 08:11
I misunderstood this function to be a sort of setter of Reflection::newInstance() arguments in an array form rather than a creator of new instances itself.

This function is equivilant to call_user_func_array() while Reflection::newInstance() is equivilant to call_user_func()
richardcook at gmail dot com 12-Apr-2009 02:39
the newInstanceArgs function cannot call a class' constructor if it has references in its arguments, so be careful what you pass into it:

<?php
class Foo {
    function __construct (&$arr) {
        $this->arr = &$arr;
    }
    function createInstance () {
        $reflectionClass = new ReflectionClass("Bar");

        return $reflectionClass->newInstanceArgs(array($this, $this->arr));
    }
    function mod($key, $val) {
        $this->arr[$key] = $val;
    }
}

class Bar {
    function __construct (&$foo, &$arr) {
        $this->foo = &$foo;
        $this->arr = &$arr;
    }
    function mod($key, $val) {
        $this->arr[$key] = $val;
    }
}

$arr = array();

$foo = new Foo($arr);

$arr["x"] = 1;

$foo->mod("y", 2);

$bar = $foo->createInstance();

$bar->mod("z", 3);

echo "<pre>";
print_r($arr);
print_r($foo);
print_r($bar);
echo "</pre>";

/*
Output:
Warning: Invocation of Bar's constructor failed in [code path] on line 31

Fatal error: Call to a member function mod() on a non-object in [code path] on line 58
*/
?>
gromit at mailinator dot com 29-Jul-2008 01:37
Be aware that calling the method newInstanceArgs with an empty array will still call the constructor with no arguments. If the class has no constructor then it will generate an exception.

You need to check if a constructor exists before calling this method or use try and catch to act on the exception.


コンストラクタを起動せずに新しいクラスのインスタンスを作成する

  • ≪ ReflectionClass::newInstanceArgs
  • ReflectionClass::setStaticPropertyValue ≫
  • PHP Manual
  • ReflectionClass
  • コンストラクタを起動せずに新しいクラスのインスタンスを作成する

ReflectionClass::newInstanceWithoutConstructor

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionClass::newInstanceWithoutConstructor — コンストラクタを起動せずに新しいクラスのインスタンスを作成する

説明

public ReflectionClass::newInstanceWithoutConstructor(): object

クラスの新しいインスタンスを、そのクラスのコンストラクタを実行せずに作成します。

パラメータ

戻り値

エラー / 例外

そのクラスが内部クラスであり、コンストラクタを実行せずにインスタンスを作成することができなかった場合に ReflectionException が発生します。 この例外が発生するのは、 final な内部クラスに限られます。

参考

  • ReflectionClass::newInstance() - 指定した引数でクラスの新しいインスタンスを作成する
  • ReflectionClass::newInstanceArgs() - 指定した引数でクラスの新しいインスタンスを作成する

User Contributed Notes

benoit dot wery at online dot fr 28-Oct-2023 08:04
Using ReflectionClass::newInstanceWithoutConstructor and ReflectionProperty::setValue allow to set a value for a readonly promoted property. For example this code works (tested on PHP 8.2) :

<?php

class Test
{
    public function __construct(public readonly string $name)
    {}
}

$test1 = new Test('test1');
$reflectionProperty = new ReflectionProperty(Test::class, 'name');
// next line would throw a Fatal error
$reflectionProperty->setValue($test1, 'error');

$reflectionClass = new ReflectionClass(Test::class);
$test2 = $reflectionClass->newInstanceWithoutConstructor();
$reflectionProperty->setValue($test2, 'test2');

echo $test2->name; // will output "test2"
ben at NOSPAM dot fanmade dot de 17-Feb-2021 07:51
Such a function should definitely end up in productive code as rarely as possible.
There are always exceptions though :)
We have UseCase classes in our library extending an abstract UseCase having a constructor that does some setting up and it will even throw exceptions if some specific conditions are not yet met.
Within that UseCase the permissions are also defined.
Simplified example:
<?php
abstract class UseCase implements IUseCase
{
    /** @var string[] */
    protected array $requiredPermissions = [];

    final public function __construct(IPresenter $out)
    {
        // several startup checks, including authorization
    }
}
?>
We already have a better solution, but it will take some time to refactor that and we will have to live with this for at least a few weeks.
Now I've had the idea to check the permissions in the application's incoming request way before the individual UseCase will be initialized.
So after seeing this method here I just introduced this little helper into our abstract UseCase:
<?php
    public static function getRequiredPermissions(): array
    {
        $class = new ReflectionClass(get_called_class());

        return $class->newInstanceWithoutConstructor()->requiredPermissions;
    }
?>
Now I'm able to check the permissions in my request without really touching anything in the library:
<?php
    public function authorize(): bool
    {
        if (!$this->user->hasPermissions(CreatePost::getRequiredPermissions())) {
            return false;
        }
        return true;
    }
?>
This does also have the benefit of adding one more reason to switch to our new UseCase classes ASAP :)
260 at ciemnosc 06-Feb-2016 02:11
sorry for replying to such an old comment, but there's something i wanted to point out.

@  tom at r dot je:
While I agree with what you said in general, there *are* cases where it's not true, and since PHP doesn't allow for multiple constructors there's no other good way around it.

> The problem? It breaks encapsulation.
> An object can exist in the application but may not be able to fulfill its
> responsibility because it's missing dependencies.
> The use of this method makes it possible for an incomplete object
> to exist in the system;
> the object can exist in a state that its author never intended.

If you're using this method from some factory method, to manually init the object in other way that the constructor that, this point is no longer valid.

Consider the example, where you use constructor to set-up the object after getting it from database (e.g. you need to pull some array from other table, basing on some id parameter). But you want to also be able to create object manually (for inserting to the database, for example).
The best thing to do would be to have two different constructors, but since it is not possible in php you need some other way to create the object.

example:

<?php
// this usually would be a static cache in some class, or array returned by method getMeta($id), etc.
$meta = array(1337 => array('key1' => 'value1', 'key2' => 'value2'));

class Test {
    public $id;
    public $data;
    public $meta;

    public function __construct() {
        global $meta;
        if(is_int($this->id)) $this->meta = $meta[$this->id];
    }
    public static function create_empty() {
        $r = new ReflectionClass(__CLASS__);
        return $r->newInstanceWithoutConstructor();
    }
}
echo "emulating PDO::FETCH_CLASS behavior: ";
$t = Test::create_empty();
$t->meta = 1337;
$t->__construct();
var_dump($t);

echo "empty class: ";
$testItem = Test::create_empty();
// ... here you can start setting up the item, e.g. from XML
var_dump($testItem);

$testItem->id = 0;
$testItem->data = "some data";
$testItem->meta = array("somekey" => "somevalue");

echo "after setup:";
var_dump($testItem);
?>

Of course, you can instead make empty constructor, and create some init() method, but then you have to remember to call init() everywhere.
You can also create some other way of adding the item to database, but then you'd have to classes to handle the same data - one for retrieving and other for storing.

If you instead use some factory class (or just a factory method, like in the simplified example above) having a way to create totally empty object is useful. With full factory approach you would first use some TestFactory->prepare() method, then you'd call methods to set what you need, and the factory would set all uninitialized variables to some default values upon calling TestFactory->get() to retrieve prepared object.
tom at r dot je 11-Jun-2013 09:53
It should be made clear that from an OOP theory perspective the use of this method is very bad practice in the same manner as goto, eval and singletons. If you find a need to use it in production code you're almost certainly doing something wrong somewhere. It may occasionally be useful for debugging, but even then hints at poor initial code.

The problem? It breaks encapsulation. An object can exist in the application but may not be able to fulfill its responsibility because it's missing dependencies. The use of this method makes it possible for an incomplete object to exist in the system; the object can exist in a state that its author never intended. This is bad because it will cause unexpected things to happen! A fundamental principle in OOP is that objects are in complete control of their state, the use of this method prevents that guarantee.

n.b. The annotation based "dependency injection" listed below is not a solution or valid use-case for this either because it breaks encapsulation (Among other things!) and the class being constructed needs to know of the container by providing annotations.
me [ata] thomas-lauria.de 28-Apr-2012 06:51
This new Feature enables Annotation based Dependency Injection:
<?php

//dependency to inject
class dep {}

class a {
  /**
   * @inject
   * @var dep
   */
  protected $foo;
}

class b extends a {
  /**
   * @inject
   * @var dep
   */
  protected $bar;

  public function __construct() {
    echo "CONSTRUCTOR CALLED\n";
  }
}

$ref = new ReflectionClass('b');
$inst = $ref->newInstanceWithoutConstructor();

$list = $ref->getProperties();
foreach($list as $prop){
  /* @var $prop ReflectionProperty */
  $prop->getDocComment(); //grep for @inject and the @vars class name
  $prop->setAccessible(true);
  $prop->setValue($inst, new dep());
}
if($const = $ref->getConstructor()) {
  $constName = $const->getName();
  $inst->{$constName}(); //use call_user_func_array($function, $param_arr); for arguments
}

print_r($inst);
print_r($inst->foo); //property still not accessable

The Output:

CONSTRUCTOR CALLED
b Object
(
    [bar:protected] => dep Object
        (
        )

    [foo:protected] => dep Object
        (
        )

)
PHP Fatal error:  Cannot access protected property b::$foo in diTest.php on line 42
oliver at ananit dot de 24-Nov-2011 03:57
If this method is not available in your version of PHP you can use a trick to create an instance without calling the constructor.
Use reflection to get the properties and default values of the class, and create a fake "serialized" string.

<?php
function createInstanceWithoutConstructor($class){
    $reflector = new ReflectionClass($class);
    $properties = $reflector->getProperties();
    $defaults = $reflector->getDefaultProperties();

    $serealized = "O:" . strlen($class) . ":\"$class\":".count($properties) .':{';
    foreach ($properties as $property){
        $name = $property->getName();
        if($property->isProtected()){
                $name = chr(0) . '*' .chr(0) .$name;
            } elseif($property->isPrivate()){
                $name = chr(0)  . $class.  chr(0).$name;
            }
            $serealized .= serialize($name);
            if(array_key_exists($property->getName(),$defaults) ){
                $serealized .= serialize($defaults[$property->getName()]);
            } else {
                $serealized .= serialize(null);
            }
        }
    $serealized .="}";
    return unserialize($serealized);
}
?>

Example:

<?php
class foo
{
    public $a = 10;
    protected $b = 2;
    private $c = "default";
    protected $d;
    public function __construct(){
        $this->a = null;
        $this->b = null;
        $this->c = "constructed";
        $this->d = 42;
    }
}

var_dump(createInstanceWithoutConstructor('foo'));
?>

Output:
object(foo)#6 (4) {
  ["a"]=>
  int(10)
  ["b":protected]=>
  int(2)
  ["c":"foo":private]=>
  string(7) "default"
  ["d":protected]=>
  NULL
}

I hope this can help someone.
Oliver Anan
alejosimon at gmail 06-Sep-2011 06:41
A good first use for this new method.

It implements a transparent parser constructor argument to achieve 99% reusable component.

<?php

use ReflectionClass ;

trait TSingleton
{
    /**
    *    Constructor.
    */
    protected function __construct() {}

    /**
    *    Drop clone singleton objects.
    */
    protected function __clone() {}

    /**
    *    Gets only one instance.
    *
    *    @params Optional multiple values as arguments for the constructor.
    *    @return Object instance from called class.
    */
    public static function getInstance()
    {
        static $instance = null ;

        if ( ! $instance )
        {
            $ref  = new ReflectionClass( get_called_class() ) ;
            $ctor = $ref->getConstructor() ;

            // Thanks PHP 5.4
            $self = $ref->newInstanceWithoutConstructor() ;

            // The magic.
            $ctor->setAccessible( true ) ;
            $instance = $ctor->invokeArgs( $self, func_get_args() ) ;
        }

        return $instance ;
    }
}

?>


staticプロパティの値を設定する

  • ≪ ReflectionClass::newInstanceWithoutConstructor
  • ReflectionClass::__toString ≫
  • PHP Manual
  • ReflectionClass
  • staticプロパティの値を設定する

ReflectionClass::setStaticPropertyValue

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::setStaticPropertyValue — staticプロパティの値を設定する

説明

public ReflectionClass::setStaticPropertyValue(string $name, mixed $value): void

staticプロパティの値を設定します。

パラメータ

name

プロパティの名前。

value

新しいプロパティの値。

戻り値

値を返しません。

参考

  • ReflectionClass::getStaticPropertyValue() - staticプロパティの値を取得する

User Contributed Notes

Andrew Jackson 31-Mar-2014 10:53
Calling this method on a static property that is not public will return a ReflectionException stating the property does not exist. This is quite misleading as the property is valid.

class test {
    public static $publicProperty = 'public';
    private static $privateProperty = 'private';

    public static function printProperties() {
        echo self::$publicProperty . "\n";
        echo self::$privateProperty . "\n";
    }
}

$reflectedClass = new \ReflectionClass('test');
$reflectedClass->setStaticPropertyValue('publicProperty', 'foo');
$reflectedClass->setStaticPropertyValue( 'privateProperty', 'bar' );

PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Class test does not have a property named privateProperty'

If you retrieve the method using the reflection class getProperty method you can circumnavigate this issue

$reflectedProperty = $reflectedClass->getProperty('privateProperty');
$reflectedProperty->setAccessible(true);
$reflectedProperty = $reflectedProperty->setValue('bar');

test::printProperties();
will echo
foo
bar
chuck at manchuck dot com 13-Jul-2012 01:40
It is important to note that calling ReflectionClass::setStaticPropertyValue will not allow you to add new static properties to a class.


ReflectionClass オブジェクトの文字列表現を返す

  • ≪ ReflectionClass::setStaticPropertyValue
  • ReflectionClassConstant ≫
  • PHP Manual
  • ReflectionClass
  • ReflectionClass オブジェクトの文字列表現を返す

ReflectionClass::__toString

(PHP 5, PHP 7, PHP 8)

ReflectionClass::__toString — ReflectionClass オブジェクトの文字列表現を返す

説明

public ReflectionClass::__toString(): string

ReflectionClass オブジェクトの文字列表現を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

この ReflectionClass インスタンスの文字列表現を返します。

例

例1 ReflectionClass::__toString() の例

<?php
$reflectionClass = new ReflectionClass('Exception');
echo $reflectionClass->__toString();
?>

上の例の出力は以下となります。

Class [ <internal:Core> class Exception ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [7] {
    Property [ <default> protected $message ]
    Property [ <default> private $string ]
    Property [ <default> protected $code ]
    Property [ <default> protected $file ]
    Property [ <default> protected $line ]
    Property [ <default> private $trace ]
    Property [ <default> private $previous ]
  }

  - Methods [10] {
    Method [ <internal:Core> final private method __clone ] {
    }

    Method [ <internal:Core, ctor> public method __construct ] {

      - Parameters [3] {
        Parameter #0 [ <optional> $message ]
        Parameter #1 [ <optional> $code ]
        Parameter #2 [ <optional> $previous ]
      }
    }

    Method [ <internal:Core> final public method getMessage ] {
    }

    Method [ <internal:Core> final public method getCode ] {
    }

    Method [ <internal:Core> final public method getFile ] {
    }

    Method [ <internal:Core> final public method getLine ] {
    }

    Method [ <internal:Core> final public method getTrace ] {
    }

    Method [ <internal:Core> final public method getPrevious ] {
    }

    Method [ <internal:Core> final public method getTraceAsString ] {
    }

    Method [ <internal:Core> public method __toString ] {
    }
  }
}

参考

  • ReflectionClass::export() - クラスをエクスポートする
  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionClassConstant クラス

(PHP 7 >= 7.1.0, PHP 8)

はじめに

ReflectionClassConstant クラスは、クラス定数に関する情報を報告します。

クラス概要

class ReflectionClassConstant implements Reflector {
/* 定数 */
public const int IS_PUBLIC;
public const int IS_PROTECTED;
public const int IS_PRIVATE;
public const int IS_FINAL;
/* プロパティ */
public string $name;
public string $class;
/* メソッド */
public __construct(object|string $class, string $constant)
public static export(mixed $class, string $name, bool $return = ?): string
public getAttributes(?string $name = null, int $flags = 0): array
public getDeclaringClass(): ReflectionClass
public getDocComment(): string|false
public getModifiers(): int
public getName(): string
public getValue(): mixed
public isEnumCase(): bool
public isFinal(): bool
public isPrivate(): bool
public isProtected(): bool
public isPublic(): bool
public __toString(): string
}

プロパティ

name

クラス定数の名前。読み取り専用です。 書き込もうとすると ReflectionException がスローされます。

class

クラス定数が定義されたクラス名。読み取り専用です。 書き込もうとすると ReflectionException がスローされます。

定義済み定数

ReflectionClassConstant の修飾子

ReflectionClassConstant::IS_PUBLIC

アクセス権が public であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 256 でした。

ReflectionClassConstant::IS_PROTECTED

アクセス権が protected であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 512 でした。

ReflectionClassConstant::IS_PRIVATE

アクセス権が private であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 1024 でした。

ReflectionClassConstant::IS_FINAL

定数が final であることを示します。 PHP 8.1.0 以降で利用可能です。

注意:

これらの定数の値は、PHP のバージョンが異なると変更される可能性があります。 これらの値を直接用いず、常に定数を使うことを推奨します。

変更履歴

バージョン | 説明
8.0.0 | ReflectionClassConstant::export() は、削除されました。

目次

  • ReflectionClassConstant::__construct — ReflectionClassConstant を構築する
  • ReflectionClassConstant::export — リフレクションをエクスポートする
  • ReflectionClassConstant::getAttributes — アトリビュートを取得する
  • ReflectionClassConstant::getDeclaringClass — 定数を宣言しているクラスを取得する
  • ReflectionClassConstant::getDocComment — クラス定数のドキュメントコメントを取得する
  • ReflectionClassConstant::getModifiers — クラス定数の修飾子を取得する
  • ReflectionClassConstant::getName — 定数名を取得する
  • ReflectionClassConstant::getValue — 値を取得する
  • ReflectionClassConstant::isEnumCase — クラス定数が、列挙型の case かどうかを調べる
  • ReflectionClassConstant::isFinal — クラス定数が final かどうかを調べる
  • ReflectionClassConstant::isPrivate — クラス定数がprivateかを調べる
  • ReflectionClassConstant::isProtected — クラス定数が protected かを調べる
  • ReflectionClassConstant::isPublic — クラス定数が public かを調べる
  • ReflectionClassConstant::__toString — ReflectionClassConstant オブジェクトの文字列表現を返す

User Contributed Notes

There are no user contributed notes for this page.


ReflectionClassConstant を構築する

  • ≪ ReflectionClassConstant
  • ReflectionClassConstant::export ≫
  • PHP Manual
  • ReflectionClassConstant
  • ReflectionClassConstant を構築する

ReflectionClassConstant::__construct

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::__construct — ReflectionClassConstant を構築する

説明

public ReflectionClassConstant::__construct(object|string $class, string $constant)

新しい ReflectionClassConstant を構築します。

パラメータ

class

リフレクションするクラス名を含んだ文字列か、object

constant

クラス定数の名前

エラー / 例外

与えられたクラス定数が存在しない場合は、Exception をスローします。

参考

  • Constructors

User Contributed Notes

There are no user contributed notes for this page.


リフレクションをエクスポートする

  • ≪ ReflectionClassConstant::__construct
  • ReflectionClassConstant::getAttributes ≫
  • PHP Manual
  • ReflectionClassConstant
  • リフレクションをエクスポートする

ReflectionClassConstant::export

(PHP 7 >= 7.1.0)

ReflectionClassConstant::export — リフレクションをエクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionClassConstant::export(mixed $class, string $name, bool $return = ?): string

リフレクションをエクスポートします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

class

エクスポートするリフレクション。

name

クラス定数の名前

return

true に設定すると、エクスポートを発行するのではなく返します。 false (デフォルト) の場合はその逆です。

戻り値

参考

  • ReflectionClassConstant::__toString() - ReflectionClassConstant オブジェクトの文字列表現を返す

User Contributed Notes

There are no user contributed notes for this page.


アトリビュートを取得する

  • ≪ ReflectionClassConstant::export
  • ReflectionClassConstant::getDeclaringClass ≫
  • PHP Manual
  • ReflectionClassConstant
  • アトリビュートを取得する

ReflectionClassConstant::getAttributes

(PHP 8)

ReflectionClassConstant::getAttributes — アトリビュートを取得する

説明

public ReflectionClassConstant::getAttributes(?string $name = null, int $flags = 0): array

このクラス定数上で宣言されている全てのアトリビュートを ReflectionAttribute の配列として返します。

パラメータ

name

指定したクラス名にマッチするアトリビュートの、 ReflectionAttribute のみを含むようにフィルタします。

flags

name が指定されていた場合に、 結果をどうフィルタするかを決めるフラグ。

デフォルトは 0 です。 この場合、アトリビュートのクラス名が name であるものだけを返します。

他の利用可能なオプションは、 ReflectionAttribute::IS_INSTANCEOF です。 この場合、フィルタリングに instanceof を使います。

戻り値

アトリビュートの配列を、 ReflectionAttribute オブジェクトの配列として返します。

例

例1 基本的な使い方

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

class Basket {
#[Fruit]
#[Red]
public const APPLE = 'apple';
}

$classConstant = new ReflectionClassConstant('Basket', 'APPLE');
$attributes = $classConstant->getAttributes();
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
    [1] => Red
)

例2 クラス名で結果をフィルタする

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

class Basket {
#[Fruit]
#[Red]
public const APPLE = 'apple';
}

$classConstant = new ReflectionClassConstant('Basket', 'APPLE');
$attributes = $classConstant->getAttributes('Fruit');
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
)

例3 クラス名、かつ継承も考慮して結果をフィルタする

<?php
interface Color {
}

#[Attribute]
class Fruit {
}

#[Attribute]
class Red implements Color {
}

class Basket {
#[Fruit]
#[Red]
public const APPLE = 'apple';
}

$classConstant = new ReflectionClassConstant('Basket', 'APPLE');
$attributes = $classConstant->getAttributes('Color', ReflectionAttribute::IS_INSTANCEOF);
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Red
)

参考

  • ReflectionClass::getAttributes() - アトリビュートを取得する
  • ReflectionFunctionAbstract::getAttributes() - アトリビュートを取得する
  • ReflectionParameter::getAttributes() - アトリビュートを取得する
  • ReflectionProperty::getAttributes() - アトリビュートを取得する

User Contributed Notes

There are no user contributed notes for this page.


定数を宣言しているクラスを取得する

  • ≪ ReflectionClassConstant::getAttributes
  • ReflectionClassConstant::getDocComment ≫
  • PHP Manual
  • ReflectionClassConstant
  • 定数を宣言しているクラスを取得する

ReflectionClassConstant::getDeclaringClass

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::getDeclaringClass — 定数を宣言しているクラスを取得する

説明

public ReflectionClassConstant::getDeclaringClass(): ReflectionClass

定数を宣言しているクラスを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionClass オブジェクトを返します。

User Contributed Notes

There are no user contributed notes for this page.


クラス定数のドキュメントコメントを取得する

  • ≪ ReflectionClassConstant::getDeclaringClass
  • ReflectionClassConstant::getModifiers ≫
  • PHP Manual
  • ReflectionClassConstant
  • クラス定数のドキュメントコメントを取得する

ReflectionClassConstant::getDocComment

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::getDocComment — クラス定数のドキュメントコメントを取得する

説明

public ReflectionClassConstant::getDocComment(): string|false

クラス定数のドキュメントコメントを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ドキュメントコメントが存在した場合その文字列。存在しない場合は false を返します。

User Contributed Notes

There are no user contributed notes for this page.


クラス定数の修飾子を取得する

  • ≪ ReflectionClassConstant::getDocComment
  • ReflectionClassConstant::getName ≫
  • PHP Manual
  • ReflectionClassConstant
  • クラス定数の修飾子を取得する

ReflectionClassConstant::getModifiers

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::getModifiers — クラス定数の修飾子を取得する

説明

public ReflectionClassConstant::getModifiers(): int

クラス定数のアクセス修飾子のビットフィールドを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

アクセス修飾子の数値表現を返します。 これらの修飾子の実際の意味は、 定義済みの定数 で説明しています。

参考

  • Reflection::getModifierNames() - 修飾子の名前を取得する

User Contributed Notes

There are no user contributed notes for this page.


定数名を取得する

  • ≪ ReflectionClassConstant::getModifiers
  • ReflectionClassConstant::getValue ≫
  • PHP Manual
  • ReflectionClassConstant
  • 定数名を取得する

ReflectionClassConstant::getName

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::getName — 定数名を取得する

説明

public ReflectionClassConstant::getName(): string

パラメータ

この関数にはパラメータはありません。

戻り値

定数の名前を返します。

変更履歴

バージョン | 説明
8.1.0 | name プロパティが初期化されていない場合は、 Error をスローするようになりました。 これより前のバージョンでは、失敗時に false を返していました。

User Contributed Notes

There are no user contributed notes for this page.


値を取得する

  • ≪ ReflectionClassConstant::getName
  • ReflectionClassConstant::isEnumCase ≫
  • PHP Manual
  • ReflectionClassConstant
  • 値を取得する

ReflectionClassConstant::getValue

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::getValue — 値を取得する

説明

public ReflectionClassConstant::getValue(): mixed

クラス定数の値を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

クラス定数の値を返します。

User Contributed Notes

There are no user contributed notes for this page.


クラス定数が、列挙型の case かどうかを調べる

  • ≪ ReflectionClassConstant::getValue
  • ReflectionClassConstant::isFinal ≫
  • PHP Manual
  • ReflectionClassConstant
  • クラス定数が、列挙型の case かどうかを調べる

ReflectionClassConstant::isEnumCase

(PHP 8 >= 8.1.0)

ReflectionClassConstant::isEnumCase — クラス定数が、列挙型の case かどうかを調べる

説明

public ReflectionClassConstant::isEnumCase(): bool

クラス定数が、列挙型 の case かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

クラス定数が、列挙型の case である場合に true を返します。 そうでない場合、false を返します。

例

例1 ReflectionClassConstant::isEnumCase() の例

通常のクラス定数と、列挙型の case を区別する例です。

<?php
enum Status
{
const BORING_CONSTANT = 'test';
const ENUM_VALUE = Status::PUBLISHED;

case DRAFT;
case PUBLISHED;
case ARCHIVED;
}

$reflection = new ReflectionEnum(Status::class);
foreach ($reflection->getReflectionConstants() as $constant) {
echo "{$constant->name} is ",
$constant->isEnumCase() ? "an enum case" : "a regular class constant",
PHP_EOL;
}
?>

上の例の出力は以下となります。

BORING_CONSTANT is a regular class constant
ENUM_VALUE is a regular class constant
DRAFT is an enum case
PUBLISHED is an enum case
ARCHIVED is an enum case

参考

  • ReflectionEnum

User Contributed Notes

There are no user contributed notes for this page.


クラス定数が final かどうかを調べる

  • ≪ ReflectionClassConstant::isEnumCase
  • ReflectionClassConstant::isPrivate ≫
  • PHP Manual
  • ReflectionClassConstant
  • クラス定数が final かどうかを調べる

ReflectionClassConstant::isFinal

(PHP 8 >= 8.1.0)

ReflectionClassConstant::isFinal — クラス定数が final かどうかを調べる

説明

public ReflectionClassConstant::isFinal(): bool

クラス定数が final かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

クラス定数が final の場合、true を返します。 そうでない場合、false を返します。

参考

  • ReflectionClassConstant::isPublic() - クラス定数が public かを調べる
  • ReflectionClassConstant::isPrivate() - クラス定数がprivateかを調べる
  • ReflectionClassConstant::isProtected() - クラス定数が protected かを調べる

User Contributed Notes

There are no user contributed notes for this page.


クラス定数がprivateかを調べる

  • ≪ ReflectionClassConstant::isFinal
  • ReflectionClassConstant::isProtected ≫
  • PHP Manual
  • ReflectionClassConstant
  • クラス定数がprivateかを調べる

ReflectionClassConstant::isPrivate

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::isPrivate — クラス定数がprivateかを調べる

説明

public ReflectionClassConstant::isPrivate(): bool

クラス定数がprivateかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

クラス定数が private なら true を返します。 そうでないなら false を返します。

参考

  • ReflectionClassConstant::isFinal() - クラス定数が final かどうかを調べる
  • ReflectionClassConstant::isPublic() - クラス定数が public かを調べる
  • ReflectionClassConstant::isProtected() - クラス定数が protected かを調べる

User Contributed Notes

There are no user contributed notes for this page.


クラス定数が protected かを調べる

  • ≪ ReflectionClassConstant::isPrivate
  • ReflectionClassConstant::isPublic ≫
  • PHP Manual
  • ReflectionClassConstant
  • クラス定数が protected かを調べる

ReflectionClassConstant::isProtected

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::isProtected — クラス定数が protected かを調べる

説明

public ReflectionClassConstant::isProtected(): bool

クラス定数が protected かを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

クラス定数が protected なら true を返します。 そうでなければ false を返します。

参考

  • ReflectionClassConstant::isFinal() - クラス定数が final かどうかを調べる
  • ReflectionClassConstant::isPublic() - クラス定数が public かを調べる
  • ReflectionClassConstant::isPrivate() - クラス定数がprivateかを調べる

User Contributed Notes

There are no user contributed notes for this page.


クラス定数が public かを調べる

  • ≪ ReflectionClassConstant::isProtected
  • ReflectionClassConstant::__toString ≫
  • PHP Manual
  • ReflectionClassConstant
  • クラス定数が public かを調べる

ReflectionClassConstant::isPublic

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::isPublic — クラス定数が public かを調べる

説明

public ReflectionClassConstant::isPublic(): bool

クラス定数が public かを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

クラス定数が public なら true を返します。 そうでないなら、false を返します。

参考

  • ReflectionClassConstant::isFinal() - クラス定数が final かどうかを調べる
  • ReflectionClassConstant::isPrivate() - クラス定数がprivateかを調べる
  • ReflectionClassConstant::isProtected() - クラス定数が protected かを調べる

User Contributed Notes

There are no user contributed notes for this page.


ReflectionClassConstant オブジェクトの文字列表現を返す

  • ≪ ReflectionClassConstant::isPublic
  • ReflectionEnum ≫
  • PHP Manual
  • ReflectionClassConstant
  • ReflectionClassConstant オブジェクトの文字列表現を返す

ReflectionClassConstant::__toString

(PHP 7 >= 7.1.0, PHP 8)

ReflectionClassConstant::__toString — ReflectionClassConstant オブジェクトの文字列表現を返す

説明

public ReflectionClassConstant::__toString(): string

ReflectionClassConstant オブジェクトの文字列表現を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

この ReflectionClassConstant インスタンスの文字列表現を返します。

参考

  • ReflectionClassConstant::export() - リフレクションをエクスポートする
  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionEnum クラス

(PHP 8 >= 8.1.0)

はじめに

ReflectionEnum クラスは、 列挙型に関する情報を報告します。

クラス概要

class ReflectionEnum extends ReflectionClass {
/* 継承した定数 */
public const int ReflectionClass::IS_IMPLICIT_ABSTRACT;
public const int ReflectionClass::IS_EXPLICIT_ABSTRACT;
public const int ReflectionClass::IS_FINAL;
public const int ReflectionClass::IS_READONLY;
/* 継承したプロパティ */
public string $name;
/* メソッド */
public __construct(object|string $objectOrClass)
public getBackingType(): ?ReflectionNamedType
public getCase(string $name): ReflectionEnumUnitCase
public getCases(): array
public hasCase(string $name): bool
public isBacked(): bool
/* 継承したメソッド */
public static ReflectionClass::export(mixed $argument, bool $return = false): string
public ReflectionClass::getAttributes(?string $name = null, int $flags = 0): array
public ReflectionClass::getConstant(string $name): mixed
public ReflectionClass::getConstants(?int $filter = null): array
public ReflectionClass::getConstructor(): ?ReflectionMethod
public ReflectionClass::getDefaultProperties(): array
public ReflectionClass::getDocComment(): string|false
public ReflectionClass::getEndLine(): int|false
public ReflectionClass::getExtension(): ?ReflectionExtension
public ReflectionClass::getExtensionName(): string|false
public ReflectionClass::getFileName(): string|false
public ReflectionClass::getInterfaceNames(): array
public ReflectionClass::getInterfaces(): array
public ReflectionClass::getMethod(string $name): ReflectionMethod
public ReflectionClass::getMethods(?int $filter = null): array
public ReflectionClass::getModifiers(): int
public ReflectionClass::getName(): string
public ReflectionClass::getNamespaceName(): string
public ReflectionClass::getParentClass(): ReflectionClass|false
public ReflectionClass::getProperties(?int $filter = null): array
public ReflectionClass::getProperty(string $name): ReflectionProperty
public ReflectionClass::getReflectionConstant(string $name): ReflectionClassConstant|false
public ReflectionClass::getReflectionConstants(?int $filter = null): array
public ReflectionClass::getShortName(): string
public ReflectionClass::getStartLine(): int|false
public ReflectionClass::getStaticProperties(): array
public ReflectionClass::getStaticPropertyValue(string $name, mixed &$def_value = ?): mixed
public ReflectionClass::getTraitAliases(): array
public ReflectionClass::getTraitNames(): array
public ReflectionClass::getTraits(): array
public ReflectionClass::hasConstant(string $name): bool
public ReflectionClass::hasMethod(string $name): bool
public ReflectionClass::hasProperty(string $name): bool
public ReflectionClass::implementsInterface(ReflectionClass|string $interface): bool
public ReflectionClass::inNamespace(): bool
public ReflectionClass::isAbstract(): bool
public ReflectionClass::isAnonymous(): bool
public ReflectionClass::isCloneable(): bool
public ReflectionClass::isEnum(): bool
public ReflectionClass::isFinal(): bool
public ReflectionClass::isInstance(object $object): bool
public ReflectionClass::isInstantiable(): bool
public ReflectionClass::isInterface(): bool
public ReflectionClass::isInternal(): bool
public ReflectionClass::isIterable(): bool
public ReflectionClass::isReadOnly(): bool
public ReflectionClass::isSubclassOf(ReflectionClass|string $class): bool
public ReflectionClass::isTrait(): bool
public ReflectionClass::isUserDefined(): bool
public ReflectionClass::newInstance(mixed ...$args): object
public ReflectionClass::newInstanceArgs(array $args = []): ?object
public ReflectionClass::newInstanceWithoutConstructor(): object
public ReflectionClass::setStaticPropertyValue(string $name, mixed $value): void
public ReflectionClass::__toString(): string
}

参考

  • 列挙型(Enum)

目次

  • ReflectionEnum::__construct — ReflectionEnum オブジェクトをインスタンス化する
  • ReflectionEnum::getBackingType — 存在する場合に、列挙型が依存する型を取得する
  • ReflectionEnum::getCase — 列挙型の特定の case を返す
  • ReflectionEnum::getCases — 列挙型の全ての case を返す
  • ReflectionEnum::hasCase — 列挙型が case を持つかを調べる
  • ReflectionEnum::isBacked — 列挙型が Backed Enum かを調べる

User Contributed Notes

There are no user contributed notes for this page.


ReflectionEnum オブジェクトをインスタンス化する

  • ≪ ReflectionEnum
  • ReflectionEnum::getBackingType ≫
  • PHP Manual
  • ReflectionEnum
  • ReflectionEnum オブジェクトをインスタンス化する

ReflectionEnum::__construct

(PHP 8 >= 8.1.0)

ReflectionEnum::__construct — ReflectionEnum オブジェクトをインスタンス化する

説明

public ReflectionEnum::__construct(object|string $objectOrClass)

パラメータ

objectOrClass

列挙型のインスタンス、またはその名前。

User Contributed Notes

There are no user contributed notes for this page.


存在する場合に、列挙型が依存する型を取得する

  • ≪ ReflectionEnum::__construct
  • ReflectionEnum::getCase ≫
  • PHP Manual
  • ReflectionEnum
  • 存在する場合に、列挙型が依存する型を取得する

ReflectionEnum::getBackingType

(PHP 8 >= 8.1.0)

ReflectionEnum::getBackingType — 存在する場合に、列挙型が依存する型を取得する

説明

public ReflectionEnum::getBackingType(): ?ReflectionNamedType

列挙型が Backed Enum の場合、 このメソッドは 列挙型が依存する型を ReflectionType のインスタンスとして返します。 Backed Enum でない場合は、null を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

列挙型が依存する型を ReflectionNamedType として返します。依存する型がない場合は、null を返します。

変更履歴

バージョン | 説明
8.2.0 | 戻り値の型が、 ?ReflectionNamedType として宣言されるようになりました。 これより前のバージョンでは、 ?ReflectionType が宣言されていました。

例

例1 ReflectionEnum::getBackingType() の例

<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}

$rEnum = new ReflectionEnum(Suit::class);

$rBackingType = $rEnum->getBackingType();

var_dump((string)$rBackingType);
?>

上の例の出力は以下となります。

string(6) "string"

参考

  • 列挙型(Enum)
  • ReflectionEnum::isBacked() - 列挙型が Backed Enum かを調べる

User Contributed Notes

There are no user contributed notes for this page.


列挙型の特定の case を返す

  • ≪ ReflectionEnum::getBackingType
  • ReflectionEnum::getCases ≫
  • PHP Manual
  • ReflectionEnum
  • 列挙型の特定の case を返す

ReflectionEnum::getCase

(PHP 8 >= 8.1.0)

ReflectionEnum::getCase — 列挙型の特定の case を返す

説明

public ReflectionEnum::getCase(string $name): ReflectionEnumUnitCase

列挙型の特定の case を名前で指定すると、 リフレクションオブジェクトを返します。 指定された case が定義されていない場合、 ReflectionException がスローされます。

パラメータ

name

取得する case の名前。

戻り値

ReflectionEnumUnitCase または ReflectionEnumBackedCase のインスタンスを適切に返します。

例

例1 ReflectionEnum::getCase() の例

<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}

$rEnum = new ReflectionEnum(Suit::class);

$rCase = $rEnum->getCase('Clubs');

var_dump($rCase->getValue());
?>

上の例の出力は以下となります。

enum(Suit::Clubs)

参考

  • 列挙型(Enum)
  • ReflectionEnum::getCases() - 列挙型の全ての case を返す
  • ReflectionEnum::hasCase() - 列挙型が case を持つかを調べる
  • ReflectionEnum::isBacked() - 列挙型が Backed Enum かを調べる

User Contributed Notes

There are no user contributed notes for this page.


列挙型の全ての case を返す

  • ≪ ReflectionEnum::getCase
  • ReflectionEnum::hasCase ≫
  • PHP Manual
  • ReflectionEnum
  • 列挙型の全ての case を返す

ReflectionEnum::getCases

(PHP 8 >= 8.1.0)

ReflectionEnum::getCases — 列挙型の全ての case を返す

説明

public ReflectionEnum::getCases(): array

列挙型には、ひとつ以上の case を含めることができます。 このメソッドは、定義済みの全ての case を字句解析順 (つまり、ソースコードに現れる順) に取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

列挙型のリフレクションオブジェクトの配列を返します。 ひとつひとつが、列挙型の case を表します。 Pure Enum の場合、すべてのインスタンスが ReflectionEnumUnitCase になります。 Backed Enum の場合、すべてのインスタンスが ReflectionEnumBackedCase になります。

例

例1 ReflectionEnum::getCases() の例

<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}

$rEnum = new ReflectionEnum(Suit::class);

$cases = $rEnum->getCases();

foreach ($cases as $rCase) {
var_dump($rCase->getValue());
}
?>

上の例の出力は以下となります。

enum(Suit::Hearts)
enum(Suit::Diamonds)
enum(Suit::Clubs)
enum(Suit::Spades)

参考

  • 列挙型(Enum)
  • ReflectionEnum::getCase() - 列挙型の特定の case を返す
  • ReflectionEnum::isBacked() - 列挙型が Backed Enum かを調べる

User Contributed Notes

There are no user contributed notes for this page.


列挙型が case を持つかを調べる

  • ≪ ReflectionEnum::getCases
  • ReflectionEnum::isBacked ≫
  • PHP Manual
  • ReflectionEnum
  • 列挙型が case を持つかを調べる

ReflectionEnum::hasCase

(PHP 8 >= 8.1.0)

ReflectionEnum::hasCase — 列挙型が case を持つかを調べる

説明

public ReflectionEnum::hasCase(string $name): bool

指定された case が列挙型に定義されているかを判定します。

パラメータ

name

調べる case の名前。

戻り値

case が定義されていたら true を返します。 そうでない場合、false を返します。

例

例1 ReflectionEnum::hasCase() の例

<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}

$rEnum = new ReflectionEnum(Suit::class);

var_dump($rEnum->hasCase('Hearts'));
var_dump($rEnum->hasCase('Horseshoes'));
?>

上の例の出力は以下となります。

bool(true)
bool(false)

参考

  • 列挙型(Enum)
  • ReflectionEnum::getCase() - 列挙型の特定の case を返す
  • ReflectionEnum::getCases() - 列挙型の全ての case を返す

User Contributed Notes

There are no user contributed notes for this page.


列挙型が Backed Enum かを調べる

  • ≪ ReflectionEnum::hasCase
  • ReflectionEnumUnitCase ≫
  • PHP Manual
  • ReflectionEnum
  • 列挙型が Backed Enum かを調べる

ReflectionEnum::isBacked

(PHP 8 >= 8.1.0)

ReflectionEnum::isBacked — 列挙型が Backed Enum かを調べる

説明

public ReflectionEnum::isBacked(): bool

Backed Enum は、 ネイティブのスカラー型と同等の情報を持つ列挙型です。 文字列か、整数のどちらかです。 全ての列挙型が Backed Enum であるとは限りません。

パラメータ

この関数にはパラメータはありません。

戻り値

列挙型がスカラーと同等の Backed Enum の場合は true を返します。 そうでない場合は、false を返します。

例

例1 ReflectionEnum::isBacked() の例

<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}

enum BackedSuit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}

var_dump((new ReflectionEnum(Suit::class))->isBacked());
var_dump((new ReflectionEnum(BackedSuit::class))->isBacked());
?>

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • 列挙型(Enum)
  • ReflectionEnum::getBackingType() - 存在する場合に、列挙型が依存する型を取得する

User Contributed Notes

There are no user contributed notes for this page.


ReflectionEnumUnitCase クラス

(PHP 8 >= 8.1.0)

はじめに

ReflectionEnumUnitCase クラスは、 列挙型 の case に関する情報を報告します。 これは、スカラー型の情報を持っていません。

クラス概要

class ReflectionEnumUnitCase extends ReflectionClassConstant {
/* 継承した定数 */
public const int ReflectionClassConstant::IS_PUBLIC;
public const int ReflectionClassConstant::IS_PROTECTED;
public const int ReflectionClassConstant::IS_PRIVATE;
public const int ReflectionClassConstant::IS_FINAL;
/* 継承したプロパティ */
public string $name;
public string $class;
/* メソッド */
public __construct(object|string $class, string $constant)
public getEnum(): ReflectionEnum
public getValue(): UnitEnum
/* 継承したメソッド */
public static ReflectionClassConstant::export(mixed $class, string $name, bool $return = ?): string
public ReflectionClassConstant::getAttributes(?string $name = null, int $flags = 0): array
public ReflectionClassConstant::getDeclaringClass(): ReflectionClass
public ReflectionClassConstant::getDocComment(): string|false
public ReflectionClassConstant::getModifiers(): int
public ReflectionClassConstant::getName(): string
public ReflectionClassConstant::getValue(): mixed
public ReflectionClassConstant::isEnumCase(): bool
public ReflectionClassConstant::isFinal(): bool
public ReflectionClassConstant::isPrivate(): bool
public ReflectionClassConstant::isProtected(): bool
public ReflectionClassConstant::isPublic(): bool
public ReflectionClassConstant::__toString(): string
}

参考

  • 列挙型(Enum)
  • ReflectionEnumBackedCase

目次

  • ReflectionEnumUnitCase::__construct — ReflectionEnumUnitCase オブジェクトをインスタンス化する
  • ReflectionEnumUnitCase::getEnum — この case が属するリフレクションオブジェクトを取得する
  • ReflectionEnumUnitCase::getValue — このリフレクションオブジェクトが表す case オブジェクトを取得する

User Contributed Notes

There are no user contributed notes for this page.


ReflectionEnumUnitCase オブジェクトをインスタンス化する

  • ≪ ReflectionEnumUnitCase
  • ReflectionEnumUnitCase::getEnum ≫
  • PHP Manual
  • ReflectionEnumUnitCase
  • ReflectionEnumUnitCase オブジェクトをインスタンス化する

ReflectionEnumUnitCase::__construct

(PHP 8 >= 8.1.0)

ReflectionEnumUnitCase::__construct — ReflectionEnumUnitCase オブジェクトをインスタンス化する

説明

public ReflectionEnumUnitCase::__construct(object|string $class, string $constant)

パラメータ

class

列挙型のインスタンス、またはその名前。

constant

列挙型の定数名。

User Contributed Notes

There are no user contributed notes for this page.


この case が属するリフレクションオブジェクトを取得する

  • ≪ ReflectionEnumUnitCase::__construct
  • ReflectionEnumUnitCase::getValue ≫
  • PHP Manual
  • ReflectionEnumUnitCase
  • この case が属するリフレクションオブジェクトを取得する

ReflectionEnumUnitCase::getEnum

(PHP 8 >= 8.1.0)

ReflectionEnumUnitCase::getEnum — この case が属するリフレクションオブジェクトを取得する

説明

public ReflectionEnumUnitCase::getEnum(): ReflectionEnum

この case が属するリフレクションオブジェクトを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

この case が属する列挙型を示す ReflectionEnum のインスタンスを返します。

参考

  • 列挙型(Enum)

User Contributed Notes

There are no user contributed notes for this page.


このリフレクションオブジェクトが表す case オブジェクトを取得する

  • ≪ ReflectionEnumUnitCase::getEnum
  • ReflectionEnumBackedCase ≫
  • PHP Manual
  • ReflectionEnumUnitCase
  • このリフレクションオブジェクトが表す case オブジェクトを取得する

ReflectionEnumUnitCase::getValue

(PHP 8 >= 8.1.0)

ReflectionEnumUnitCase::getValue — このリフレクションオブジェクトが表す case オブジェクトを取得する

説明

public ReflectionEnumUnitCase::getValue(): UnitEnum

このリフレクションオブジェクトが表す 列挙型の case オブジェクトを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

このリフレクションオブジェクトが表す 列挙型の case オブジェクトを返します。

例

例1 ReflectionEnum::getValue() の例

<?php
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}

$rEnum = new ReflectionEnum(Suit::class);

$rCase = $rEnum->getCase('Diamonds');

var_dump($rCase->getValue());
?>

上の例の出力は以下となります。

enum(Suit::Diamonds)

参考

  • 列挙型(Enum)

User Contributed Notes

There are no user contributed notes for this page.


ReflectionEnumBackedCase クラス

(PHP 8 >= 8.1.0)

はじめに

ReflectionEnumBackedCase クラスは、 Backed Enum の case に関する情報を報告します。 これは、スカラー型の情報を持っています。

クラス概要

class ReflectionEnumBackedCase extends ReflectionEnumUnitCase {
/* 継承した定数 */
public const int ReflectionClassConstant::IS_PUBLIC;
public const int ReflectionClassConstant::IS_PROTECTED;
public const int ReflectionClassConstant::IS_PRIVATE;
public const int ReflectionClassConstant::IS_FINAL;
/* 継承したプロパティ */
public string $name;
public string $class;
/* メソッド */
public __construct(object|string $class, string $constant)
public getBackingValue(): int|string
/* 継承したメソッド */
public ReflectionEnumUnitCase::getEnum(): ReflectionEnum
public ReflectionEnumUnitCase::getValue(): UnitEnum
public static ReflectionClassConstant::export(mixed $class, string $name, bool $return = ?): string
public ReflectionClassConstant::getAttributes(?string $name = null, int $flags = 0): array
public ReflectionClassConstant::getDeclaringClass(): ReflectionClass
public ReflectionClassConstant::getDocComment(): string|false
public ReflectionClassConstant::getModifiers(): int
public ReflectionClassConstant::getName(): string
public ReflectionClassConstant::getValue(): mixed
public ReflectionClassConstant::isEnumCase(): bool
public ReflectionClassConstant::isFinal(): bool
public ReflectionClassConstant::isPrivate(): bool
public ReflectionClassConstant::isProtected(): bool
public ReflectionClassConstant::isPublic(): bool
public ReflectionClassConstant::__toString(): string
}

参考

  • 列挙型(Enum)
  • ReflectionEnumUnitCase

目次

  • ReflectionEnumBackedCase::__construct — ReflectionEnumBackedCase オブジェクトをインスタンス化する
  • ReflectionEnumBackedCase::getBackingValue — Backed Enum の case が持つスカラー値を取得する

User Contributed Notes

There are no user contributed notes for this page.


ReflectionEnumBackedCase オブジェクトをインスタンス化する

  • ≪ ReflectionEnumBackedCase
  • ReflectionEnumBackedCase::getBackingValue ≫
  • PHP Manual
  • ReflectionEnumBackedCase
  • ReflectionEnumBackedCase オブジェクトをインスタンス化する

ReflectionEnumBackedCase::__construct

(PHP 8 >= 8.1.0)

ReflectionEnumBackedCase::__construct — ReflectionEnumBackedCase オブジェクトをインスタンス化する

説明

public ReflectionEnumBackedCase::__construct(object|string $class, string $constant)

パラメータ

class

列挙型のインスタンス、またはその名前。

constant

列挙型の定数名。

User Contributed Notes

There are no user contributed notes for this page.


Backed Enum の case が持つスカラー値を取得する

  • ≪ ReflectionEnumBackedCase::__construct
  • ReflectionZendExtension ≫
  • PHP Manual
  • ReflectionEnumBackedCase
  • Backed Enum の case が持つスカラー値を取得する

ReflectionEnumBackedCase::getBackingValue

(PHP 8 >= 8.1.0)

ReflectionEnumBackedCase::getBackingValue — Backed Enum の case が持つスカラー値を取得する

説明

public ReflectionEnumBackedCase::getBackingValue(): int|string

Backed Enum の case が持つスカラー値を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

この列挙型の case が持つスカラーの値を返します。

例

例1 ReflectionEnum::getBackingValue() の例

<?php
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}

$rEnum = new ReflectionEnum(Suit::class);

$rCase = $rEnum->getCase('Spades');

var_dump($rCase->getBackingValue());
?>

上の例の出力は以下となります。

string(1) "S"

参考

  • 列挙型(Enum)

User Contributed Notes

There are no user contributed notes for this page.


ReflectionZendExtension クラス

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

はじめに

クラス概要

class ReflectionZendExtension implements Reflector {
/* プロパティ */
public string $name;
/* メソッド */
public __construct(string $name)
private __clone(): void
public static export(string $name, bool $return = ?): string
public getAuthor(): string
public getCopyright(): string
public getName(): string
public getURL(): string
public getVersion(): string
public __toString(): string
}

プロパティ

name

拡張モジュール名。読み込み専用で、書き込もうとすると ReflectionException をスローします。

変更履歴

バージョン | 説明
8.0.0 | ReflectionZendExtension::export() は、削除されました。

目次

  • ReflectionZendExtension::__clone — Clone のハンドラ
  • ReflectionZendExtension::__construct — ReflectionZendExtension オブジェクトを作成する
  • ReflectionZendExtension::export — エクスポート
  • ReflectionZendExtension::getAuthor — 作者を取得する
  • ReflectionZendExtension::getCopyright — 著作権情報を取得する
  • ReflectionZendExtension::getName — 名前を取得する
  • ReflectionZendExtension::getURL — URL を取得する
  • ReflectionZendExtension::getVersion — バージョンを取得する
  • ReflectionZendExtension::__toString — 文字列変換のハンドラ

User Contributed Notes

There are no user contributed notes for this page.


Clone のハンドラ

  • ≪ ReflectionZendExtension
  • ReflectionZendExtension::__construct ≫
  • PHP Manual
  • ReflectionZendExtension
  • Clone のハンドラ

ReflectionZendExtension::__clone

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::__clone — Clone のハンドラ

説明

private ReflectionZendExtension::__clone(): void

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

変更履歴

バージョン | 説明
8.1.0 | このメソッドは、final ではなくなりました。

User Contributed Notes

There are no user contributed notes for this page.


ReflectionZendExtension オブジェクトを作成する

  • ≪ ReflectionZendExtension::__clone
  • ReflectionZendExtension::export ≫
  • PHP Manual
  • ReflectionZendExtension
  • ReflectionZendExtension オブジェクトを作成する

ReflectionZendExtension::__construct

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::__construct — ReflectionZendExtension オブジェクトを作成する

説明

public ReflectionZendExtension::__construct(string $name)

新しい ReflectionZendExtension オブジェクトを作成します。

パラメータ

name

拡張機能の名前

エラー / 例外

リフレクションする拡張機能が存在しない場合、 ReflectionException がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


エクスポート

  • ≪ ReflectionZendExtension::__construct
  • ReflectionZendExtension::getAuthor ≫
  • PHP Manual
  • ReflectionZendExtension
  • エクスポート

ReflectionZendExtension::export

(PHP 5 >= 5.4.0, PHP 7)

ReflectionZendExtension::export — エクスポート

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionZendExtension::export(string $name, bool $return = ?): string

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

name

return

戻り値

参考

  • ReflectionClassConstant::__toString() - ReflectionClassConstant オブジェクトの文字列表現を返す

User Contributed Notes

There are no user contributed notes for this page.


作者を取得する

  • ≪ ReflectionZendExtension::export
  • ReflectionZendExtension::getCopyright ≫
  • PHP Manual
  • ReflectionZendExtension
  • 作者を取得する

ReflectionZendExtension::getAuthor

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::getAuthor — 作者を取得する

説明

public ReflectionZendExtension::getAuthor(): string

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


著作権情報を取得する

  • ≪ ReflectionZendExtension::getAuthor
  • ReflectionZendExtension::getName ≫
  • PHP Manual
  • ReflectionZendExtension
  • 著作権情報を取得する

ReflectionZendExtension::getCopyright

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::getCopyright — 著作権情報を取得する

説明

public ReflectionZendExtension::getCopyright(): string

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


名前を取得する

  • ≪ ReflectionZendExtension::getCopyright
  • ReflectionZendExtension::getURL ≫
  • PHP Manual
  • ReflectionZendExtension
  • 名前を取得する

ReflectionZendExtension::getName

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::getName — 名前を取得する

説明

public ReflectionZendExtension::getName(): string

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


URL を取得する

  • ≪ ReflectionZendExtension::getName
  • ReflectionZendExtension::getVersion ≫
  • PHP Manual
  • ReflectionZendExtension
  • URL を取得する

ReflectionZendExtension::getURL

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::getURL — URL を取得する

説明

public ReflectionZendExtension::getURL(): string

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


バージョンを取得する

  • ≪ ReflectionZendExtension::getURL
  • ReflectionZendExtension::__toString ≫
  • PHP Manual
  • ReflectionZendExtension
  • バージョンを取得する

ReflectionZendExtension::getVersion

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::getVersion — バージョンを取得する

説明

public ReflectionZendExtension::getVersion(): string

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


文字列変換のハンドラ

  • ≪ ReflectionZendExtension::getVersion
  • ReflectionExtension ≫
  • PHP Manual
  • ReflectionZendExtension
  • 文字列変換のハンドラ

ReflectionZendExtension::__toString

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionZendExtension::__toString — 文字列変換のハンドラ

説明

public ReflectionZendExtension::__toString(): string

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


ReflectionExtension クラス

(PHP 5, PHP 7, PHP 8)

はじめに

ReflectionExtension クラスは 拡張モジュールについての情報を報告します。

クラス概要

class ReflectionExtension implements Reflector {
/* プロパティ */
public string $name;
/* メソッド */
public __construct(string $name)
private __clone(): void
public static export(string $name, string $return = false): string
public getClasses(): array
public getClassNames(): array
public getConstants(): array
public getDependencies(): array
public getFunctions(): array
public getINIEntries(): array
public getName(): string
public getVersion(): ?string
public info(): void
public isPersistent(): bool
public isTemporary(): bool
public __toString(): string
}

プロパティ

name

拡張モジュールの名前。 ReflectionExtension::getName() メソッドをコールするのと同じ。

変更履歴

バージョン | 説明
8.0.0 | ReflectionExtension::export() は、削除されました。

目次

  • ReflectionExtension::__clone — クローンする
  • ReflectionExtension::__construct — ReflectionExtension を作成する
  • ReflectionExtension::export — エクスポートする
  • ReflectionExtension::getClasses — クラスを取得する
  • ReflectionExtension::getClassNames — クラス名を取得する
  • ReflectionExtension::getConstants — 定数を取得する
  • ReflectionExtension::getDependencies — 依存性を取得する
  • ReflectionExtension::getFunctions — 拡張モジュールの関数を取得する
  • ReflectionExtension::getINIEntries — 拡張モジュールの ini エントリを取得する
  • ReflectionExtension::getName — 拡張モジュール名を取得する
  • ReflectionExtension::getVersion — 拡張モジュールのバージョンを取得する
  • ReflectionExtension::info — 拡張モジュールの情報を表示する
  • ReflectionExtension::isPersistent — この拡張モジュールが永続性のあるものかどうかを返す
  • ReflectionExtension::isTemporary — この拡張モジュールが一時的なものかどうかを返す
  • ReflectionExtension::__toString — 文字列に変換する

User Contributed Notes

Anonymous 20-Mar-2016 03:01
<?php
  // Create an instance of the ReflectionProperty class
  $ext= new ReflectionExtension('standard');

  // Print out basic information
  printf(
      "Name        : %s\n".
      "Version     : %s\n".
      "Functions   : [%d] %s\n".
      "Constants   : [%d] %s\n".
      "INI entries : [%d] %s\n",
      $ext->getName(),
      $ext->getVersion() ? $ext->getVersion() : 'NO_VERSION',
      sizeof($ext->getFunctions()),
      var_export($ext->getFunctions(), 1),
      sizeof($ext->getConstants()),
      var_export($ext->getConstants(), 1),
      sizeof($ext->getINIEntries()),
      var_export($ext->getINIEntries(), 1)
  );
?>
Lubaev.K 20-Jun-2013 03:01
<?php
// The demonstration for the class "ReflectionExtension".

function REData(ReflectionExtension $re, $return=false) {

    defined('UNDEFINED') || define('UNDEFINED','%undefined%');
    $_data = [];

    $_data['getName:'] = $re->getName() ?: UNDEFINED;
    $_data['getVersion:'] = $re->getVersion() ?: UNDEFINED;
    $_data['info:'] = $re->info() ?: UNDEFINED;
    $_data['getClassName:'] = PHP_EOL.implode(", ",$re->getClassNames()) ?: UNDEFINED;
    foreach ($re->getConstants() as $key => $value) $_data['getConstants:'] .= "\n{$key}:={$value}";
    $_data['getDependencies:'] = $re->getDependencies() ?: UNDEFINED;
    $_data['getFunctions:'] = PHP_EOL.implode(", ",array_keys($re->getFunctions())) ?: UNDEFINED;
    $_data['getINIEntries:'] = $re->getINIEntries() ?: UNDEFINED;
    $_data['isPersistent:'] = $re->isPersistent() ?: UNDEFINED;
    $_data['isTemporary:'] = $re->isTemporary() ?: UNDEFINED;

    return print_r($_data, $return);
}

REData( new ReflectionExtension( 'Reflection' ) );
REData( new ReflectionExtension( 'zlib' ) );

// Reflection
// Reflection => enabled
// Version => $Id: 60f1e547a6dd00239162151e701566debdcee660 $
/*
Array
(
    [getName:] => Reflection
    [getVersion:] => $Id: 60f1e547a6dd00239162151e701566debdcee660 $
    [info:] => %undefined%
    [getClassName:] =>
ReflectionException, Reflection, Reflector, ReflectionFunctionAbstract, Reflecti
onFunction, ReflectionParameter, ReflectionMethod, ReflectionClass, ReflectionOb
ject, ReflectionProperty, ReflectionExtension, ReflectionZendExtension
    [getDependencies:] => %undefined%
    [getFunctions:] =>

    [getINIEntries:] => %undefined%
    [isPersistent:] => 1
    [isTemporary:] => %undefined%
)
*/
// zlib
// ZLib Support => enabled
// Stream Wrapper => compress.zlib://
// Stream Filter => zlib.inflate, zlib.deflate
// Compiled Version => 1.2.7
// Linked Version => 1.2.7
// Directive => Local Value => Master Value
// zlib.output_compression => Off => Off
// zlib.output_compression_level => -1 => -1
// zlib.output_handler => no value => no value
/*
Array
(
    [getName:] => zlib
    [getVersion:] => 2.0
    [info:] => %undefined%
    [getClassName:] =>

    [getConstants:] =>
FORCE_GZIP:=31
FORCE_DEFLATE:=15
ZLIB_ENCODING_RAW:=-15
ZLIB_ENCODING_GZIP:=31
ZLIB_ENCODING_DEFLATE:=15
    [getDependencies:] => %undefined%
    [getFunctions:] =>
readgzfile, gzrewind, gzclose, gzeof, gzgetc, gzgets, gzgetss, gzread, gzopen, g
zpassthru, gzseek, gztell, gzwrite, gzputs, gzfile, gzcompress, gzuncompress, gz
deflate, gzinflate, gzencode, gzdecode, zlib_encode, zlib_decode, zlib_get_codin
g_type, ob_gzhandler
    [getINIEntries:] => Array
        (
            [zlib.output_compression] =>
            [zlib.output_compression_level] => -1
            [zlib.output_handler] =>
        )

    [isPersistent:] => 1
    [isTemporary:] => %undefined%
)
*/


クローンする

  • ≪ ReflectionExtension
  • ReflectionExtension::__construct ≫
  • PHP Manual
  • ReflectionExtension
  • クローンする

ReflectionExtension::__clone

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::__clone — クローンする

説明

private ReflectionExtension::__clone(): void

このメソッドは、オブジェクトをクローンさせないようにします。 Reflection オブジェクトはクローンすることができません。

パラメータ

この関数にはパラメータはありません。

戻り値

値は返しません。もしコールされれば致命的なエラーとなります。

変更履歴

バージョン | 説明
8.1.0 | このメソッドは、final ではなくなりました。

参考

  • ReflectionExtension::__construct() - ReflectionExtension を作成する
  • オブジェクトのクローン作成

User Contributed Notes

There are no user contributed notes for this page.


ReflectionExtension を作成する

  • ≪ ReflectionExtension::__clone
  • ReflectionExtension::export ≫
  • PHP Manual
  • ReflectionExtension
  • ReflectionExtension を作成する

ReflectionExtension::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::__construct — ReflectionExtension を作成する

説明

public ReflectionExtension::__construct(string $name)

ReflectionExtension オブジェクトを作成します。

パラメータ

name

拡張モジュールの名前。

エラー / 例外

リフレクションする拡張機能が存在しない場合、 ReflectionException がスローされます。

例

例1 ReflectionExtension の例

<?php
$ext = new ReflectionExtension('Reflection');

printf('Extension: %s (version: %s)', $ext->getName(), $ext->getVersion());
?>

上の例の出力は、 たとえば以下のようになります。

Extension: Reflection (version: $Revision$)

参考

  • ReflectionExtension::info() - 拡張モジュールの情報を表示する
  • コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


エクスポートする

  • ≪ ReflectionExtension::__construct
  • ReflectionExtension::getClasses ≫
  • PHP Manual
  • ReflectionExtension
  • エクスポートする

ReflectionExtension::export

(PHP 5, PHP 7)

ReflectionExtension::export — エクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionExtension::export(string $name, string $return = false): string

拡張モジュールの情報をエクスポートします。この関数の出力フォーマットは CLI で引数 --re [extension] を指定したときのものと同じです。

パラメータ

name

エクスポートするリフレクション。

return

true に設定すると、エクスポートを発行するのではなく返します。 false (デフォルト) の場合はその逆です。

戻り値

return パラメータを true に設定すると、エクスポートを文字列で返します。それ以外の場合は null を返します。

参考

  • ReflectionExtension::info() - 拡張モジュールの情報を表示する
  • ReflectionExtension::__toString() - 文字列に変換する

User Contributed Notes

There are no user contributed notes for this page.


クラスを取得する

  • ≪ ReflectionExtension::export
  • ReflectionExtension::getClassNames ≫
  • PHP Manual
  • ReflectionExtension
  • クラスを取得する

ReflectionExtension::getClasses

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::getClasses — クラスを取得する

説明

public ReflectionExtension::getClasses(): array

拡張モジュールのクラス一覧を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionClass オブジェクトの配列を返します。 各要素が、拡張モジュール内のクラスを表します。 クラスが定義されていない場合は空の配列を返します。

例

例1 ReflectionExtension::getClasses() の例

<?php
$ext = new ReflectionExtension('XMLWriter');
var_dump($ext->getClasses());
?>

上の例の出力は、 たとえば以下のようになります。

array(1) {
  ["XMLWriter"]=>
  object(ReflectionClass)#2 (1) {
    ["name"]=>
    string(9) "XMLWriter"
  }
}

参考

  • ReflectionExtension::getClassNames() - クラス名を取得する

User Contributed Notes

There are no user contributed notes for this page.


クラス名を取得する

  • ≪ ReflectionExtension::getClasses
  • ReflectionExtension::getConstants ≫
  • PHP Manual
  • ReflectionExtension
  • クラス名を取得する

ReflectionExtension::getClassNames

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::getClassNames — クラス名を取得する

説明

public ReflectionExtension::getClassNames(): array

拡張モジュールで定義されているのクラス名の一覧を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

拡張モジュールで定義されているクラス名の配列を返します。 クラスが定義されていない場合は空の配列を返します。

例

例1 ReflectionExtension::getClassNames() の例

<?php
$ext = new ReflectionExtension('XMLWriter');
var_dump($ext->getClassNames());
?>

上の例の出力は、 たとえば以下のようになります。

array(1) {
  [0]=>
  string(9) "XMLWriter"
}

参考

  • ReflectionExtension::getClasses() - クラスを取得する
  • ReflectionExtension::getName() - 拡張モジュール名を取得する

User Contributed Notes

There are no user contributed notes for this page.


定数を取得する

  • ≪ ReflectionExtension::getClassNames
  • ReflectionExtension::getDependencies ≫
  • PHP Manual
  • ReflectionExtension
  • 定数を取得する

ReflectionExtension::getConstants

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::getConstants — 定数を取得する

説明

public ReflectionExtension::getConstants(): array

拡張モジュールで定義されている定数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

定数名をキーとする連想配列を返します。

例

例1 ReflectionExtension::getConstants() の例

<?php
$ext = new ReflectionExtension('DOM');

print_r($ext->getConstants());
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [XML_ELEMENT_NODE] => 1
    [XML_ATTRIBUTE_NODE] => 2
    [XML_TEXT_NODE] => 3
    [XML_CDATA_SECTION_NODE] => 4
    [XML_ENTITY_REF_NODE] => 5
    [XML_ENTITY_NODE] => 6
    [XML_PI_NODE] => 7
    [XML_COMMENT_NODE] => 8
    [XML_DOCUMENT_NODE] => 9
    [XML_DOCUMENT_TYPE_NODE] => 10
    [XML_DOCUMENT_FRAG_NODE] => 11
    [XML_NOTATION_NODE] => 12
    [XML_HTML_DOCUMENT_NODE] => 13
    [XML_DTD_NODE] => 14
    [XML_ELEMENT_DECL_NODE] => 15
    [XML_ATTRIBUTE_DECL_NODE] => 16
    [XML_ENTITY_DECL_NODE] => 17
    [XML_NAMESPACE_DECL_NODE] => 18
    [XML_LOCAL_NAMESPACE] => 18
    [XML_ATTRIBUTE_CDATA] => 1
    [XML_ATTRIBUTE_ID] => 2
    [XML_ATTRIBUTE_IDREF] => 3
    [XML_ATTRIBUTE_IDREFS] => 4
    [XML_ATTRIBUTE_ENTITY] => 6
    [XML_ATTRIBUTE_NMTOKEN] => 7
    [XML_ATTRIBUTE_NMTOKENS] => 8
    [XML_ATTRIBUTE_ENUMERATION] => 9
    [XML_ATTRIBUTE_NOTATION] => 10
    [DOM_PHP_ERR] => 0
    [DOM_INDEX_SIZE_ERR] => 1
    [DOMSTRING_SIZE_ERR] => 2
    [DOM_HIERARCHY_REQUEST_ERR] => 3
    [DOM_WRONG_DOCUMENT_ERR] => 4
    [DOM_INVALID_CHARACTER_ERR] => 5
    [DOM_NO_DATA_ALLOWED_ERR] => 6
    [DOM_NO_MODIFICATION_ALLOWED_ERR] => 7
    [DOM_NOT_FOUND_ERR] => 8
    [DOM_NOT_SUPPORTED_ERR] => 9
    [DOM_INUSE_ATTRIBUTE_ERR] => 10
    [DOM_INVALID_STATE_ERR] => 11
    [DOM_SYNTAX_ERR] => 12
    [DOM_INVALID_MODIFICATION_ERR] => 13
    [DOM_NAMESPACE_ERR] => 14
    [DOM_INVALID_ACCESS_ERR] => 15
    [DOM_VALIDATION_ERR] => 16
)

参考

  • ReflectionExtension::getINIEntries() - 拡張モジュールの ini エントリを取得する

User Contributed Notes

There are no user contributed notes for this page.


依存性を取得する

  • ≪ ReflectionExtension::getConstants
  • ReflectionExtension::getFunctions ≫
  • PHP Manual
  • ReflectionExtension
  • 依存性を取得する

ReflectionExtension::getDependencies

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

ReflectionExtension::getDependencies — 依存性を取得する

説明

public ReflectionExtension::getDependencies(): array

必須の依存性、衝突する依存性の両方を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

依存する拡張モジュールをキー、そして Required、Optional あるいは Conflicts のいずれかを値とする連想配列を返します。

例

例1 ReflectionExtension::getDependencies() の例

<?php
$dom = new ReflectionExtension('dom');

print_r($dom->getDependencies());
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [libxml] => Required
    [domxml] => Conflicts
)

参考

  • ReflectionClass::getVersion()

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュールの関数を取得する

  • ≪ ReflectionExtension::getDependencies
  • ReflectionExtension::getINIEntries ≫
  • PHP Manual
  • ReflectionExtension
  • 拡張モジュールの関数を取得する

ReflectionExtension::getFunctions

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::getFunctions — 拡張モジュールの関数を取得する

説明

public ReflectionExtension::getFunctions(): array

拡張モジュールで定義されている関数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionFunction オブジェクトの連想配列を返します。 拡張モジュール内で定義されている関数名がキーとなります。 関数が定義されていない場合は空の配列を返します。

例

例1 ReflectionExtension::getFunctions() の例

<?php
$dom = new ReflectionExtension('SimpleXML');

print_r($dom->getFunctions());
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [simplexml_load_file] => ReflectionFunction Object
        (
            [name] => simplexml_load_file
        )

    [simplexml_load_string] => ReflectionFunction Object
        (
            [name] => simplexml_load_string
        )

    [simplexml_import_dom] => ReflectionFunction Object
        (
            [name] => simplexml_import_dom
        )

)

参考

  • ReflectionExtension::getClasses() - クラスを取得する
  • get_extension_funcs() - あるモジュールの関数名を配列として返す

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュールの ini エントリを取得する

  • ≪ ReflectionExtension::getFunctions
  • ReflectionExtension::getName ≫
  • PHP Manual
  • ReflectionExtension
  • 拡張モジュールの ini エントリを取得する

ReflectionExtension::getINIEntries

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::getINIEntries — 拡張モジュールの ini エントリを取得する

説明

public ReflectionExtension::getINIEntries(): array

拡張モジュールの ini エントリを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ini エントリをキー、定義されている値をキーに対応する値とした連想配列を返します。

例

例1 ReflectionExtension::getINIEntries() の例

<?php
$ext = new ReflectionExtension('mysql');

print_r($ext->getINIEntries());
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [mysql.allow_persistent] => 1
    [mysql.max_persistent] => -1
    [mysql.max_links] => -1
    [mysql.default_host] =>
    [mysql.default_user] =>
    [mysql.default_password] =>
    [mysql.default_port] =>
    [mysql.default_socket] =>
    [mysql.connect_timeout] => 60
    [mysql.trace_mode] =>
    [mysql.allow_local_infile] => 1
    [mysql.cache_size] => 2000
)

参考

  • ini_get_all() - すべての設定オプションを得る
  • ReflectionExtension::getConstants() - 定数を取得する

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュール名を取得する

  • ≪ ReflectionExtension::getINIEntries
  • ReflectionExtension::getVersion ≫
  • PHP Manual
  • ReflectionExtension
  • 拡張モジュール名を取得する

ReflectionExtension::getName

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::getName — 拡張モジュール名を取得する

説明

public ReflectionExtension::getName(): string

拡張モジュールの名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

拡張モジュールの名前を返します。

例

例1 ReflectionExtension::getName() の例

<?php
$ext = new ReflectionExtension('mysqli');
var_dump($ext->getName());
?>

上の例の出力は、 たとえば以下のようになります。

string(6) "mysqli"

参考

  • ReflectionExtension::getClassNames() - クラス名を取得する

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュールのバージョンを取得する

  • ≪ ReflectionExtension::getName
  • ReflectionExtension::info ≫
  • PHP Manual
  • ReflectionExtension
  • 拡張モジュールのバージョンを取得する

ReflectionExtension::getVersion

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::getVersion — 拡張モジュールのバージョンを取得する

説明

public ReflectionExtension::getVersion(): ?string

拡張モジュールのバージョンを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

拡張モジュールのバージョンを返します。 バージョン情報がない場合は、null を返します。

例

例1 ReflectionExtension::getVersion() の例

<?php
$ext = new ReflectionExtension('mysqli');
var_dump($ext->getVersion());
?>

上の例の出力は、 たとえば以下のようになります。

string(3) "0.1"

参考

  • ReflectionExtension::info() - 拡張モジュールの情報を表示する

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュールの情報を表示する

  • ≪ ReflectionExtension::getVersion
  • ReflectionExtension::isPersistent ≫
  • PHP Manual
  • ReflectionExtension
  • 拡張モジュールの情報を表示する

ReflectionExtension::info

(PHP 5 >= 5.2.4, PHP 7, PHP 8)

ReflectionExtension::info — 拡張モジュールの情報を表示する

説明

public ReflectionExtension::info(): void

指定した拡張モジュールに関する "phpinfo()" の情報を表示します。

パラメータ

この関数にはパラメータはありません。

戻り値

拡張モジュールの情報を返します。

例

例1 ReflectionExtension::info() の例

<?php
$ext = new ReflectionExtension('mysqli');
$ext->info();
?>

上の例の出力は、 たとえば以下のようになります。

mysqli

MysqlI Support => enabled
Client API library version => mysqlnd 5.0.5-dev - 081106 - $Revision$
Active Persistent Links => 0
Inactive Persistent Links => 0
Active Links => 0
Persistent cache => enabled
put_hits => 0
put_misses => 0
get_hits => 0
get_misses => 0
size => 2000
free_items => 2000
references => 2

Directive => Local Value => Master Value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_user => no value => no value
mysqli.default_pw => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_socket => no value => no value
mysqli.reconnect => Off => Off
mysqli.allow_local_infile => On => On
mysqli.cache_size => 2000 => 2000

参考

  • ReflectionExtension::getName() - 拡張モジュール名を取得する
  • phpinfo() - PHP の設定情報を出力する

User Contributed Notes

There are no user contributed notes for this page.


この拡張モジュールが永続性のあるものかどうかを返す

  • ≪ ReflectionExtension::info
  • ReflectionExtension::isTemporary ≫
  • PHP Manual
  • ReflectionExtension
  • この拡張モジュールが永続性のあるものかどうかを返す

ReflectionExtension::isPersistent

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionExtension::isPersistent — この拡張モジュールが永続性のあるものかどうかを返す

説明

public ReflectionExtension::isPersistent(): bool

この拡張モジュールが永続性のあるものかどうかを調べます。

php.ini を使って読み込まれている場合、拡張機能は永続性があります。 dl() を使って読み込まれている場合、拡張機能は一時的なもので、永続性はありません。

パラメータ

この関数にはパラメータはありません。

戻り値

この拡張モジュールが extension で読み込まれたものである場合に true、そうでない場合に false を返します。

参考

  • ReflectionExtension::isTemporary() - この拡張モジュールが一時的なものかどうかを返す

User Contributed Notes

There are no user contributed notes for this page.


この拡張モジュールが一時的なものかどうかを返す

  • ≪ ReflectionExtension::isPersistent
  • ReflectionExtension::__toString ≫
  • PHP Manual
  • ReflectionExtension
  • この拡張モジュールが一時的なものかどうかを返す

ReflectionExtension::isTemporary

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionExtension::isTemporary — この拡張モジュールが一時的なものかどうかを返す

説明

public ReflectionExtension::isTemporary(): bool

この拡張モジュールが一時的なものかどうかを調べます。

dl() を使って読み込まれている場合、 拡張モジュールは一時的なものです。

パラメータ

この関数にはパラメータはありません。

戻り値

この拡張モジュールが dl() で読み込まれたものである場合に true、 そうでない場合に false を返します。

参考

  • ReflectionExtension::isPersistent() - この拡張モジュールが永続性のあるものかどうかを返す

User Contributed Notes

There are no user contributed notes for this page.


文字列に変換する

  • ≪ ReflectionExtension::isTemporary
  • ReflectionFunction ≫
  • PHP Manual
  • ReflectionExtension
  • 文字列に変換する

ReflectionExtension::__toString

(PHP 5, PHP 7, PHP 8)

ReflectionExtension::__toString — 文字列に変換する

説明

public ReflectionExtension::__toString(): string

調べた拡張モジュールをエクスポートし、文字列として返します。 これは、ReflectionExtension::export() のパラメータ return を true に設定するのと同じ意味です。

パラメータ

この関数にはパラメータはありません。

戻り値

エクスポートした拡張モジュールを文字列で返します。 ReflectionExtension::export() と同じ形式となります。

参考

  • ReflectionExtension::__construct() - ReflectionExtension を作成する
  • ReflectionExtension::export() - エクスポートする
  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionFunction クラス

(PHP 5, PHP 7, PHP 8)

はじめに

ReflectionFunction クラスは 関数についての情報を報告します。

クラス概要

class ReflectionFunction extends ReflectionFunctionAbstract {
/* 定数 */
public const int IS_DEPRECATED;
/* 継承したプロパティ */
public string $name;
/* メソッド */
public __construct(Closure|string $function)
public static export(string $name, string $return = ?): string
public getClosure(): Closure
public invoke(mixed ...$args): mixed
public invokeArgs(array $args): mixed
public isAnonymous(): bool
public isDisabled(): bool
public __toString(): string
/* 継承したメソッド */
private ReflectionFunctionAbstract::__clone(): void
public ReflectionFunctionAbstract::getAttributes(?string $name = null, int $flags = 0): array
public ReflectionFunctionAbstract::getClosureScopeClass(): ?ReflectionClass
public ReflectionFunctionAbstract::getClosureThis(): ?object
public ReflectionFunctionAbstract::getClosureUsedVariables(): array
public ReflectionFunctionAbstract::getDocComment(): string|false
public ReflectionFunctionAbstract::getEndLine(): int|false
public ReflectionFunctionAbstract::getExtension(): ?ReflectionExtension
public ReflectionFunctionAbstract::getExtensionName(): string|false
public ReflectionFunctionAbstract::getFileName(): string|false
public ReflectionFunctionAbstract::getName(): string
public ReflectionFunctionAbstract::getNamespaceName(): string
public ReflectionFunctionAbstract::getNumberOfParameters(): int
public ReflectionFunctionAbstract::getNumberOfRequiredParameters(): int
public ReflectionFunctionAbstract::getParameters(): array
public ReflectionFunctionAbstract::getReturnType(): ?ReflectionType
public ReflectionFunctionAbstract::getShortName(): string
public ReflectionFunctionAbstract::getStartLine(): int|false
public ReflectionFunctionAbstract::getStaticVariables(): array
public ReflectionFunctionAbstract::getTentativeReturnType(): ?ReflectionType
public ReflectionFunctionAbstract::hasReturnType(): bool
public ReflectionFunctionAbstract::hasTentativeReturnType(): bool
public ReflectionFunctionAbstract::inNamespace(): bool
public ReflectionFunctionAbstract::isClosure(): bool
public ReflectionFunctionAbstract::isDeprecated(): bool
public ReflectionFunctionAbstract::isGenerator(): bool
public ReflectionFunctionAbstract::isInternal(): bool
public ReflectionFunctionAbstract::isStatic(): bool
public ReflectionFunctionAbstract::isUserDefined(): bool
public ReflectionFunctionAbstract::isVariadic(): bool
public ReflectionFunctionAbstract::returnsReference(): bool
abstract public ReflectionFunctionAbstract::__toString(): void
}

定義済み定数

ReflectionFunction の修飾子

ReflectionFunction::IS_DEPRECATED

非推奨の関数であることを示します。

変更履歴

バージョン | 説明
8.0.0 | ReflectionFunction::export() は、削除されました。

目次

  • ReflectionFunction::__construct — ReflectionFunction オブジェクトを作成する
  • ReflectionFunction::export — 関数をエクスポートする
  • ReflectionFunction::getClosure — この関数に動的に作成されたクロージャを返す
  • ReflectionFunction::invoke — 関数を起動する
  • ReflectionFunction::invokeArgs — 引数を指定して関数を起動する
  • ReflectionFunction::isAnonymous — 関数が無名関数かどうかを調べる
  • ReflectionFunction::isDisabled — 関数が無効になっているかどうかを調べる
  • ReflectionFunction::__toString — ReflectionFunction を表現する文字列を返す

User Contributed Notes

a dot lucassilvadeoliveira at gmail dot com 28-Nov-2020 06:15
We can use this functionality to automatically pass arguments to our function based on some data structure.

NOTE: I am using a php 8.0> feature called "Nameds parameter"

<?php

$valuesToProcess = [
  'name' => 'Anderson Lucas Silva de Oliveira',
  'age' => 21,
  'hobbie' => 'Play games'
];

function processUserData($name, $age, $job = "", $hobbie = "")
{
    $msg = "Hello $name. You have $age years old";
    if (!empty($job)) {
    $msg .= ". Your job is $job";
    }

    if (!empty($hobbie)) {
        $msg .= ". Your hobbie is $hobbie";
    }

    echo $msg . ".";
}

$refFunction = new ReflectionFunction('processUserData');
$parameters = $refFunction->getParameters();

$validParameters = [];
foreach ($parameters as $parameter) {
    if (!array_key_exists($parameter->getName(), $valuesToProcess) && !$parameter->isOptional()) {
        throw new DomainException('Cannot resolve the parameter' . $parameter->getName());
    }

    if(!array_key_exists($parameter->getName(), $valuesToProcess)) {
        continue;
    }

    $validParameters[$parameter->getName()] = $valuesToProcess[$parameter->getName()];
}

$refFunction->invoke(...$validParameters);
?>

Results in:

Hello Anderson Lucas Silva de Oliveira. You have 21 years old. Your hobbie is Play games.
Lorenz R.S. 12-Aug-2011 01:24
Here is a concise example of ReflectionFunction usage for Parameter Reflection / introspection (e.g. to automatically generate API descriptions)

<?php
$properties = $reflector->getProperties();
$refFunc = new ReflectionFunction('preg_replace');
foreach( $refFunc->getParameters() as $param ){
    //invokes ■ReflectionParameter::__toString
    print $param;
}
?>

prints:

Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #4 [ <optional> &$count ]


ReflectionFunction オブジェクトを作成する

  • ≪ ReflectionFunction
  • ReflectionFunction::export ≫
  • PHP Manual
  • ReflectionFunction
  • ReflectionFunction オブジェクトを作成する

ReflectionFunction::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionFunction::__construct — ReflectionFunction オブジェクトを作成する

説明

public ReflectionFunction::__construct(Closure|string $function)

ReflectionFunction オブジェクトを作成します。

パラメータ

function

調べたい関数あるいはクロージャの名前。

エラー / 例外

function パラメータが正しい関数名でない場合に ReflectionException が発生します。

例

例1 ReflectionFunction::__construct() の例

<?php
/**
* 簡単なカウンタ
*
* @return int
*/
function counter1()
{
static $c = 0;
return ++$c;
}

/**
* 別の簡単なカウンタ
*
* @return int
*/
$counter2 = function()
{
static $d = 0;
return ++$d;

};

function dumpReflectionFunction($func)
{
// 基本情報を表示します
printf(
"\n\n===> The %s function '%s'\n".
" declared in %s\n".
" lines %d to %d\n",
$func->isInternal() ? 'internal' : 'user-defined',
$func->getName(),
$func->getFileName(),
$func->getStartLine(),
$func->getEndline()
);

// ドキュメントコメントを表示します
printf("---> Documentation:\n %s\n", var_export($func->getDocComment(), 1));

// static変数が存在すれば表示します
if ($statics = $func->getStaticVariables())
{
printf("---> Static variables: %s\n", var_export($statics, 1));
}
}

// ReflectionFunction クラスのインスタンスを作成します
dumpReflectionFunction(new ReflectionFunction('counter1'));
dumpReflectionFunction(new ReflectionFunction($counter2));
?>

上の例の出力は、 たとえば以下のようになります。

===> The user-defined function 'counter1'
     declared in Z:\reflectcounter.php
     lines 7 to 11
---> Documentation:
 '/**
 * 簡単なカウンタ
 *
 * @return    int
 */'
---> Static variables: array (
  'c' => 0,
)

===> The user-defined function '{closure}'
     declared in Z:\reflectcounter.php
     lines 18 to 23
---> Documentation:
 '/**
 * 別の簡単なカウンタ
 *
 * @return    int
 */'
---> Static variables: array (
  'd' => 0,
)

参考

  • ReflectionMethod::__construct() - ReflectionMethod を作成する
  • コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


関数をエクスポートする

  • ≪ ReflectionFunction::__construct
  • ReflectionFunction::getClosure ≫
  • PHP Manual
  • ReflectionFunction
  • 関数をエクスポートする

ReflectionFunction::export

(PHP 5, PHP 7)

ReflectionFunction::export — 関数をエクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionFunction::export(string $name, string $return = ?): string

調べた関数をエクスポートします。

パラメータ

name

エクスポートするリフレクション。

return

true に設定すると、エクスポートを発行するのではなく返します。 false (デフォルト) の場合はその逆です。

戻り値

return パラメータを true に設定すると、エクスポートを文字列で返します。それ以外の場合は null を返します。

参考

  • ReflectionFunction::invoke() - 関数を起動する
  • ReflectionFunction::__toString() - ReflectionFunction を表現する文字列を返す

User Contributed Notes

hytest at gmail dot com 22-Nov-2011 08:04
Example:

<?php
function title($title, $name)
{
    return sprintf("%s. %s\r\n", $title, $name);
}

echo ReflectionFunction::export('title',true);

?>

Output:

Function [ <user> function title ] {
  @@ /path/to/file.php 2 - 5

  - Parameters [2] {
    Parameter #0 [ <required> $title ]
    Parameter #1 [ <required> $name ]
  }
}


この関数に動的に作成されたクロージャを返す

  • ≪ ReflectionFunction::export
  • ReflectionFunction::invoke ≫
  • PHP Manual
  • ReflectionFunction
  • この関数に動的に作成されたクロージャを返す

ReflectionFunction::getClosure

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionFunction::getClosure — この関数に動的に作成されたクロージャを返す

説明

public ReflectionFunction::getClosure(): Closure

この関数に動的に作成されたクロージャを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

新しく作成された Closure を返します。

参考

  • 第一級callableを生成する記法

User Contributed Notes

php dot net-bug at spamhereplease dot com 23-Nov-2013 05:34
If you have a callback that is going to be invoked often, you can use this method (and the related method for ReflectProperty) to get a closure that will execute at near native speed.

Some benchmark comparisons with php 5.4.22 on ubuntu:

[function call]      [time]     [%slower]
function():          0.09527      0%
Reflection::Closure: 0.09729      2%
$string():           0.102641     8%
Reflection:          0.197122   107%
call_user_func:      0.214045   125%

[method call]        [time]  [% slower] [%vs func]
->method():          0.103611    0%       9%
Reflection::Closure: 0.1043      1%       9%
$string():           0.109885    6%      15%
Reflection:          0.20451    97%     115%
call_user_func:      0.219205  112%     130%


関数を起動する

  • ≪ ReflectionFunction::getClosure
  • ReflectionFunction::invokeArgs ≫
  • PHP Manual
  • ReflectionFunction
  • 関数を起動する

ReflectionFunction::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionFunction::invoke — 関数を起動する

説明

public ReflectionFunction::invoke(mixed ...$args): mixed

調べた関数を起動します。

パラメータ

args

渡す引数のリスト。可変長の引数を指定でき、 call_user_func() と同じようにして関数に渡されます。

戻り値

起動した関数の結果を返します。

例

例1 ReflectionFunction::invoke() の例

<?php
function title($title, $name)
{
return sprintf("%s. %s\r\n", $title, $name);
}

$function = new ReflectionFunction('title');

echo $function->invoke('Dr', 'Phil');
?>

上の例の出力は以下となります。

Dr. Phil

注意

注意:

ReflectionFunction::invoke() は、 リファレンスが引数に期待されている場合は使えません。 その場合は、(引数リストにリファレンスを渡して) ReflectionFunction::invokeArgs() を代わりに使うべきです。

参考

  • ReflectionFunction::export() - 関数をエクスポートする
  • __invoke()
  • call_user_func() - 最初の引数で指定したコールバック関数をコールする

User Contributed Notes

spark at limao dot com dot br 10-Jun-2011 10:55
I know Reflections classes have a lot of power, but sometimes all we need is to store a annonymus function or even create a simple callback somewhere.

so here it is, the Callback class:
<?php
    class Callback{
        private $name = false;

        public function Callback($obj,$call=false){
            $name = array($obj);
            if($call) $name[] = $call;

            $this->name = $name;
        }
        public function invoke($params=array()){
            return call_user_func_array($this->name,$params);
        }
    }
?>

Usage:
<?php
    function sayName(){
        return "goku";
    }

    $myVar = new Callback("sayName");

    echo "Hi, I am ".$myVar->invoke()."!";

    //also works with methods: new Callback($obj,"method");
?>


引数を指定して関数を起動する

  • ≪ ReflectionFunction::invoke
  • ReflectionFunction::isAnonymous ≫
  • PHP Manual
  • ReflectionFunction
  • 引数を指定して関数を起動する

ReflectionFunction::invokeArgs

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionFunction::invokeArgs — 引数を指定して関数を起動する

説明

public ReflectionFunction::invokeArgs(array $args): mixed

関数を起動して、その引数を配列として渡します。

パラメータ

args

関数に渡す引数を含む配列。 call_user_func_array() と同じように動作します。

戻り値

起動した関数の結果を返します。

変更履歴

バージョン | 説明
8.0.0 | args のキーは、 静かに無視されるのではなく、パラメータの名前として解釈されるようになりました。

例

例1 ReflectionFunction::invokeArgs() の例

<?php
function title($title, $name)
{
return sprintf("%s. %s\r\n", $title, $name);
}

$function = new ReflectionFunction('title');

echo $function->invokeArgs(array('Dr', 'Phil'));
?>

上の例の出力は以下となります。

Dr. Phil

例2 ReflectionFunction::invokeArgs() で参照を使う例

<?php
function get_false_conditions(array $conditions, array &$false_conditions)
{
foreach ($conditions as $condition) {
if (!$condition) {
$false_conditions[] = $condition;
}
}
}

$function_ref = new ReflectionFunction('get_false_conditions');

$conditions = array(true, false, -1, 0, 1);
$false_conditions = array();

$function_ref->invokeArgs(array($conditions, &$false_conditions));

var_dump($false_conditions);
?>

上の例の出力は以下となります。

array(2) {
  [0]=>
  bool(false)
  [1]=>
  int(0)
}

注意

注意:

関数の引数の中にリファレンス渡しを要するものがある場合は、 渡す引数の中でもリファレンスにしておく必要があります。

参考

  • ReflectionFunction::invoke() - 関数を起動する
  • ReflectionFunctionAbstract::getNumberOfParameters() - パラメータ数を取得する
  • __invoke()
  • call_user_func_array() - パラメータの配列を指定してコールバック関数をコールする

User Contributed Notes

theyourcomputer at gmail dot com 05-Dec-2017 01:40
In the case of call_user_func_array(), if you were to pass around an anonymous function and reference $this within the anonymous function, $this will faithfully refer to the class in the context in which the function was defined. Using ReflectionFunction::invokeArgs() does not seem to retain its original context--yeah, even if you bind the anonymous function before invoking. I recommend call_user_func_array() where context is a concern.
Andrea Giammarchi 16-Feb-2008 06:41
I encountered a weird problem with ReflectionFunction, described in ticket 44139 of PHP Bugs.

If for some reason you need to call with invoke, or invokeArgs, a function like array_unshift (that accepts internally the array by reference) you could use this code to avoid the generated warning or fatal error.

<?php
function unshift(){
    $ref        = new ReflectionFunction('array_unshift');
    $arguments    = func_get_args();
    return        $ref->invokeArgs(array_merge(array(&$this->arr), $arguments));
}
?>

I don't know about performances (you can create an array manually too, starting from array(&$this->something) and adding arguments). However, it seems to work correctly without problems, at least until the send by reference will be usable with one single value ...


関数が無名関数かどうかを調べる

  • ≪ ReflectionFunction::invokeArgs
  • ReflectionFunction::isDisabled ≫
  • PHP Manual
  • ReflectionFunction
  • 関数が無名関数かどうかを調べる

ReflectionFunction::isAnonymous

(PHP 8 >= 8.2.0)

ReflectionFunction::isAnonymous — 関数が無名関数かどうかを調べる

説明

public ReflectionFunction::isAnonymous(): bool

関数が 無名関数 かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

関数が無名関数の場合、true を返します。そうでない場合、false を返します。

例

例1 ReflectionFunction::isAnonymous() の例

<?php

$rf = new ReflectionFunction(function() {});
var_dump($rf->isAnonymous());

$rf = new ReflectionFunction('strlen');
var_dump($rf->isAnonymous());
?>

上の例の出力は以下となります。

bool(true)
bool(false)

参考

  • 無名関数

User Contributed Notes

nicolasgrekas at php dot net 13-Dec-2022 10:00
Closures can be either anonymous or not.

Here is an anonymous closure:
$c1 = function () {};

And here is a *non* anonymous closure:
$c2 = Closure::fromCallable(['Foo', 'bar']);

ReflectionFunction::isAnonymous() returns true for $c1 and false for $c2.

Before PHP 8.2, one had to do this check to decide between both:
$r = new \ReflectionFunction($c1);
$isAnonymous = false !== strpos($r->name, '{closure}');

ReflectionFunction::isAnonymous() makes it easier to check.
Taufik Nurrohman 09-Dec-2022 11:22
You know that anonymous function is just an instance of class `Closure` so this would be equivalent to check whether a variable is an anonymous function or not:

<?php

$test = function () {};

if (is_callable($test) && is_object($test) && $test instanceof Closure) { /* ... */ }

?>


関数が無効になっているかどうかを調べる

  • ≪ ReflectionFunction::isAnonymous
  • ReflectionFunction::__toString ≫
  • PHP Manual
  • ReflectionFunction
  • 関数が無効になっているかどうかを調べる

ReflectionFunction::isDisabled

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunction::isDisabled — 関数が無効になっているかどうかを調べる

警告

この関数は PHP 8.0.0 で 非推奨になります。この関数に頼らないことを強く推奨します。

説明

public ReflectionFunction::isDisabled(): bool

disable_functions ディレクティブで関数が無効になっているかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

無効になっている場合に true、それ以外の場合に false を返します。

参考

  • ReflectionFunctionAbstract::isUserDefined() - ユーザー定義関数であるかどうかを調べる
  • disable_functions ディレクティブ

User Contributed Notes

There are no user contributed notes for this page.


ReflectionFunction を表現する文字列を返す

  • ≪ ReflectionFunction::isDisabled
  • ReflectionFunctionAbstract ≫
  • PHP Manual
  • ReflectionFunction
  • ReflectionFunction を表現する文字列を返す

ReflectionFunction::__toString

(PHP 5, PHP 7, PHP 8)

ReflectionFunction::__toString — ReflectionFunction を表現する文字列を返す

説明

public ReflectionFunction::__toString(): string

関数を表現した、人間が読める説明を取得します。 パラメータと戻り値が含まれます。

パラメータ

この関数にはパラメータはありません。

戻り値

文字列を返します。

例

例1 ReflectionFunction::__toString() の例

<?php
function title($title, $name)
{
return sprintf("%s. %s\r\n", $title, $name);
}

echo new ReflectionFunction('title');
?>

上の例の出力は、 たとえば以下のようになります。

Function [ <user> function title ] {
  @@ Command line code 1 - 1

  - Parameters [2] {
    Parameter #0 [ <required> $title ]
    Parameter #1 [ <required> $name ]
  }
}

参考

  • ReflectionFunction::export() - 関数をエクスポートする
  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionFunctionAbstract クラス

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

はじめに

ReflectionFunction の親クラスです。 詳細はこのクラスの説明を参照ください。

クラス概要

abstract class ReflectionFunctionAbstract implements Reflector {
/* プロパティ */
public string $name;
/* メソッド */
private __clone(): void
public getAttributes(?string $name = null, int $flags = 0): array
public getClosureScopeClass(): ?ReflectionClass
public getClosureThis(): ?object
public getClosureUsedVariables(): array
public getDocComment(): string|false
public getEndLine(): int|false
public getExtension(): ?ReflectionExtension
public getExtensionName(): string|false
public getFileName(): string|false
public getName(): string
public getNamespaceName(): string
public getNumberOfParameters(): int
public getNumberOfRequiredParameters(): int
public getParameters(): array
public getReturnType(): ?ReflectionType
public getShortName(): string
public getStartLine(): int|false
public getStaticVariables(): array
public getTentativeReturnType(): ?ReflectionType
public hasReturnType(): bool
public hasTentativeReturnType(): bool
public inNamespace(): bool
public isClosure(): bool
public isDeprecated(): bool
public isGenerator(): bool
public isInternal(): bool
public isStatic(): bool
public isUserDefined(): bool
public isVariadic(): bool
public returnsReference(): bool
abstract public __toString(): void
}

プロパティ

name

関数名。読み込み専用で、書き込もうとすると ReflectionException をスローします。

目次

  • ReflectionFunctionAbstract::__clone — 関数のクローンを作成する
  • ReflectionFunctionAbstract::getAttributes — アトリビュートを取得する
  • ReflectionFunctionAbstract::getClosureScopeClass — クロージャに関連づけられたスコープクラスを返す
  • ReflectionFunctionAbstract::getClosureThis — クロージャにバインドした this ポインタを返す
  • ReflectionFunctionAbstract::getClosureUsedVariables — クロージャ内で使われている変数の配列を返す
  • ReflectionFunctionAbstract::getDocComment — ドキュメントコメントを取得する
  • ReflectionFunctionAbstract::getEndLine — 終了行番号を取得する
  • ReflectionFunctionAbstract::getExtension — 拡張モジュールの情報を取得する
  • ReflectionFunctionAbstract::getExtensionName — 拡張モジュールの名前を取得する
  • ReflectionFunctionAbstract::getFileName — ファイル名を取得する
  • ReflectionFunctionAbstract::getName — 関数名を取得する
  • ReflectionFunctionAbstract::getNamespaceName — 名前空間名を取得する
  • ReflectionFunctionAbstract::getNumberOfParameters — パラメータ数を取得する
  • ReflectionFunctionAbstract::getNumberOfRequiredParameters — 必須パラメータの数を取得する
  • ReflectionFunctionAbstract::getParameters — パラメータを取得する
  • ReflectionFunctionAbstract::getReturnType — 指定された関数の戻り値の型を取得する
  • ReflectionFunctionAbstract::getShortName — 関数の短い名前を取得する
  • ReflectionFunctionAbstract::getStartLine — 開始行番号を取得する
  • ReflectionFunctionAbstract::getStaticVariables — static変数を取得する
  • ReflectionFunctionAbstract::getTentativeReturnType — 関数に関連付けられた仮の戻り値の型を返す
  • ReflectionFunctionAbstract::hasReturnType — 関数が戻り値の型を指定しているかを調べる
  • ReflectionFunctionAbstract::hasTentativeReturnType — 戻り値の型を仮で宣言しているかを返す
  • ReflectionFunctionAbstract::inNamespace — 関数が名前空間内にあるかどうかを調べる
  • ReflectionFunctionAbstract::isClosure — クロージャであるかどうかを調べる
  • ReflectionFunctionAbstract::isDeprecated — 非推奨であるかどうかを調べる
  • ReflectionFunctionAbstract::isGenerator — この関数がジェネレータかどうかを返す
  • ReflectionFunctionAbstract::isInternal — 内部関数かどうかを調べる
  • ReflectionFunctionAbstract::isStatic — 関数が static であるかどうかを調べる
  • ReflectionFunctionAbstract::isUserDefined — ユーザー定義関数であるかどうかを調べる
  • ReflectionFunctionAbstract::isVariadic — この関数の引数が可変長かを調べる
  • ReflectionFunctionAbstract::returnsReference — 参照返しかどうかを調べる
  • ReflectionFunctionAbstract::__toString — ReflectionFunctionAbstract を表現する文字列を返す

User Contributed Notes

There are no user contributed notes for this page.


関数のクローンを作成する

  • ≪ ReflectionFunctionAbstract
  • ReflectionFunctionAbstract::getAttributes ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 関数のクローンを作成する

ReflectionFunctionAbstract::__clone

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::__clone — 関数のクローンを作成する

説明

private ReflectionFunctionAbstract::__clone(): void

関数のクローンを作成します。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

変更履歴

バージョン | 説明
8.1.0 | このメソッドは、final ではなくなりました。

参考

  • オブジェクトのクローン作成

User Contributed Notes

There are no user contributed notes for this page.


アトリビュートを取得する

  • ≪ ReflectionFunctionAbstract::__clone
  • ReflectionFunctionAbstract::getClosureScopeClass ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • アトリビュートを取得する

ReflectionFunctionAbstract::getAttributes

(PHP 8)

ReflectionFunctionAbstract::getAttributes — アトリビュートを取得する

説明

public ReflectionFunctionAbstract::getAttributes(?string $name = null, int $flags = 0): array

この関数で宣言されている全てのアトリビュートを、 ReflectionAttribute として返します。

パラメータ

name

指定したクラス名にマッチするアトリビュートの、 ReflectionAttribute のみを含むようにフィルタします。

flags

name が指定されていた場合に、 結果をどうフィルタするかを決めるフラグ。

デフォルトは 0 です。 この場合、アトリビュートのクラス名が name であるものだけを返します。

他の利用可能なオプションは、 ReflectionAttribute::IS_INSTANCEOF です。 この場合、フィルタリングに instanceof を使います。

戻り値

アトリビュートの配列を、 ReflectionAttribute オブジェクトの配列として返します。

例

例1 メソッドを使った、基本的な使い方

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

class Factory {
#[Fruit]
#[Red]
public function makeApple(): string
{
return 'apple';
}
}

$method = new ReflectionMethod('Factory', 'makeApple');
$attributes = $method->getAttributes();
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
    [1] => Red
)

例2 関数を使った、基本的な使い方

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

#[Fruit]
#[Red]
function makeApple(): string
{
return 'apple';
}

$function = new ReflectionFunction('makeApple');
$attributes = $function->getAttributes();
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
    [1] => Red
)

例3 クラス名を使って結果をフィルタする

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

#[Fruit]
#[Red]
function makeApple(): string
{
return 'apple';
}

$function = new ReflectionFunction('makeApple');
$attributes = $function->getAttributes('Fruit');
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
)

例4 クラス名、かつ継承も考慮して結果をフィルタする

<?php
interface Color {
}

#[Attribute]
class Fruit {
}

#[Attribute]
class Red implements Color {
}

#[Fruit]
#[Red]
function makeApple(): string
{
return 'apple';
}

$function = new ReflectionFunction('makeApple');
$attributes = $function->getAttributes('Color', ReflectionAttribute::IS_INSTANCEOF);
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Red
)

参考

  • ReflectionClass::getAttributes() - アトリビュートを取得する
  • ReflectionClassConstant::getAttributes() - アトリビュートを取得する
  • ReflectionParameter::getAttributes() - アトリビュートを取得する
  • ReflectionProperty::getAttributes() - アトリビュートを取得する

User Contributed Notes

There are no user contributed notes for this page.


クロージャに関連づけられたスコープクラスを返す

  • ≪ ReflectionFunctionAbstract::getAttributes
  • ReflectionFunctionAbstract::getClosureThis ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • クロージャに関連づけられたスコープクラスを返す

ReflectionFunctionAbstract::getClosureScopeClass

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getClosureScopeClass — クロージャに関連づけられたスコープクラスを返す

説明

public ReflectionFunctionAbstract::getClosureScopeClass(): ?ReflectionClass

クロージャの宣言を囲んだクラスを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合にクラスを返します。 関数がクロージャでなかったり、クラスで囲まれていない場合は null を返します。

User Contributed Notes

There are no user contributed notes for this page.


クロージャにバインドした this ポインタを返す

  • ≪ ReflectionFunctionAbstract::getClosureScopeClass
  • ReflectionFunctionAbstract::getClosureUsedVariables ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • クロージャにバインドした this ポインタを返す

ReflectionFunctionAbstract::getClosureThis

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getClosureThis — クロージャにバインドした this ポインタを返す

説明

public ReflectionFunctionAbstract::getClosureThis(): ?object

関数が static でないクロージャの場合に、 クロージャ内部で $this にバインドされたオブジェクト所得します。

パラメータ

この関数にはパラメータはありません。

戻り値

$this ポインタを返します。 エラー時には null を返します。

User Contributed Notes

There are no user contributed notes for this page.


クロージャ内で使われている変数の配列を返す

  • ≪ ReflectionFunctionAbstract::getClosureThis
  • ReflectionFunctionAbstract::getDocComment ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • クロージャ内で使われている変数の配列を返す

ReflectionFunctionAbstract::getClosureUsedVariables

(PHP 8 >= 8.1.0)

ReflectionFunctionAbstract::getClosureUsedVariables — クロージャ内で使われている変数の配列を返す

説明

public ReflectionFunctionAbstract::getClosureUsedVariables(): array

Closure の中で内で使われている変数の配列を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

Closure の中で内で使われている変数の配列を返します。

例

例1 ReflectionFunctionAbstract::getClosureUsedVariables() の例

<?php

$one = 1;
$two = 2;

$function = function() use ($one, $two) {
static $three = 3;
};

$reflector = new ReflectionFunction($function);

var_dump($reflector->getClosureUsedVariables());
?>

上の例の出力は、 たとえば以下のようになります。

array(2) {
  ["one"]=>
  int(1)
  ["two"]=>
  int(2)
}

参考

  • ReflectionFunctionAbstract::getClosureScopeClass() - クロージャに関連づけられたスコープクラスを返す
  • ReflectionFunctionAbstract::getClosureThis() - クロージャにバインドした this ポインタを返す

User Contributed Notes

There are no user contributed notes for this page.


ドキュメントコメントを取得する

  • ≪ ReflectionFunctionAbstract::getClosureUsedVariables
  • ReflectionFunctionAbstract::getEndLine ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • ドキュメントコメントを取得する

ReflectionFunctionAbstract::getDocComment

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getDocComment — ドキュメントコメントを取得する

説明

public ReflectionFunctionAbstract::getDocComment(): string|false

関数のドキュメントコメントを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ドキュメントコメントが存在する場合はそれを返します。それ以外の場合は false を返します。

参考

  • ReflectionFunctionAbstract::getStartLine() - 開始行番号を取得する

User Contributed Notes

jens dot kohl+php at gmail dot com 26-Mar-2012 11:19
Beware when you try to use the getDocComment() methods with eAccelerator turned on. eAccelerator ≫optimizes≪ your code in a way that it removes any comments from your source. So at runtime you're not able to get any comments and therefor getDocComments return false.
bruno at vault7 dot com 12-Nov-2009 11:09
In order to retrieve a comment with this method, the comment must be imediately before the class, function or method, start with /** and end with */


終了行番号を取得する

  • ≪ ReflectionFunctionAbstract::getDocComment
  • ReflectionFunctionAbstract::getExtension ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 終了行番号を取得する

ReflectionFunctionAbstract::getEndLine

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getEndLine — 終了行番号を取得する

説明

public ReflectionFunctionAbstract::getEndLine(): int|false

終了行番号を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ユーザー定義関数の終了行番号を返します。不明な場合は false を返します。

参考

  • ReflectionFunctionAbstract::getStartLine() - 開始行番号を取得する

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュールの情報を取得する

  • ≪ ReflectionFunctionAbstract::getEndLine
  • ReflectionFunctionAbstract::getExtensionName ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 拡張モジュールの情報を取得する

ReflectionFunctionAbstract::getExtension

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getExtension — 拡張モジュールの情報を取得する

説明

public ReflectionFunctionAbstract::getExtension(): ?ReflectionExtension

関数の拡張モジュール情報を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

拡張モジュールの情報を ReflectionExtension オブジェクトで返します。 ユーザー定義の関数の場合は、null を返します。

参考

  • ReflectionFunctionAbstract::getExtensionName() - 拡張モジュールの名前を取得する

User Contributed Notes

There are no user contributed notes for this page.


拡張モジュールの名前を取得する

  • ≪ ReflectionFunctionAbstract::getExtension
  • ReflectionFunctionAbstract::getFileName ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 拡張モジュールの名前を取得する

ReflectionFunctionAbstract::getExtensionName

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getExtensionName — 拡張モジュールの名前を取得する

説明

public ReflectionFunctionAbstract::getExtensionName(): string|false

拡張モジュールの名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

拡張モジュールの名前を返します。 ユーザー定義の関数の場合は、false を返します。

参考

  • ReflectionFunctionAbstract::getExtension() - 拡張モジュールの情報を取得する

User Contributed Notes

There are no user contributed notes for this page.


ファイル名を取得する

  • ≪ ReflectionFunctionAbstract::getExtensionName
  • ReflectionFunctionAbstract::getName ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • ファイル名を取得する

ReflectionFunctionAbstract::getFileName

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getFileName — ファイル名を取得する

説明

public ReflectionFunctionAbstract::getFileName(): string|false

ユーザー定義関数のファイル名を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

関数が定義されたファイル名を返します。 PHP コアや拡張モジュールで定義されていた場合は、false を返します。

参考

  • ReflectionFunctionAbstract::getNamespaceName() - 名前空間名を取得する

User Contributed Notes

stein at visibone dot com 04-Jul-2013 10:53
Returns FALSE for an internal function (when isInternal() returns TRUE, e.g. for 'strlen').


関数名を取得する

  • ≪ ReflectionFunctionAbstract::getFileName
  • ReflectionFunctionAbstract::getNamespaceName ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 関数名を取得する

ReflectionFunctionAbstract::getName

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getName — 関数名を取得する

説明

public ReflectionFunctionAbstract::getName(): string

関数の名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

関数の名前を返します。

参考

  • ReflectionFunctionAbstract::getExtensionName() - 拡張モジュールの名前を取得する
  • ReflectionFunctionAbstract::isUserDefined() - ユーザー定義関数であるかどうかを調べる

User Contributed Notes

PR 14-Feb-2021 01:28
If you call getName() on an anonymous function you'll get "{closure}".


名前空間名を取得する

  • ≪ ReflectionFunctionAbstract::getName
  • ReflectionFunctionAbstract::getNumberOfParameters ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 名前空間名を取得する

ReflectionFunctionAbstract::getNamespaceName

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getNamespaceName — 名前空間名を取得する

説明

public ReflectionFunctionAbstract::getNamespaceName(): string

クラスが定義されている名前空間の名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

名前空間名を返します。

参考

  • ReflectionFunctionAbstract::getFileName() - ファイル名を取得する
  • 名前空間

User Contributed Notes

There are no user contributed notes for this page.


パラメータ数を取得する

  • ≪ ReflectionFunctionAbstract::getNamespaceName
  • ReflectionFunctionAbstract::getNumberOfRequiredParameters ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • パラメータ数を取得する

ReflectionFunctionAbstract::getNumberOfParameters

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getNumberOfParameters — パラメータ数を取得する

説明

public ReflectionFunctionAbstract::getNumberOfParameters(): int

関数で定義されているパラメータの数を、必須と任意の両方を含めて取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

パラメータの数を返します。

参考

  • ReflectionFunctionAbstract::getNumberOfRequiredParameters() - 必須パラメータの数を取得する
  • func_num_args() - 関数に渡された引数の数を返す

User Contributed Notes

8ctopus 23-Nov-2020 08:26
$reflection = new ReflectionFunction('implode');
echo $reflection->getNumberOfParameters();
Robert Pitt ( LitePHP ) 11-Apr-2010 03:42
Working on a new MVC Application Framework i use this method to check how many arguments are required before calling the sub method!

Example

<?php
        $this->method_args_count = $this->CReflection
            ->getMethod($Route->getMethod())
            ->getNumberOfParameters();
        //Maybe be 5 but if uri is /controller/method/single_param/ we only of 1
        $this->params = $Route->getParams(); //0 in some cases

        if($this->method_args_count > count($this->params))
        {
            $this->difference = ($this->method_args_count - count($this->params));
            for($i=0;$i<=$this->difference;$i++)
            {
                $this->params[] = false;
            }
        }

        //Call the method with correct amount of params
        // but as false for params that have not been passed!
        call_user_func_array(array(new $this->obj,$Route->getMethod()),$this->params);
?>


必須パラメータの数を取得する

  • ≪ ReflectionFunctionAbstract::getNumberOfParameters
  • ReflectionFunctionAbstract::getParameters ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 必須パラメータの数を取得する

ReflectionFunctionAbstract::getNumberOfRequiredParameters

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getNumberOfRequiredParameters — 必須パラメータの数を取得する

説明

public ReflectionFunctionAbstract::getNumberOfRequiredParameters(): int

関数で定義されている必須パラメータの数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

必須パラメータの数を返します。

参考

  • ReflectionFunctionAbstract::getNumberOfParameters() - パラメータ数を取得する

User Contributed Notes

cesar at magic3w dot com 07-Jul-2015 12:45
It's interesting to note that this function will treat optional parameters that come before a required parameter as required too. This is good since it allows you to verify that the function will be receiving enough parameters for the it to work, regardless where they are located.

<?php

class MyTest() {
    public function test($a = null, $b) {}
    public function test2($a = null, $b, $c = null) {}
}

//Create the reflection
$r  = new \ReflectionMethod('MyTest', 'test');
$r2 = new \ReflectionMethod('MyTest', 'test2');

//Verify the numbers
echo 'Test: ' . $r->getNumberOfRequiredParameters()); //Output: 2
echo 'Test2: ' . $r->getNumberOfRequiredParameters()); //Output: 2

?>
sebastian at sebastian-eiweleit dot de 02-Sep-2013 03:03
<?php
namespace ExampleWorld;
// The Class
class helloWorld {
    /* Method with two required arguments */

    public function requiredTwoArguments ( $var1, $var2 ) {
        // Some code ...
    }

    /* Method with two arguments, but just one is required */
    public function requiredOneArgument ( $var1, $var2 = false ) {
        // Some code ...
    }
}

$r = new \ReflectionMethod ( 'ExampleWorld\helloWorld', 'requiredTwoArguments' );
echo $r->getNumberOfRequiredParameters ();

$r = new \ReflectionMethod ( 'ExampleWorld\helloWorld', 'requiredOneArgument' );
echo $r->getNumberOfRequiredParameters ();

// Output: 2 1


パラメータを取得する

  • ≪ ReflectionFunctionAbstract::getNumberOfRequiredParameters
  • ReflectionFunctionAbstract::getReturnType ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • パラメータを取得する

ReflectionFunctionAbstract::getParameters

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getParameters — パラメータを取得する

説明

public ReflectionFunctionAbstract::getParameters(): array

パラメータをソースコードで定義された順に ReflectionParameter の配列で取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

パラメータを ReflectionParameter オブジェクトの配列で返します。

参考

  • ReflectionFunctionAbstract::getNumberOfParameters() - パラメータ数を取得する
  • func_get_args() - 関数の引数リストを配列として返す

User Contributed Notes

a dot lucassilvadeoliveira at gmail dot com 28-Nov-2020 06:08
We can use this functionality to automatically pass arguments to our function based on some data structure.

NOTE: I am using a php 8.0> feature called "Nameds parameter".

<?php

$valuesToProcess = [
  'name' => 'Anderson Lucas Silva de Oliveira',
  'age' => 21,
  'hobbie' => 'Play games'
];

function processUserData($name, $age, $job = "", $hobbie = "")
{
    $msg = "Hello $name. You have $age years old";
    if (!empty($job)) {
    $msg .= ". Your job is $job";
    }

    if (!empty($hobbie)) {
        $msg .= ". Your hobbie is $hobbie";
    }

    echo $msg . ".";
}

$refFunction = new ReflectionFunction('processUserData');
$parameters = $refFunction->getParameters();

$validParameters = [];
foreach ($parameters as $parameter) {
    if (!array_key_exists($parameter->getName(), $valuesToProcess) && !$parameter->isOptional()) {
        throw new DomainException('Cannot resolve the parameter' . $parameter->getName());
    }

    if(!array_key_exists($parameter->getName(), $valuesToProcess)) {
        continue;
    }

    $validParameters[$parameter->getName()] = $valuesToProcess[$parameter->getName()];
}

$refFunction->invoke(...$validParameters);
?>

Results in:

Hello Anderson Lucas Silva de Oliveira. You have 21 years old. Your hobbie is Play games.
dabidi at slupca dot pl 27-Oct-2015 01:33
This is part of my private framework that uses reflection.
This function get arguments list from theme method and puts corresponding vars from $_REQUEST ($_GET, $_POST, and $_COOKIE)

<?php
public static function fire_theme_method($class, $method)
{
        $fire_args=array();

        $reflection = new ReflectionMethod($class, $method);

    foreach($reflection->getParameters() AS $arg)
    {
        if($_REQUEST[$arg->name])
        $fire_args[$arg->name]=$_REQUEST[$arg->name];
        else
        $fire_args[$arg->name]=null;
    }

    return call_user_func_array(array($class, $method), $fire_args);
}
?>
For example, if my theme method needs only id, and we get this url:
http://example.com/my_class/my_method/?id=12&some_unwanted_var=123
will be ignored some_unwanted_var

Of course behind this i have .htaccess, autoloader and controller


指定された関数の戻り値の型を取得する

  • ≪ ReflectionFunctionAbstract::getParameters
  • ReflectionFunctionAbstract::getShortName ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 指定された関数の戻り値の型を取得する

ReflectionFunctionAbstract::getReturnType

(PHP 7, PHP 8)

ReflectionFunctionAbstract::getReturnType — 指定された関数の戻り値の型を取得する

説明

public ReflectionFunctionAbstract::getReturnType(): ?ReflectionType

指定されたリフレクションされた関数の戻り値の型を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

戻り値の型が指定されていた場合は ReflectionType オブジェクトを返します。 指定されていない場合は null を返します。

例

例1 ReflectionFunctionAbstract::getReturnType() の例

<?php

function to_int($param) : int {
return (int) $param;
}

$reflection1 = new ReflectionFunction('to_int');
echo $reflection1->getReturnType();

上の例の出力は以下となります。

int

例2 ビルトイン関数で使う場合

<?php

$reflection2 = new ReflectionFunction('array_merge');

var_dump($reflection2->getReturnType());

上の例の出力は以下となります。

null

こうなるのは、たくさんの内部関数が引数や戻り値で型を指定していないからです。 よって、このメソッドをビルトイン関数に使うのを避けるのが最適です。

参考

  • ReflectionFunctionAbstract::hasReturnType() - 関数が戻り値の型を指定しているかを調べる
  • ReflectionType::__toString() - 文字列に変換する

User Contributed Notes

There are no user contributed notes for this page.


関数の短い名前を取得する

  • ≪ ReflectionFunctionAbstract::getReturnType
  • ReflectionFunctionAbstract::getStartLine ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 関数の短い名前を取得する

ReflectionFunctionAbstract::getShortName

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getShortName — 関数の短い名前を取得する

説明

public ReflectionFunctionAbstract::getShortName(): string

関数の短い名前 (名前空間部分を除いた名前) を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

関数の短い名前を返します。

参考

  • ReflectionFunctionAbstract::getNamespaceName() - 名前空間名を取得する
  • 名前空間

User Contributed Notes

There are no user contributed notes for this page.


開始行番号を取得する

  • ≪ ReflectionFunctionAbstract::getShortName
  • ReflectionFunctionAbstract::getStaticVariables ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 開始行番号を取得する

ReflectionFunctionAbstract::getStartLine

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getStartLine — 開始行番号を取得する

説明

public ReflectionFunctionAbstract::getStartLine(): int|false

関数の開始行番号を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

開始行番号を返します。 開始行が不明な場合は、false を返します。

参考

  • ReflectionFunctionAbstract::getEndLine() - 終了行番号を取得する

User Contributed Notes

There are no user contributed notes for this page.


static変数を取得する

  • ≪ ReflectionFunctionAbstract::getStartLine
  • ReflectionFunctionAbstract::getTentativeReturnType ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • static変数を取得する

ReflectionFunctionAbstract::getStaticVariables

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::getStaticVariables — static変数を取得する

説明

public ReflectionFunctionAbstract::getStaticVariables(): array

static変数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

static変数の配列を返します。

参考

  • ReflectionFunctionAbstract::getParameters() - パラメータを取得する

User Contributed Notes

Martiros Aghajanyan 11-Oct-2014 01:27
<?php

function test()
{
    static $a = 0, $b = 15;
    $a++;
    $b++;
    return $a;
}

$rf = new ReflectionFunction('test');

// result - Array ( [a] => 0 [b] => 15 )
print_r( $rf->getStaticVariables() );

//call test function and print again static variables
test();

// result - Array ( [a] => 1 [b] => 16 )
print_r( $rf->getStaticVariables() );

?>


関数に関連付けられた仮の戻り値の型を返す

  • ≪ ReflectionFunctionAbstract::getStaticVariables
  • ReflectionFunctionAbstract::hasReturnType ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 関数に関連付けられた仮の戻り値の型を返す

ReflectionFunctionAbstract::getTentativeReturnType

(PHP 8 >= 8.1.0)

ReflectionFunctionAbstract::getTentativeReturnType — 関数に関連付けられた仮の戻り値の型を返す

説明

public ReflectionFunctionAbstract::getTentativeReturnType(): ?ReflectionType

関数に関連付けられた仮の戻り値の型を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

仮の戻り値の型が指定されている場合は ReflectionType オブジェクトを返します。 そうでない場合は、null を返します。

例

例1 ReflectionFunctionAbstract::getTentativeReturnType() の例

<?php

$method = new ReflectionMethod(\ArrayAccess::class, 'offsetGet');
var_dump($method->getTentativeReturnType());

上の例の出力は、 たとえば以下のようになります。

object(ReflectionNamedType)#2 (0) {
}

参考

  • ReflectionFunctionAbstract::getReturnType() - 指定された関数の戻り値の型を取得する
  • ReflectionFunctionAbstract::hasTentativeReturnType() - 戻り値の型を仮で宣言しているかを返す
  • 内部クラスと戻り値の型の互換性

User Contributed Notes

There are no user contributed notes for this page.


関数が戻り値の型を指定しているかを調べる

  • ≪ ReflectionFunctionAbstract::getTentativeReturnType
  • ReflectionFunctionAbstract::hasTentativeReturnType ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 関数が戻り値の型を指定しているかを調べる

ReflectionFunctionAbstract::hasReturnType

(PHP 7, PHP 8)

ReflectionFunctionAbstract::hasReturnType — 関数が戻り値の型を指定しているかを調べる

説明

public ReflectionFunctionAbstract::hasReturnType(): bool

リフレクションされた関数が、戻り値の型を指定しているかを調べます

パラメータ

この関数にはパラメータはありません。

戻り値

関数が戻り値の型を指定しているなら true を返します。 指定していないなら false を返します。

例

例1 ReflectionFunctionAbstract::hasReturnType() の例

<?php

function to_int($param) : int {
return (int) $param;
}

$reflection1 = new ReflectionFunction('to_int');
var_dump($reflection1->hasReturnType());

上の例の出力は以下となります。

bool(true)

例2 ビルトイン関数で使う

<?php

$reflection2 = new ReflectionFunction('array_merge');

var_dump($reflection2->hasReturnType());

上の例の出力は以下となります。

bool(false)

こうなるのは、たくさんの内部関数が引数や戻り値に型を指定していないからです。 よって、このメソッドはビルトイン関数に使わないのが最適です。

参考

  • ReflectionFunctionAbstract::getReturnType() - 指定された関数の戻り値の型を取得する

User Contributed Notes

There are no user contributed notes for this page.


戻り値の型を仮で宣言しているかを返す

  • ≪ ReflectionFunctionAbstract::hasReturnType
  • ReflectionFunctionAbstract::inNamespace ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 戻り値の型を仮で宣言しているかを返す

ReflectionFunctionAbstract::hasTentativeReturnType

(PHP 8 >= 8.1.0)

ReflectionFunctionAbstract::hasTentativeReturnType — 戻り値の型を仮で宣言しているかを返す

説明

public ReflectionFunctionAbstract::hasTentativeReturnType(): bool

関数が戻り値の型を仮で(とりあえず)宣言しているかどうかを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

関数が仮の(とりあえず)戻り値の型を持つ場合、true を返します。 そうでない場合、false を返します。

例

例1 ReflectionFunctionAbstract::hasTentativeReturnType() の例

<?php

$method = new ReflectionMethod(\ArrayAccess::class, 'offsetGet');
var_dump($method->hasTentativeReturnType());

上の例の出力は以下となります。

bool(true)

参考

  • ReflectionFunctionAbstract::getTentativeReturnType() - 関数に関連付けられた仮の戻り値の型を返す
  • ReflectionFunctionAbstract::hasReturnType() - 関数が戻り値の型を指定しているかを調べる
  • 内部クラスと戻り値の型の互換性

User Contributed Notes

There are no user contributed notes for this page.


関数が名前空間内にあるかどうかを調べる

  • ≪ ReflectionFunctionAbstract::hasTentativeReturnType
  • ReflectionFunctionAbstract::isClosure ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 関数が名前空間内にあるかどうかを調べる

ReflectionFunctionAbstract::inNamespace

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::inNamespace — 関数が名前空間内にあるかどうかを調べる

説明

public ReflectionFunctionAbstract::inNamespace(): bool

関数が名前空間内で定義されているかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

名前空間内にある場合に true、それ以外の場合に false を返します。

参考

  • ReflectionFunctionAbstract::getNamespaceName() - 名前空間名を取得する
  • 名前空間

User Contributed Notes

There are no user contributed notes for this page.


クロージャであるかどうかを調べる

  • ≪ ReflectionFunctionAbstract::inNamespace
  • ReflectionFunctionAbstract::isDeprecated ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • クロージャであるかどうかを調べる

ReflectionFunctionAbstract::isClosure

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::isClosure — クロージャであるかどうかを調べる

説明

public ReflectionFunctionAbstract::isClosure(): bool

この関数が Closure であるかどうかを調べます。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

この関数が Closure である場合に true、それ以外の場合に false を返します。

例

例1 ReflectionFunctionAbstract::isClosure() の例

<?php
// クロージャではない
$function1 = 'str_replace';
$reflection1 = new ReflectionFunction($function1);
var_dump($reflection1->isClosure());

// クロージャである
$function2 = function () {};
$reflection2 = new ReflectionFunction($function2);
var_dump($reflection2->isClosure());
?>

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • ReflectionFunctionAbstract::isGenerator() - この関数がジェネレータかどうかを返す

User Contributed Notes

There are no user contributed notes for this page.


非推奨であるかどうかを調べる

  • ≪ ReflectionFunctionAbstract::isClosure
  • ReflectionFunctionAbstract::isGenerator ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 非推奨であるかどうかを調べる

ReflectionFunctionAbstract::isDeprecated

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::isDeprecated — 非推奨であるかどうかを調べる

説明

public ReflectionFunctionAbstract::isDeprecated(): bool

この関数が非推奨であるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

非推奨である場合に true、それ以外の場合に false を返します。

例

例1 ReflectionFunctionAbstract::isDeprecated() の例

<?php
$rf = new ReflectionFunction('ereg');
var_dump($rf->isDeprecated());
?>

上の例の出力は以下となります。

bool(true)

参考

  • ReflectionFunctionAbstract::getDocComment() - ドキュメントコメントを取得する

User Contributed Notes

There are no user contributed notes for this page.


この関数がジェネレータかどうかを返す

  • ≪ ReflectionFunctionAbstract::isDeprecated
  • ReflectionFunctionAbstract::isInternal ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • この関数がジェネレータかどうかを返す

ReflectionFunctionAbstract::isGenerator

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::isGenerator — この関数がジェネレータかどうかを返す

説明

public ReflectionFunctionAbstract::isGenerator(): bool

パラメータ

この関数にはパラメータはありません。

戻り値

この関数がジェネレータである場合に true、そうでない場合に false を返します。 処理に失敗した場合に null を返します。

User Contributed Notes

There are no user contributed notes for this page.


内部関数かどうかを調べる

  • ≪ ReflectionFunctionAbstract::isGenerator
  • ReflectionFunctionAbstract::isStatic ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 内部関数かどうかを調べる

ReflectionFunctionAbstract::isInternal

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::isInternal — 内部関数かどうかを調べる

説明

public ReflectionFunctionAbstract::isInternal(): bool

この関数が内部関数なのかユーザー定義関数なのかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

内部関数である場合に true、それ以外の場合に false を返します。

参考

  • ReflectionFunctionAbstract::isUserDefined() - ユーザー定義関数であるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


関数が static であるかどうかを調べる

  • ≪ ReflectionFunctionAbstract::isInternal
  • ReflectionFunctionAbstract::isUserDefined ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 関数が static であるかどうかを調べる

ReflectionFunctionAbstract::isStatic

(PHP 5, PHP 7, PHP 8)

ReflectionFunctionAbstract::isStatic — 関数が static であるかどうかを調べる

説明

public ReflectionFunctionAbstract::isStatic(): bool

関数が static であるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

関数が static である場合に true、それ以外の場合に false を返します。

変更履歴

バージョン | 説明
8.1.0 | このメソッドは親クラスに移動しました。 これより前のバージョンでは、このメソッドは ReflectionMethod で定義されていました。

参考

  • ReflectionMethod::isFinal() - final メソッドであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


ユーザー定義関数であるかどうかを調べる

  • ≪ ReflectionFunctionAbstract::isStatic
  • ReflectionFunctionAbstract::isVariadic ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • ユーザー定義関数であるかどうかを調べる

ReflectionFunctionAbstract::isUserDefined

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::isUserDefined — ユーザー定義関数であるかどうかを調べる

説明

public ReflectionFunctionAbstract::isUserDefined(): bool

この関数がユーザー定義関数なのか内部関数なのかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

ユーザー定義関数である場合に true、それ以外の場合に false を返します。

参考

  • ReflectionFunctionAbstract::isInternal() - 内部関数かどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


この関数の引数が可変長かを調べる

  • ≪ ReflectionFunctionAbstract::isUserDefined
  • ReflectionFunctionAbstract::returnsReference ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • この関数の引数が可変長かを調べる

ReflectionFunctionAbstract::isVariadic

(PHP 5 >= 5.6.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::isVariadic — この関数の引数が可変長かを調べる

説明

public ReflectionFunctionAbstract::isVariadic(): bool

この関数の 引数が可変長 かを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

この関数の引数が可変長なら true を返します。そうでないなら false を返します。

User Contributed Notes

There are no user contributed notes for this page.


参照返しかどうかを調べる

  • ≪ ReflectionFunctionAbstract::isVariadic
  • ReflectionFunctionAbstract::__toString ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • 参照返しかどうかを調べる

ReflectionFunctionAbstract::returnsReference

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::returnsReference — 参照返しかどうかを調べる

説明

public ReflectionFunctionAbstract::returnsReference(): bool

関数が参照を返すかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

参照返しである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionFunctionAbstract::isClosure() - クロージャであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


ReflectionFunctionAbstract を表現する文字列を返す

  • ≪ ReflectionFunctionAbstract::returnsReference
  • ReflectionMethod ≫
  • PHP Manual
  • ReflectionFunctionAbstract
  • ReflectionFunctionAbstract を表現する文字列を返す

ReflectionFunctionAbstract::__toString

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

ReflectionFunctionAbstract::__toString — ReflectionFunctionAbstract を表現する文字列を返す

説明

abstract public ReflectionFunctionAbstract::__toString(): void

関数を表現した、人間が読める説明を取得します。 パラメータと戻り値が含まれます。

パラメータ

この関数にはパラメータはありません。

戻り値

文字列を返します。

参考

  • ReflectionFunction::__toString() - ReflectionFunction を表現する文字列を返す
  • ReflectionMethod::__toString() - ReflectionMethod オブジェクトの文字列表現を返す
  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionMethod クラス

(PHP 5, PHP 7, PHP 8)

はじめに

ReflectionMethod クラスは メソッドについての情報を報告します。

クラス概要

class ReflectionMethod extends ReflectionFunctionAbstract {
/* 定数 */
public const int IS_STATIC;
public const int IS_PUBLIC;
public const int IS_PROTECTED;
public const int IS_PRIVATE;
public const int IS_ABSTRACT;
public const int IS_FINAL;
/* プロパティ */
public string $class;
/* 継承したプロパティ */
public string $name;
/* メソッド */
public __construct(object|string $objectOrMethod, string $method)
public __construct(string $classMethod)
public static createFromMethodName(string $method): static
public static export(string $class, string $name, bool $return = false): string
public getClosure(?object $object = null): Closure
public getDeclaringClass(): ReflectionClass
public getModifiers(): int
public getPrototype(): ReflectionMethod
public hasPrototype(): bool
public invoke(?object $object, mixed ...$args): mixed
public invokeArgs(?object $object, array $args): mixed
public isAbstract(): bool
public isConstructor(): bool
public isDestructor(): bool
public isFinal(): bool
public isPrivate(): bool
public isProtected(): bool
public isPublic(): bool
public setAccessible(bool $accessible): void
public __toString(): string
/* 継承したメソッド */
private ReflectionFunctionAbstract::__clone(): void
public ReflectionFunctionAbstract::getAttributes(?string $name = null, int $flags = 0): array
public ReflectionFunctionAbstract::getClosureScopeClass(): ?ReflectionClass
public ReflectionFunctionAbstract::getClosureThis(): ?object
public ReflectionFunctionAbstract::getClosureUsedVariables(): array
public ReflectionFunctionAbstract::getDocComment(): string|false
public ReflectionFunctionAbstract::getEndLine(): int|false
public ReflectionFunctionAbstract::getExtension(): ?ReflectionExtension
public ReflectionFunctionAbstract::getExtensionName(): string|false
public ReflectionFunctionAbstract::getFileName(): string|false
public ReflectionFunctionAbstract::getName(): string
public ReflectionFunctionAbstract::getNamespaceName(): string
public ReflectionFunctionAbstract::getNumberOfParameters(): int
public ReflectionFunctionAbstract::getNumberOfRequiredParameters(): int
public ReflectionFunctionAbstract::getParameters(): array
public ReflectionFunctionAbstract::getReturnType(): ?ReflectionType
public ReflectionFunctionAbstract::getShortName(): string
public ReflectionFunctionAbstract::getStartLine(): int|false
public ReflectionFunctionAbstract::getStaticVariables(): array
public ReflectionFunctionAbstract::getTentativeReturnType(): ?ReflectionType
public ReflectionFunctionAbstract::hasReturnType(): bool
public ReflectionFunctionAbstract::hasTentativeReturnType(): bool
public ReflectionFunctionAbstract::inNamespace(): bool
public ReflectionFunctionAbstract::isClosure(): bool
public ReflectionFunctionAbstract::isDeprecated(): bool
public ReflectionFunctionAbstract::isGenerator(): bool
public ReflectionFunctionAbstract::isInternal(): bool
public ReflectionFunctionAbstract::isStatic(): bool
public ReflectionFunctionAbstract::isUserDefined(): bool
public ReflectionFunctionAbstract::isVariadic(): bool
public ReflectionFunctionAbstract::returnsReference(): bool
abstract public ReflectionFunctionAbstract::__toString(): void
}

プロパティ

name

メソッド名

class

クラス名

定義済み定数

ReflectionMethod の修飾子

ReflectionMethod::IS_STATIC

メソッドが static であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 1 でした。

ReflectionMethod::IS_PUBLIC

メソッドが public であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 256 でした。

ReflectionMethod::IS_PROTECTED

メソッドが protected であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 512 でした。

ReflectionMethod::IS_PRIVATE

メソッドが private であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 1024 でした。

ReflectionMethod::IS_ABSTRACT

メソッドが abstract であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 2 でした。

ReflectionMethod::IS_FINAL

メソッドが final であることを示します。 PHP 7.4.0 より前のバージョンでは、この値は 4 でした。

注意:

これらの定数の値は、PHP のバージョンが異なると変更される可能性があります。 これらの値を直接用いず、常に定数を使うことを推奨します。

変更履歴

バージョン | 説明
8.0.0 | ReflectionMethod::export() は、削除されました。

目次

  • ReflectionMethod::__construct — ReflectionMethod を作成する
  • ReflectionMethod::createFromMethodName — ReflectionMethod を作成する
  • ReflectionMethod::export — メソッドをエクスポートする
  • ReflectionMethod::getClosure — このメソッドに動的に作成されたクロージャを返す
  • ReflectionMethod::getDeclaringClass — メソッドが宣言されているクラスを取得する
  • ReflectionMethod::getModifiers — メソッドの修飾子を取得する
  • ReflectionMethod::getPrototype — メソッドのプロトタイプを (存在すれば) 取得する
  • ReflectionMethod::hasPrototype — メソッドがプロトタイプを持つかを調べる
  • ReflectionMethod::invoke — 実行する
  • ReflectionMethod::invokeArgs — 実行する
  • ReflectionMethod::isAbstract — 抽象メソッドであるかどうかを調べる
  • ReflectionMethod::isConstructor — コンストラクタであるかどうかを調べる
  • ReflectionMethod::isDestructor — デストラクタであるかどうかを調べる
  • ReflectionMethod::isFinal — final メソッドであるかどうかを調べる
  • ReflectionMethod::isPrivate — private メソッドであるかどうかを調べる
  • ReflectionMethod::isProtected — protected メソッドであるかどうかを調べる
  • ReflectionMethod::isPublic — public メソッドであるかどうかを調べる
  • ReflectionMethod::setAccessible — メソッドのアクセス範囲を設定する
  • ReflectionMethod::__toString — ReflectionMethod オブジェクトの文字列表現を返す

User Contributed Notes

Anonymous 02-Nov-2020 10:15
We can make a "Automatic dependenci injector" in classes when her constructors depends other classes (with type hint).

<?php

class Dependence1 {
    function foo() {
        echo "foo";
    }
}

class Dependence2 {
    function foo2() {
        echo "foo2";
    }
}

final class myClass
{
    private $dep1;
    private $dep2;

    public function __construct(
        Dependence1 $dependence1,
        Dependence2 $dependence2
    )
    {
        $this->dep1 = $dependence1;
        $this->dep2 = $dependence2;
    }

}

// Automatic dependence injection (CLASSES)

$constructor = new ReflectionMethod(myClass::class, '__construct');
$parameters = $constructor->getParameters();

$dependences = [];
foreach ($parameters as $parameter) {
    $dependenceClass = (string) $parameter->getType();
    $dependences[] = new $dependenceClass();
}

$instance = new myClass(...$dependences);
var_dump($instance);

?>

Results in:

object(myClass)#6 (2) {
  ["dep1":"myClass":private]=>
  object(Dependence1)#4 (0) {
  }
  ["dep2":"myClass":private]=>
  object(Dependence2)#5 (0) {
  }
}
webseiten dot designer at googlemail dot com 02-Apr-2011 11:53
Note that the public member $class contains the name of the class in which the method has been defined:

<?php
class A {public function __construct() {}}
class B extends A {}

$method = new ReflectionMethod('B', '__construct');
echo $method->class; // prints 'A'
?>
no dot prob at gmx dot net 02-Jun-2006 01:09
I have written a function which returns the value of a given DocComment tag.

Full example:

<?php

header('Content-Type: text/plain');

class Example
{
    /**
     * This is my DocComment!
     *
     * @DocTag: prints Hello World!
     */
    public function myMethod()
    {
        echo 'Hello World!';
    }
}

function getDocComment($str, $tag = '')
{
    if (empty($tag))
    {
        return $str;
    }

    $matches = array();
    preg_match("/".$tag.":(.*)(\\r\\n|\\r|\\n)/U", $str, $matches);

    if (isset($matches[1]))
    {
        return trim($matches[1]);
    }

    return '';
}

$method = new ReflectionMethod('Example', 'myMethod');

// will return Hello World!
echo getDocComment($method->getDocComment(), '@DocTag');

?>

Maybe you can add this functionality to the getDocComment methods of the reflection classes.


ReflectionMethod を作成する

  • ≪ ReflectionMethod
  • ReflectionMethod::createFromMethodName ≫
  • PHP Manual
  • ReflectionMethod
  • ReflectionMethod を作成する

ReflectionMethod::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::__construct — ReflectionMethod を作成する

説明

public ReflectionMethod::__construct(object|string $objectOrMethod, string $method)

代替のシグネチャ (名前付き引数をサポートしていません):

public ReflectionMethod::__construct(string $classMethod)

新しい ReflectionMethod を作成します。

パラメータ

objectOrMethod

メソッドを含むクラスの名前あるいはオブジェクト (クラスのインスタンス)。

method

メソッドの名前。

classMethod

クラス名とメソッド名を :: で区切ったもの。

エラー / 例外

指定したメソッドが存在しない場合に ReflectionException が発生します。

例

例1 ReflectionMethod::__construct() の例

<?php
class Counter
{
private static $c = 0;

/**
* カウンタをインクリメントする
*
* @final
* @static
* @access public
* @return int
*/
final public static function increment()
{
return ++self::$c;
}
}

// ReflectionMethod のインスタンスを作成します
$method = new ReflectionMethod('Counter', 'increment');

// 基本情報を表示します
printf(
"===> The %s%s%s%s%s%s%s method '%s' (which is %s)\n" .
" declared in %s\n" .
" lines %d to %d\n" .
" having the modifiers %d[%s]\n",
$method->isInternal() ? 'internal' : 'user-defined',
$method->isAbstract() ? ' abstract' : '',
$method->isFinal() ? ' final' : '',
$method->isPublic() ? ' public' : '',
$method->isPrivate() ? ' private' : '',
$method->isProtected() ? ' protected' : '',
$method->isStatic() ? ' static' : '',
$method->getName(),
$method->isConstructor() ? 'the constructor' : 'a regular method',
$method->getFileName(),
$method->getStartLine(),
$method->getEndline(),
$method->getModifiers(),
implode(' ', Reflection::getModifierNames($method->getModifiers()))
);

// ドキュメントコメントを表示します
printf("---> Documentation:\n %s\n", var_export($method->getDocComment(), true));

// static 変数があれば表示します
if ($statics= $method->getStaticVariables()) {
printf("---> Static variables: %s\n", var_export($statics, true));
}

// メソッドを実行します
printf("---> Invocation results in: ");
var_dump($method->invoke(NULL));
?>

上の例の出力は、 たとえば以下のようになります。

===> The user-defined final public static method 'increment' (which is a regular method)
     declared in /Users/philip/cvs/phpdoc/test.php
     lines 14 to 17
     having the modifiers 261[final public static]
---> Documentation:
 '/**
     * カウンタをインクリメントする
     *
     * @final
     * @static
     * @access  public
     * @return  int
     */'
---> Invocation results in: int(1)

参考

  • ReflectionMethod::export() - メソッドをエクスポートする
  • コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


ReflectionMethod を作成する

  • ≪ ReflectionMethod::__construct
  • ReflectionMethod::export ≫
  • PHP Manual
  • ReflectionMethod
  • ReflectionMethod を作成する

ReflectionMethod::createFromMethodName

(PHP 8 >= 8.3.0)

ReflectionMethod::createFromMethodName — ReflectionMethod を作成する

説明

public static ReflectionMethod::createFromMethodName(string $method): static

新しい ReflectionMethod を作成します。

パラメータ

method

:: で区切られたクラス名とメソッド名。

戻り値

成功した場合、新しい ReflectionMethod を返します。

エラー / 例外

指定したメソッドが存在しない場合は、 ReflectionException がスローされます。

例

例1 ReflectionMethod::createFromMethodName() の例

<?php

class Foo {
public function bar() {

}
}

$methodInfo = ReflectionMethod::createFromMethodName("Foo::bar");
var_dump($methodInfo);
?>

上の例の出力は以下となります。

object(ReflectionMethod)#1 (2) {
  ["name"]=>
  string(3) "bar"
  ["class"]=>
  string(3) "Foo"
}

User Contributed Notes

There are no user contributed notes for this page.


メソッドをエクスポートする

  • ≪ ReflectionMethod::createFromMethodName
  • ReflectionMethod::getClosure ≫
  • PHP Manual
  • ReflectionMethod
  • メソッドをエクスポートする

ReflectionMethod::export

(PHP 5, PHP 7)

ReflectionMethod::export — メソッドをエクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionMethod::export(string $class, string $name, bool $return = false): string

ReflectionMethod をエクスポートします。

パラメータ

class

クラス名。

name

メソッド名。

return

true に設定すると、エクスポートを発行するのではなく返します。 false (デフォルト) の場合はその逆です。

戻り値

return パラメータを true に設定すると、エクスポートを文字列で返します。それ以外の場合は null を返します。

参考

  • ReflectionMethod::__construct() - ReflectionMethod を作成する
  • ReflectionMethod::__toString() - ReflectionMethod オブジェクトの文字列表現を返す

User Contributed Notes

There are no user contributed notes for this page.


このメソッドに動的に作成されたクロージャを返す

  • ≪ ReflectionMethod::export
  • ReflectionMethod::getDeclaringClass ≫
  • PHP Manual
  • ReflectionMethod
  • このメソッドに動的に作成されたクロージャを返す

ReflectionMethod::getClosure

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionMethod::getClosure — このメソッドに動的に作成されたクロージャを返す

説明

public ReflectionMethod::getClosure(?object $object = null): Closure

メソッドをコールするクロージャを作成します。

パラメータ

object

staticメソッドの場合は不要、その他のメソッドの場合は必須となります。

戻り値

新しく作成した Closure を返します。

エラー / 例外

object が null なのに、 メソッドが static ではない場合、 ValueError がスローされます。

object が、 このメソッドが宣言されたクラスのインスタンスでない場合、 ReflectionException がスローされます。

変更履歴

バージョン | 説明
8.0.0 | object は、nullable になりました。

参考

  • 第一級callableを生成する記法

User Contributed Notes

okto 14-Aug-2016 10:45
Use method from another class context.

<?php

class A {
    private $var = 'class A';

    public function getVar() {
        return $this->var;
    }

    public function getCl() {
        return function () {
            $this->getVar();
        };
    }
}

class B {
    private $var = 'class B';
}

$a = new A();
$b = new B();

print $a->getVar() . PHP_EOL;

$reflection = new ReflectionClass(get_class($a));
$closure    = $reflection->getMethod('getVar')->getClosure($a);
$get_var_b  = $closure->bindTo($b, $b);

print $get_var_b() . PHP_EOL;

// Output:
// class A
// class B
Denis Doronin 18-Jan-2013 08:05
You can call private methods with getClosure():

<?php

function call_private_method($object, $method, $args = array()) {
    $reflection = new ReflectionClass(get_class($object));
    $closure = $reflection->getMethod($method)->getClosure($object);
    return call_user_func_array($closure, $args);
}

class Example {

    private $x = 1, $y = 10;

    private function sum() {
        print $this->x + $this->y;
    }

}

call_private_method(new Example(), 'sum');

?>

Output is 11.


メソッドが宣言されているクラスを取得する

  • ≪ ReflectionMethod::getClosure
  • ReflectionMethod::getModifiers ≫
  • PHP Manual
  • ReflectionMethod
  • メソッドが宣言されているクラスを取得する

ReflectionMethod::getDeclaringClass

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::getDeclaringClass — メソッドが宣言されているクラスを取得する

説明

public ReflectionMethod::getDeclaringClass(): ReflectionClass

そのメソッドが宣言されているクラスを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

そのメソッドが属するクラスをあらわす ReflectionClass オブジェクトを返します。

例

例1 ReflectionMethod::getDeclaringClass() の例

<?php
class HelloWorld {

protected function sayHelloTo($name) {
return 'Hello ' . $name;
}

}

$reflectionMethod = new ReflectionMethod(new HelloWorld(), 'sayHelloTo');
var_dump($reflectionMethod->getDeclaringClass());
?>

上の例の出力は以下となります。

object(ReflectionClass)#2 (1) {
  ["name"]=>
  string(10) "HelloWorld"
}

参考

  • ReflectionMethod::isAbstract() - 抽象メソッドであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


メソッドの修飾子を取得する

  • ≪ ReflectionMethod::getDeclaringClass
  • ReflectionMethod::getPrototype ≫
  • PHP Manual
  • ReflectionMethod
  • メソッドの修飾子を取得する

ReflectionMethod::getModifiers

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::getModifiers — メソッドの修飾子を取得する

説明

public ReflectionMethod::getModifiers(): int

このメソッドのアクセス修飾子のビットフィールドを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

修飾子をあらわす数値を返します。修飾子の一覧は以下のとおりです。 これらの修飾子の実際の意味については 定義済みの定数 に説明があります。

例

例1 ReflectionMethod::getModifiers() の例

<?php
class Testing
{
final public static function foo()
{
return;
}
public function bar()
{
return;
}
}

$foo = new ReflectionMethod('Testing', 'foo');

echo "Modifiers for method foo():\n";
echo $foo->getModifiers() . "\n";
echo implode(' ', Reflection::getModifierNames($foo->getModifiers())) . "\n";

$bar = new ReflectionMethod('Testing', 'bar');

echo "Modifiers for method bar():\n";
echo $bar->getModifiers() . "\n";
echo implode(' ', Reflection::getModifierNames($bar->getModifiers()));
?>

上の例の出力は、 たとえば以下のようになります。

Modifiers for method foo():
49
final public static
Modifiers for method bar():
1
public

参考

  • Reflection::getModifierNames() - 修飾子の名前を取得する

User Contributed Notes

There are no user contributed notes for this page.


メソッドのプロトタイプを (存在すれば) 取得する

  • ≪ ReflectionMethod::getModifiers
  • ReflectionMethod::hasPrototype ≫
  • PHP Manual
  • ReflectionMethod
  • メソッドのプロトタイプを (存在すれば) 取得する

ReflectionMethod::getPrototype

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionMethod::getPrototype — メソッドのプロトタイプを (存在すれば) 取得する

説明

public ReflectionMethod::getPrototype(): ReflectionMethod

メソッドのプロトタイプを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

メソッドのプロトタイプの ReflectionMethod オブジェクトを返します。

エラー / 例外

メソッドがプロトタイプを持たない場合に ReflectionException をスローします。

例

例1 ReflectionMethod::getPrototype() の例

<?php
class Hello {

public function sayHelloTo($name) {
return 'Hello ' . $name;
}

}
class HelloWorld extends Hello {

public function sayHelloTo($name) {
return 'Hello world: ' . $name;
}

}

$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
var_dump($reflectionMethod->getPrototype());
?>

上の例の出力は以下となります。

object(ReflectionMethod)#2 (2) {
  ["name"]=>
  string(10) "sayHelloTo"
  ["class"]=>
  string(5) "Hello"
}

参考

  • ReflectionMethod::getModifiers() - メソッドの修飾子を取得する
  • ReflectionMethod::hasPrototype() - メソッドがプロトタイプを持つかを調べる

User Contributed Notes

There are no user contributed notes for this page.


メソッドがプロトタイプを持つかを調べる

  • ≪ ReflectionMethod::getPrototype
  • ReflectionMethod::invoke ≫
  • PHP Manual
  • ReflectionMethod
  • メソッドがプロトタイプを持つかを調べる

ReflectionMethod::hasPrototype

(PHP 8 >= 8.2.0)

ReflectionMethod::hasPrototype — メソッドがプロトタイプを持つかを調べる

説明

public ReflectionMethod::hasPrototype(): bool

メソッドがプロトタイプを持つかを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

メソッドがプロトタイプを持つ場合、true を返します。そうでない場合、false を返します。

例

例1 ReflectionMethod::hasPrototype() の例

<?php

class Hello
{
public function sayHelloTo($name)
{
return 'Hello '.$name;
}
}

class HelloWorld extends Hello
{
public function sayHelloTo($name)
{
return 'Hello world: '.$name;
}
}
$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
var_dump($reflectionMethod->hasPrototype());
?>

上の例の出力は以下となります。

bool(true)

参考

  • ReflectionMethod::getPrototype() - メソッドのプロトタイプを (存在すれば) 取得する

User Contributed Notes

There are no user contributed notes for this page.


実行する

  • ≪ ReflectionMethod::hasPrototype
  • ReflectionMethod::invokeArgs ≫
  • PHP Manual
  • ReflectionMethod
  • 実行する

ReflectionMethod::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::invoke — 実行する

説明

public ReflectionMethod::invoke(?object $object, mixed ...$args): mixed

メソッドを実行します。

パラメータ

object

メソッドを実行するオブジェクト。staticメソッドを実行する場合は、このパラメータには null を渡すことができます。

args

メソッドに渡すパラメータ。可変長のパラメータを渡すことができます。

戻り値

メソッドの結果を返します。

エラー / 例外

メソッドが宣言されているクラスのインスタンス以外を object パラメータで指定すると ReflectionException が発生します。

メソッドの実行に失敗すると ReflectionException が発生します。

例

例1 ReflectionMethod::invoke() の例

<?php
class HelloWorld {

public function sayHelloTo($name) {
return 'Hello ' . $name;
}

}

$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invoke(new HelloWorld(), 'Mike');
?>

上の例の出力は以下となります。

Hello Mike

注意

注意:

ReflectionMethod::invoke() は、 リファレンスが引数に期待されている場合は使えません。 その場合は、(引数リストにリファレンスを渡して) ReflectionMethod::invokeArgs() を代わりに使うべきです。

参考

  • ReflectionMethod::invokeArgs() - 実行する
  • __invoke()
  • call_user_func() - 最初の引数で指定したコールバック関数をコールする

User Contributed Notes

dimitriy at remerov dot ru 06-Jun-2012 01:19
This method can be used to call a overwritten public method of a parent class on an child instance
The following code will output "A":

<?php

class A
{
    public function foo()
    {
        return __CLASS__;
    }
}

class B extends A
{
    public function foo()
    {
        return __CLASS__;
    }
}

$b = new B();

$reflection = new ReflectionObject($b);

$parentReflection = $reflection->getParentClass();

$parentFooReflection = $parentReflection->getMethod('foo');

$data = $parentFooReflection->invoke($b);

echo $data;

?>
templargrey at wp dot pl 21-Jul-2011 01:12
Seems that Reflection doesn`t resolve late static bindings - var_dump will show "string 'a' (length=1)".

<?php
class ParentClass { protected static $a = 'a'; static public function init() { return static::$a; } }
class ChildClass extends ParentClass { protected static $a = 'b'; }

$r = new ReflectionClass('ChildClass');
var_dump($r->getMethod('init')->invoke(null));
?>
rojaro at gmail dot com 10-Feb-2011 01:56
Note: If you want to invoke protected or private methods, you'll first have to make them accessible using the setAccessible() method (see http://php.net/reflectionmethod.setaccessible ).


実行する

  • ≪ ReflectionMethod::invoke
  • ReflectionMethod::isAbstract ≫
  • PHP Manual
  • ReflectionMethod
  • 実行する

ReflectionMethod::invokeArgs

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionMethod::invokeArgs — 実行する

説明

public ReflectionMethod::invokeArgs(?object $object, array $args): mixed

リフレクション対象のメソッドを実行し、その引数を配列として渡します。

パラメータ

object

メソッドを実行するオブジェクト。staticメソッドを実行する場合は、このパラメータには null を渡すことができます。

args

メソッドに渡すパラメータを配列で指定します。

戻り値

メソッドの結果を返します。

エラー / 例外

メソッドが宣言されているクラスのインスタンス以外を object パラメータで指定すると ReflectionException が発生します。

メソッドの実行に失敗すると ReflectionException が発生します。

変更履歴

バージョン | 説明
8.0.0 | args のキーは、 静かに無視されるのではなく、パラメータの名前として解釈されるようになりました。

例

例1 ReflectionMethod::invokeArgs() の例

<?php
class HelloWorld {

public function sayHelloTo($name) {
return 'Hello ' . $name;
}

}

$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invokeArgs(new HelloWorld(), array('Mike'));
?>

上の例の出力は以下となります。

Hello Mike

注意

注意:

関数の引数の中にリファレンス渡しを要するものがある場合は、 渡す引数の中でもリファレンスにしておく必要があります。

参考

  • ReflectionMethod::invoke() - 実行する
  • __invoke()
  • call_user_func_array() - パラメータの配列を指定してコールバック関数をコールする

User Contributed Notes

CodeCoutureXX at gmail dot com 03-Sep-2015 09:12
If you need to call ReflectionMethod::invokeArgs() on a static function you can pass NULL in for the $object parameter.

Example:

<?php
     class myClass {
          public static myStaticFunc($a, $b) {
               return $a + $b;
          }
     }

     $ref = new ReflectionMethod('myClass', 'myStaticFunc');
     echo $ref->invokeArgs(NULL, [12, 7]);
?>

produces the following output:

19
cweiske at cweiske dot de 25-Mar-2011 07:34
Passing arguments by reference works:
<?php $rm->invokeArgs($object, array(&$foo, $bar)); ?>
agent_harris at secure-mail dot biz 13-Feb-2011 07:12
There is a simple workaround for the reference passing problem:
Since the reflection api has to handle all parameters in a generic way it has no chance to guess if you wish to pass data per value or reference.

But it seems that you can also decide to pass a reference from where you call the function or method (not just only by the ampersand prefix in its declaration).

So just do the following; which worked for me:

<?php
//...
$method->invoke($object, $inputValue, &$outputValue);
?>

Since this will only be necessary with arrays and primitive data types it should be acceptable in most cases to know in advance if you need to pass per reference. But it is probably although necessary to keep the ampersand always in the declaration (because of the at least two layers between the actual function and your invoke call).

If this is the expected behavior it will maybe make sense to mention it in the documentation for invoke and invokeArgs.
serg dot smertin at gmail dot com 21-Sep-2010 06:51
We can do black magic, which is useful in templating block calls:

<?php
     $object->__named('methodNameHere', array('arg3' => 'three', 'arg1' => 'one'));

     ...

      /**
       * Pass method arguments by name
       *
       * @param string $method
       * @param array $args
       * @return mixed
       */
      public function __named($method, array $args = array())
      {
        $reflection = new ReflectionMethod($this, $method);

        $pass = array();
        foreach($reflection->getParameters() as $param)
        {
          /* @var $param ReflectionParameter */
          if(isset($args[$param->getName()]))
          {
            $pass[] = $args[$param->getName()];
          }
          else
          {
            $pass[] = $param->getDefaultValue();
          }
        }

        return $reflection->invokeArgs($this, $pass);
      }
?>


抽象メソッドであるかどうかを調べる

  • ≪ ReflectionMethod::invokeArgs
  • ReflectionMethod::isConstructor ≫
  • PHP Manual
  • ReflectionMethod
  • 抽象メソッドであるかどうかを調べる

ReflectionMethod::isAbstract

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::isAbstract — 抽象メソッドであるかどうかを調べる

説明

public ReflectionMethod::isAbstract(): bool

抽象メソッドであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

抽象メソッドである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionMethod::getDeclaringClass() - メソッドが宣言されているクラスを取得する

User Contributed Notes

There are no user contributed notes for this page.


コンストラクタであるかどうかを調べる

  • ≪ ReflectionMethod::isAbstract
  • ReflectionMethod::isDestructor ≫
  • PHP Manual
  • ReflectionMethod
  • コンストラクタであるかどうかを調べる

ReflectionMethod::isConstructor

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::isConstructor — コンストラクタであるかどうかを調べる

説明

public ReflectionMethod::isConstructor(): bool

コンストラクタであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

コンストラクタである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionMethod::__construct() - ReflectionMethod を作成する
  • ReflectionMethod::isAbstract() - 抽象メソッドであるかどうかを調べる
  • ReflectionMethod::isDestructor() - デストラクタであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


デストラクタであるかどうかを調べる

  • ≪ ReflectionMethod::isConstructor
  • ReflectionMethod::isFinal ≫
  • PHP Manual
  • ReflectionMethod
  • デストラクタであるかどうかを調べる

ReflectionMethod::isDestructor

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::isDestructor — デストラクタであるかどうかを調べる

説明

public ReflectionMethod::isDestructor(): bool

デストラクタであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

デストラクタである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionMethod::isConstructor() - コンストラクタであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


final メソッドであるかどうかを調べる

  • ≪ ReflectionMethod::isDestructor
  • ReflectionMethod::isPrivate ≫
  • PHP Manual
  • ReflectionMethod
  • final メソッドであるかどうかを調べる

ReflectionMethod::isFinal

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::isFinal — final メソッドであるかどうかを調べる

説明

public ReflectionMethod::isFinal(): bool

final メソッドであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

final メソッドである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionMethod::isStatic()

User Contributed Notes

There are no user contributed notes for this page.


private メソッドであるかどうかを調べる

  • ≪ ReflectionMethod::isFinal
  • ReflectionMethod::isProtected ≫
  • PHP Manual
  • ReflectionMethod
  • private メソッドであるかどうかを調べる

ReflectionMethod::isPrivate

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::isPrivate — private メソッドであるかどうかを調べる

説明

public ReflectionMethod::isPrivate(): bool

private メソッドであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

private メソッドである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionMethod::isPublic() - public メソッドであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


protected メソッドであるかどうかを調べる

  • ≪ ReflectionMethod::isPrivate
  • ReflectionMethod::isPublic ≫
  • PHP Manual
  • ReflectionMethod
  • protected メソッドであるかどうかを調べる

ReflectionMethod::isProtected

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::isProtected — protected メソッドであるかどうかを調べる

説明

public ReflectionMethod::isProtected(): bool

protected メソッドであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

protected メソッドである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionMethod::isPrivate() - private メソッドであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


public メソッドであるかどうかを調べる

  • ≪ ReflectionMethod::isProtected
  • ReflectionMethod::setAccessible ≫
  • PHP Manual
  • ReflectionMethod
  • public メソッドであるかどうかを調べる

ReflectionMethod::isPublic

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::isPublic — public メソッドであるかどうかを調べる

説明

public ReflectionMethod::isPublic(): bool

public メソッドであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

public メソッドである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionMethod::isPrivate() - private メソッドであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


メソッドのアクセス範囲を設定する

  • ≪ ReflectionMethod::isPublic
  • ReflectionMethod::__toString ≫
  • PHP Manual
  • ReflectionMethod
  • メソッドのアクセス範囲を設定する

ReflectionMethod::setAccessible

(PHP 5 >= 5.3.2, PHP 7, PHP 8)

ReflectionMethod::setAccessible — メソッドのアクセス範囲を設定する

説明

public ReflectionMethod::setAccessible(bool $accessible): void

ReflectionMethod::invoke() メソッド経由で、 protected や private なメソッドを呼び出し可能にします。

注意: PHP 8.1.0 以降は、このメソッドをコールしても何も起こりません。 つまり、全てのメソッドはデフォルトで呼び出し可能です。

パラメータ

accessible

true を指定すると、アクセスできるようになります。

戻り値

値を返しません。

例

例1 簡単なクラス定義

<?php
class MyClass
{
private function foo()
{
return 'bar';
}
}

$method = new ReflectionMethod("MyClass", "foo");
$method->setAccessible(true);

$obj = new MyClass();
echo $method->invoke($obj);
echo $obj->foo();
?>

上の例の出力は、 たとえば以下のようになります。

bar
Fatal error: Uncaught Error: Call to private method MyClass::foo() from global scope in /in/qdaZS:16

参考

  • ReflectionMethod::isPrivate() - private メソッドであるかどうかを調べる
  • ReflectionMethod::isProtected() - protected メソッドであるかどうかを調べる

User Contributed Notes

dave1010 at gmail dot com 11-May-2011 03:21
This is handy for accessing private methods but remember that things are normally private for a reason! Unit Testing is one (debatable) use case for this.

Example:
<?php
class Foo {
  private function myPrivateMethod() {
    return 7;
  }
}

$method = new ReflectionMethod('Foo', 'myPrivateMethod');
$method->setAccessible(true);

echo $method->invoke(new Foo);
// echos "7"
?>

This works nicely with PHPUnit: http://php.net/manual/en/reflectionmethod.setaccessible.php


ReflectionMethod オブジェクトの文字列表現を返す

  • ≪ ReflectionMethod::setAccessible
  • ReflectionNamedType ≫
  • PHP Manual
  • ReflectionMethod
  • ReflectionMethod オブジェクトの文字列表現を返す

ReflectionMethod::__toString

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::__toString — ReflectionMethod オブジェクトの文字列表現を返す

説明

public ReflectionMethod::__toString(): string

ReflectionMethod オブジェクトの文字列表現を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionMethod のインスタンスの文字列表現を返します。

例

例1 ReflectionMethod::__toString() の例

<?php
class HelloWorld {

public function sayHelloTo($name) {
return 'Hello ' . $name;
}

}

$reflectionMethod = new ReflectionMethod(new HelloWorld(), 'sayHelloTo');
echo $reflectionMethod;
?>

上の例の出力は以下となります。

Method [ <user> public method sayHelloTo ] {
  @@ /var/www/examples/reflection.php 16 - 18

  - Parameters [1] {
    Parameter #0 [ <required> $name ]
  }
}

参考

  • ReflectionMethod::export() - メソッドをエクスポートする
  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionNamedType クラス

(PHP 7 >= 7.1.0, PHP 8)

はじめに

クラス概要

class ReflectionNamedType extends ReflectionType {
/* メソッド */
public getName(): string
public isBuiltin(): bool
/* 継承したメソッド */
public ReflectionType::allowsNull(): bool
public ReflectionType::__toString(): string
}

目次

  • ReflectionNamedType::getName — 型の名前の文字列を取得する
  • ReflectionNamedType::isBuiltin — 組み込みの型であるかを調べる

User Contributed Notes

tuncdan dot ozdemir dot peng at gmail dot com 14-Feb-2024 11:55
Editor note: This behaviour is due to BC concerns with PHP 7, and will likely be fixed in PHP 9.

2024-02-14

PHP 8.3

interface AnyType {}
interface Type2 {}

function test (AnyType|null $param) {}

The ReflectionParameter will return ReflectionNamedType, NOT ReflectionUnionType (null is ignored basically).

However, function test (AnyType|Type2|null $param) {}

will return ReflectionUnionType with 3 types, NOT 2 (null is not ignored this time).

To me, this is just wrong and logical error in PHP.


型の名前の文字列を取得する

  • ≪ ReflectionNamedType
  • ReflectionNamedType::isBuiltin ≫
  • PHP Manual
  • ReflectionNamedType
  • 型の名前の文字列を取得する

ReflectionNamedType::getName

(PHP 7 >= 7.1.0, PHP 8)

ReflectionNamedType::getName — 型の名前の文字列を取得する

説明

public ReflectionNamedType::getName(): string

パラメータ

この関数にはパラメータはありません。

戻り値

リフレクションされた型の名前を返します。

参考

  • ReflectionType::__toString() - 文字列に変換する

User Contributed Notes

baptiste at pillot dot fr 08-Sep-2023 12:40
Possible values for type names are:

- The name of a class, interface, or trait,
- The name of any built-in type (php 8.2): array, bool, callable, float, int, null, object, string, false, iterable, mixed, never, true, void,
- The name of any relative class type: parent, self, static.


組み込みの型であるかを調べる

  • ≪ ReflectionNamedType::getName
  • ReflectionObject ≫
  • PHP Manual
  • ReflectionNamedType
  • 組み込みの型であるかを調べる

ReflectionNamedType::isBuiltin

(PHP 7, PHP 8)

ReflectionNamedType::isBuiltin — 組み込みの型であるかを調べる

説明

public ReflectionNamedType::isBuiltin(): bool

PHP に元々組み込まれた型であるかを調べます。 元々組み込まれた型とは、クラス、インターフェイス、トレイトのいずれでもない型を指します。

パラメータ

この関数にはパラメータはありません。

戻り値

組み込みの型である場合は true を、そうでない場合は false を返します。

例

例1 ReflectionNamedType::isBuiltin() の例

<?php
class SomeClass {}

function someFunction(string $param, SomeClass $param2, stdClass $param3) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParams = $reflectionFunc->getParameters();

var_dump($reflectionParams[0]->getType()->isBuiltin());
var_dump($reflectionParams[1]->getType()->isBuiltin());
var_dump($reflectionParams[2]->getType()->isBuiltin());

上の例の出力は以下となります。

bool(true)
bool(false)
bool(false)

ReflectionNamedType::isBuiltin() メソッドは、 内部クラスとカスタムのクラスを区別しないことに注意して下さい。 それらを区別するには、返されたクラス名に対して ReflectionClass::isInternal() メソッドを使うべきです。

参考

  • ReflectionType::allowsNull() - null が許されるかをチェックする
  • ReflectionType::__toString() - 文字列に変換する
  • ReflectionClass::isInternal() - 拡張モジュールあるいはコアで定義された内部クラスであるかどうかを調べる
  • ReflectionParameter::getType() - 引数の型を取得する

User Contributed Notes

yarns_purport0n at icloud dot com 28-Mar-2022 11:44
built-in types () are:
- `array`
- `callable`
- `bool`
- `float`
- `int`
- `string`
- `iterable`
- `object`
- `mixed`

Note: tested from the list at https://php.net/language.types.declarations#language.types.declarations.base

`self` & `parent` are not included.
mndevel at gmail dot com 13-Mar-2021 10:16
I couldn't find a list of what qualifies as a builtin. Here is what I have so far:
string
float
bool
int
iterable (Iterator reflects as type iterable)
mixed
array

These do not qualify as builtins:
Closure
Stringable
Generator
Traversable
Serializable
Throwable
IteratorAggregate
ArrayAccess
WeakReference
JsonSerializeable


ReflectionObject クラス

(PHP 5, PHP 7, PHP 8)

はじめに

ReflectionObject クラスは オブジェクトについての情報を報告します。

クラス概要

class ReflectionObject extends ReflectionClass {
/* 継承した定数 */
public const int ReflectionClass::IS_IMPLICIT_ABSTRACT;
public const int ReflectionClass::IS_EXPLICIT_ABSTRACT;
public const int ReflectionClass::IS_FINAL;
public const int ReflectionClass::IS_READONLY;
/* 継承したプロパティ */
public string $name;
/* メソッド */
public __construct(object $object)
/* 継承したメソッド */
public static ReflectionClass::export(mixed $argument, bool $return = false): string
public ReflectionClass::getAttributes(?string $name = null, int $flags = 0): array
public ReflectionClass::getConstant(string $name): mixed
public ReflectionClass::getConstants(?int $filter = null): array
public ReflectionClass::getConstructor(): ?ReflectionMethod
public ReflectionClass::getDefaultProperties(): array
public ReflectionClass::getDocComment(): string|false
public ReflectionClass::getEndLine(): int|false
public ReflectionClass::getExtension(): ?ReflectionExtension
public ReflectionClass::getExtensionName(): string|false
public ReflectionClass::getFileName(): string|false
public ReflectionClass::getInterfaceNames(): array
public ReflectionClass::getInterfaces(): array
public ReflectionClass::getMethod(string $name): ReflectionMethod
public ReflectionClass::getMethods(?int $filter = null): array
public ReflectionClass::getModifiers(): int
public ReflectionClass::getName(): string
public ReflectionClass::getNamespaceName(): string
public ReflectionClass::getParentClass(): ReflectionClass|false
public ReflectionClass::getProperties(?int $filter = null): array
public ReflectionClass::getProperty(string $name): ReflectionProperty
public ReflectionClass::getReflectionConstant(string $name): ReflectionClassConstant|false
public ReflectionClass::getReflectionConstants(?int $filter = null): array
public ReflectionClass::getShortName(): string
public ReflectionClass::getStartLine(): int|false
public ReflectionClass::getStaticProperties(): array
public ReflectionClass::getStaticPropertyValue(string $name, mixed &$def_value = ?): mixed
public ReflectionClass::getTraitAliases(): array
public ReflectionClass::getTraitNames(): array
public ReflectionClass::getTraits(): array
public ReflectionClass::hasConstant(string $name): bool
public ReflectionClass::hasMethod(string $name): bool
public ReflectionClass::hasProperty(string $name): bool
public ReflectionClass::implementsInterface(ReflectionClass|string $interface): bool
public ReflectionClass::inNamespace(): bool
public ReflectionClass::isAbstract(): bool
public ReflectionClass::isAnonymous(): bool
public ReflectionClass::isCloneable(): bool
public ReflectionClass::isEnum(): bool
public ReflectionClass::isFinal(): bool
public ReflectionClass::isInstance(object $object): bool
public ReflectionClass::isInstantiable(): bool
public ReflectionClass::isInterface(): bool
public ReflectionClass::isInternal(): bool
public ReflectionClass::isIterable(): bool
public ReflectionClass::isReadOnly(): bool
public ReflectionClass::isSubclassOf(ReflectionClass|string $class): bool
public ReflectionClass::isTrait(): bool
public ReflectionClass::isUserDefined(): bool
public ReflectionClass::newInstance(mixed ...$args): object
public ReflectionClass::newInstanceArgs(array $args = []): ?object
public ReflectionClass::newInstanceWithoutConstructor(): object
public ReflectionClass::setStaticPropertyValue(string $name, mixed $value): void
public ReflectionClass::__toString(): string
}

変更履歴

バージョン | 説明
8.0.0 | ReflectionObject::export() は、削除されました。

目次

  • ReflectionObject::__construct — ReflectionObject を作成する
  • ReflectionObject::export — エクスポートする

User Contributed Notes

ccb_bc at hotmail dot com 21-May-2019 03:39
<?php
    class FullReflectionObject {

        /**
        * @var obj => $ReflectionObject = propriedade que representa o objeto $ReflectionObject
        * @var obj => $ReflectionProperty = propriedade que representa o objeto $ReflectionProperty
        * @var obj => $ReflectionMethod = propriedade que representa o objeto $ReflectionMethod
        * @var obj => $ReflectionParameter = propriedade que representa o objeto $ReflectionParameter
        * @var bol => $reflect_object = true se o metodo object() for invocado
        * @var bol => $reflect_property = true se o metodo property() for invocado
        * @var bol => $reflect_method = true se o metodo method() for invocado
        * @var bol => $reflect_parameter = true se o metodo parameter() for invocado
        */

        private $ReflectionObject;
        private $ReflectionProperty;
        private $ReflectionMethod;
        private $ReflectionParameter;
        private $reflect_object    = false;
        private $reflect_property  = false;
        private $reflect_method    = false;
        private $reflect_parameter = false;

        /**
        * @param obj => $object = objeto a ser refletido
        */
        public function object(object $object) : object {
            $this->reflect_object = true;
            $this->ReflectionObject = new \ReflectionObject($object);
            return $this;
        }

        /**
        * @param str => $class_name = nome da classe o qual a properiedade ser refletida pertence
        * @param str => $property = nome da properiedade a ser refletida
        */
        public function property(string $class_name, string $property) : object {
            $this->reflect_property = true;
            $this->ReflectionProperty = new \ReflectionProperty($class_name, $property);
            return $this;
        }

        /**
        * @param str => $class_name = nome da classe o qual o metodo ser refletido pertence
        * @param str => $method = nome do metodo a ser refletido
        */
        public function method(string $class_name, string $method) : object {
            $this->reflect_method = true;
            $this->ReflectionMethod = new \ReflectionMethod($class_name, $method);
            return $this;
        }

        /**
        * @param str => $class_name = nome da classe o qual o parametro a ser refletido pertence
        * @param str => $method = nome do metodo o qual o parametro a ser refletido pertence
        * @param str => $parameter = nome do parametro a ser refletido
        */
        public function parameter(string $class_name, string $method, string $parameter) : object {
            $this->reflect_parameter = true;
            $this->ReflectionParameter = new \ReflectionParameter(array($class_name, $method), $parameter);
            return $this;
        }

        public function __call($methodName, $args){
            if($this->reflect_object){
                return call_user_func_array(array($this->ReflectionObject, $methodName), $args);
            }
            if($this->reflect_property){
                return call_user_func_array(array($this->ReflectionProperty, $methodName), $args);
            }
            if($this->reflect_method){
                return call_user_func_array(array($this->ReflectionMethod, $methodName), $args);
            }
            if($this->reflect_parameter){
                return call_user_func_array(array($this->ReflectionParameter, $methodName), $args);
            }
        }
    }

    // Digamos que voce tenha no seu projeto a classe Client do pacote Guzzle
    $FullReflectionObject = new FullReflectionObject;
    var_dump($FullReflectionObject->object(new GuzzleHttp\Client)->getMethods());
    var_dump($FullReflectionObject->property('GuzzleHttp\Client', 'config')->isPrivate());
    var_dump($FullReflectionObject->method('GuzzleHttp\Client', 'buildUri')->isPrivate());
    var_dump($FullReflectionObject->parameter('GuzzleHttp\Client', 'send', 'options')->getDefaultValue());
kuldipem at gmail dot com 17-Jun-2015 06:01
class a {
    const abc = 1;
    public function __get($key){
        $r = new ReflectionObject($this);
        if($r->hasConstant($key)){ return $r->getConstant($key); }
    }
}
class b {
    public function getA(){
        return new a();
    }
}
$b = new b();
var_dump($b->getA()::abc);
var_dump($b->getA()::def);
marcel dot nolte at noltecomputer dot de 02-Sep-2009 02:42
To simply enlist all methods and properties of an object simply write:

<?php ReflectionObject::export($yourObject); ?>

,which will cause an var_export-like output.


ReflectionObject を作成する

  • ≪ ReflectionObject
  • ReflectionObject::export ≫
  • PHP Manual
  • ReflectionObject
  • ReflectionObject を作成する

ReflectionObject::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionObject::__construct — ReflectionObject を作成する

説明

public ReflectionObject::__construct(object $object)

ReflectionObject を作成します。

パラメータ

object

オブジェクトのインスタンス。

参考

  • ReflectionObject::export() - エクスポートする
  • コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


エクスポートする

  • ≪ ReflectionObject::__construct
  • ReflectionParameter ≫
  • PHP Manual
  • ReflectionObject
  • エクスポートする

ReflectionObject::export

(PHP 5, PHP 7)

ReflectionObject::export — エクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionObject::export(string $argument, bool $return = ?): string

リフレクションをエクスポートします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

argument

エクスポートするリフレクション。

return

true に設定すると、エクスポートを発行するのではなく返します。 false (デフォルト) の場合はその逆です。

戻り値

return パラメータを true に設定すると、エクスポートを文字列で返します。それ以外の場合は null を返します。

参考

  • ReflectionObject::__construct() - ReflectionObject を作成する

User Contributed Notes

There are no user contributed notes for this page.


ReflectionParameter クラス

(PHP 5, PHP 7, PHP 8)

はじめに

ReflectionParameter クラスは、 関数またはメソッドのパラメータに関する情報を取得します。

関数パラメータの内部を調べる際には、まず ReflectionFunction クラスまたは ReflectionMethod クラスのインスタンスを作成する必要があります。次に、 ReflectionFunctionAbstract::getParameters() メソッドを使ってパラメータの配列を取得します。

クラス概要

class ReflectionParameter implements Reflector {
/* プロパティ */
public string $name;
/* メソッド */
public __construct(string|array|object $function, int|string $param)
public allowsNull(): bool
public canBePassedByValue(): bool
private __clone(): void
public static export(string $function, string $parameter, bool $return = ?): string
public getAttributes(?string $name = null, int $flags = 0): array
public getClass(): ?ReflectionClass
public getDeclaringClass(): ?ReflectionClass
public getDeclaringFunction(): ReflectionFunctionAbstract
public getDefaultValue(): mixed
public getDefaultValueConstantName(): ?string
public getName(): string
public getPosition(): int
public getType(): ?ReflectionType
public hasType(): bool
public isArray(): bool
public isCallable(): bool
public isDefaultValueAvailable(): bool
public isDefaultValueConstant(): bool
public isOptional(): bool
public isPassedByReference(): bool
public isVariadic(): bool
public __toString(): string
}

プロパティ

name

パラメータ名。読み込み専用で、書き込もうとすると ReflectionException をスローします。

変更履歴

バージョン | 説明
8.0.0 | ReflectionParameter::export() は、削除されました。

目次

  • ReflectionParameter::allowsNull — null を許可するかどうかを調べる
  • ReflectionParameter::canBePassedByValue — このパラメータが値渡し可能かどうかを返す
  • ReflectionParameter::__clone — クローンする
  • ReflectionParameter::__construct — コンストラクタ
  • ReflectionParameter::export — エクスポートする
  • ReflectionParameter::getAttributes — アトリビュートを取得する
  • ReflectionParameter::getClass — リフレクションされた ReflectionClass を取得する。
  • ReflectionParameter::getDeclaringClass — 宣言しているクラスを取得する
  • ReflectionParameter::getDeclaringFunction — 宣言している関数を取得する
  • ReflectionParameter::getDefaultValue — パラメータのデフォルト値を取得する
  • ReflectionParameter::getDefaultValueConstantName — デフォルト値が定数あるいは null の場合に、その定数名を返す
  • ReflectionParameter::getName — パラメータ名を取得する
  • ReflectionParameter::getPosition — パラメータの位置を取得する
  • ReflectionParameter::getType — 引数の型を取得する
  • ReflectionParameter::hasType — 引数が型を持つかを調べる
  • ReflectionParameter::isArray — 配列を受け取るパラメータであるかどうかを調べる
  • ReflectionParameter::isCallable — パラメータが callable かどうかを返す
  • ReflectionParameter::isDefaultValueAvailable — デフォルト値が存在するかどうかを調べる
  • ReflectionParameter::isDefaultValueConstant — このパラメータのデフォルト値が定数かどうかを返す
  • ReflectionParameter::isOptional — 省略可能であるかどうかを調べる
  • ReflectionParameter::isPassedByReference — 参照渡しかどうかを調べる
  • ReflectionParameter::isVariadic — 引数が可変長の個数であるかをチェックする
  • ReflectionParameter::__toString — 文字列に変換する

User Contributed Notes

rasmus at mindplay dot dk 11-Oct-2023 10:55
There are so many parameter modes now, and I needed to know exactly what `ReflectionParameter` is going to return, so I wrote a little test-script - you can find the script and results in a table here:

https://gist.github.com/mindplay-dk/082458088988e32256a827f9b7491e17
fgm at riff dot org 11-May-2008 12:44
The note about the signature of the ReflectionParameter constructor is actually incomplete, at least in 5.2.5: it is possible to use an integer for the second parameter, and the constructor will use it to return the n-th parameter.

This allows you to obtain proper ReflectionParameter objects even when documenting code from extensions which (strangely enough) define several parameters with the same name. The string-based constructor always returns the first parameter with the matching name, whereas the integer-based constructor correctly returns the n-th parameter.

So, in short, this works:
<?php
// supposing the extension defined something like:
// Some_Class::someMethod($a, $x, $y, $x, $y)
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 4);
// returns the last parameter, whereas
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 'y');
// always returns the first $y at position 2
?>
killgecNOFSPAM at gmail dot com 25-Jul-2007 05:53
Signature of constructor of ReflectionParameter correctly is:

public function __construct(array/string $function, string $name);

where $function is either a name of a global function, or a class/method name pair.
massimo at mmware dot it 18-Jul-2007 08:58
I found these limitations using class ReflectionParameter from ReflectionFunction with INTERNAL FUNCTIONS (eg print_r, str_replace, ... ) :

1. parameter names don't match with manual: (try example 19.35 with arg "call_user_func" )
2. some functions (eg PCRE function, preg_match etc) have EMPTY parameter names
3. calling getDefaultValue on Parameters will result in Exception "Cannot determine default value for internal functions"


null を許可するかどうかを調べる

  • ≪ ReflectionParameter
  • ReflectionParameter::canBePassedByValue ≫
  • PHP Manual
  • ReflectionParameter
  • null を許可するかどうかを調べる

ReflectionParameter::allowsNull

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::allowsNull — null を許可するかどうかを調べる

説明

public ReflectionParameter::allowsNull(): bool

パラメータが null を許可するかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

null を許可する場合に true、それ以外の場合に false を返します。

参考

  • ReflectionParameter::isOptional() - 省略可能であるかどうかを調べる

User Contributed Notes

tuncdan dot ozdemir dot peng at gmail dot com 14-Feb-2024 09:55
Please note that `mixed` type parameter also returns true, as `null` is part of the `mixed` union.

And there does not have to be a default `null` value for `->allowsNull()` to return true.

function test (AnyType|null $param1, mixed $param2) {}

Both parameters from the function above will return true for `allowsNull()`.
Geoffrey LAURENT 05-May-2013 03:53
The allowsNull method look if arguments have a type.
If a type is defined, null is allowed only if default value is null.

 <?php
function myfunction ( $param ) {

}

echo (new ReflectionFunction("myfunction"))->getParameters()[0]->allowsNull() ? "true":"false";

?>

Result : true

<?php
function myfunction ( stdClass $param ) {

}

echo (new ReflectionFunction("myfunction"))->getParameters()[0]->allowsNull() ? "true":"false";

?>

Result : false

<?php
function myfunction ( stdClass $param = null ) {

}

echo (new ReflectionFunction("myfunction"))->getParameters()[0]->allowsNull() ? "true":"false";
?>

Result : true


このパラメータが値渡し可能かどうかを返す

  • ≪ ReflectionParameter::allowsNull
  • ReflectionParameter::__clone ≫
  • PHP Manual
  • ReflectionParameter
  • このパラメータが値渡し可能かどうかを返す

ReflectionParameter::canBePassedByValue

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionParameter::canBePassedByValue — このパラメータが値渡し可能かどうかを返す

説明

public ReflectionParameter::canBePassedByValue(): bool

パラメータ

この関数にはパラメータはありません。

戻り値

このパラメータが値渡し可能な場合に true、それ以外の場合に false を返します。 エラー時には null を返します。

User Contributed Notes

There are no user contributed notes for this page.


クローンする

  • ≪ ReflectionParameter::canBePassedByValue
  • ReflectionParameter::__construct ≫
  • PHP Manual
  • ReflectionParameter
  • クローンする

ReflectionParameter::__clone

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::__clone — クローンする

説明

private ReflectionParameter::__clone(): void

クローンします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

変更履歴

バージョン | 説明
8.1.0 | このメソッドは、final ではなくなりました。

参考

  • ReflectionParameter::toString()
  • オブジェクトのクローン作成

User Contributed Notes

There are no user contributed notes for this page.


コンストラクタ

  • ≪ ReflectionParameter::__clone
  • ReflectionParameter::export ≫
  • PHP Manual
  • ReflectionParameter
  • コンストラクタ

ReflectionParameter::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::__construct — コンストラクタ

説明

public ReflectionParameter::__construct(string|array|object $function, int|string $param)

ReflectionParameter クラスのインスタンスを構築します。

パラメータ

function

パラメータを調べたい関数。

param

パラメータの位置を指定する int (0から始まります)、 もしくはパラメータの名前を string で指定します。

例

例1 ReflectionParameter クラスの使用

<?php
function foo($a, $b, $c) { }
function bar(Exception $a, &$b, $c) { }
function baz(ReflectionFunction $a, $b = 1, $c = null) { }
function abc() { }

$reflect = new ReflectionFunction('foo');

echo $reflect;

foreach ($reflect->getParameters() as $i => $param) {
printf(
"-- Parameter #%d: %s {\n".
" Class: %s\n".
" Allows NULL: %s\n".
" Passed to by reference: %s\n".
" Is optional?: %s\n".
"}\n",
$i, // $param->getPosition() can be used
$param->getName(),
var_export($param->getClass(), 1),
var_export($param->allowsNull(), 1),
var_export($param->isPassedByReference(), 1),
$param->isOptional() ? 'yes' : 'no'
);
}
?>

上の例の出力は、 たとえば以下のようになります。

Function [ <user> function foo ] {
  @@ /Users/philip/cvs/phpdoc/a 2 - 2

  - Parameters [3] {
    Parameter #0 [ <required> $a ]
    Parameter #1 [ <required> $b ]
    Parameter #2 [ <required> $c ]
  }
}
-- Parameter #0: a {
   Class: NULL
   Allows NULL: true
   Passed to by reference: false
   Is optional?: no
}
-- Parameter #1: b {
   Class: NULL
   Allows NULL: true
   Passed to by reference: false
   Is optional?: no
}
-- Parameter #2: c {
   Class: NULL
   Allows NULL: true
   Passed to by reference: false
   Is optional?: no
}

参考

  • ReflectionFunctionAbstract::getParameters() - パラメータを取得する
  • ReflectionFunction::__construct() - ReflectionFunction オブジェクトを作成する
  • ReflectionMethod::__construct() - ReflectionMethod を作成する
  • コンストラクタ

User Contributed Notes

tracid2008 t gmail o com 06-Dec-2011 03:31
You also can use a class instead of a function name. Just use an array like that
<?php
$reflect = new ReflectionParameter(array('className', 'methodName'), 'property');
?>


エクスポートする

  • ≪ ReflectionParameter::__construct
  • ReflectionParameter::getAttributes ≫
  • PHP Manual
  • ReflectionParameter
  • エクスポートする

ReflectionParameter::export

(PHP 5, PHP 7)

ReflectionParameter::export — エクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionParameter::export(string $function, string $parameter, bool $return = ?): string

エクスポートします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

function

関数名。

parameter

パラメータ名。

return

true に設定すると、エクスポートを発行するのではなく返します。 false (デフォルト) の場合はその逆です。

戻り値

エクスポート結果を返します。

参考

  • ReflectionParameter::__toString() - 文字列に変換する

User Contributed Notes

There are no user contributed notes for this page.


アトリビュートを取得する

  • ≪ ReflectionParameter::export
  • ReflectionParameter::getClass ≫
  • PHP Manual
  • ReflectionParameter
  • アトリビュートを取得する

ReflectionParameter::getAttributes

(PHP 8)

ReflectionParameter::getAttributes — アトリビュートを取得する

説明

public ReflectionParameter::getAttributes(?string $name = null, int $flags = 0): array

この引数上で宣言されている全てのアトリビュートを、 ReflectionAttribute の配列として返します。

パラメータ

name

指定したクラス名にマッチするアトリビュートの、 ReflectionAttribute のみを含むようにフィルタします。

flags

name が指定されていた場合に、 結果をどうフィルタするかを決めるフラグ。

デフォルトは 0 です。 この場合、アトリビュートのクラス名が name であるものだけを返します。

他の利用可能なオプションは、 ReflectionAttribute::IS_INSTANCEOF です。 この場合、フィルタリングに instanceof を使います。

戻り値

アトリビュートの配列を、 ReflectionAttribute オブジェクトの配列として返します。

例

例1 基本的な使い方

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

function fruitBasket(
#[Fruit]
#[Red]
string $apple
) { }

$reflection = new ReflectionFunction('fruitBasket');
$parameter = $reflection->getParameter('apple');
$attributes = $parameter->getAttributes();
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
    [1] => Red
)

例2 クラス名で結果をフィルタする

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

function fruitBasket(
#[Fruit]
#[Red]
string $apple
) { }

$reflection = new ReflectionFunction('fruitBasket');
$parameter = $reflection->getParameter('apple');
$attributes = $parameter->getAttributes('Fruit');
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
)

例3 クラス名、かつ継承も考慮して結果をフィルタする

<?php
interface Color {
}

#[Attribute]
class Fruit {
}

function fruitBasket(
#[Fruit]
#[Red]
string $apple
) { }

$reflection = new ReflectionFunction('fruitBasket');
$parameter = $reflection->getParameter('apple');
$attributes = $parameter->getAttributes('Color', ReflectionAttribute::IS_INSTANCEOF);
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Red
)

参考

  • ReflectionClass::getAttributes() - アトリビュートを取得する
  • ReflectionClassConstant::getAttributes() - アトリビュートを取得する
  • ReflectionFunctionAbstract::getAttributes() - アトリビュートを取得する
  • ReflectionProperty::getAttributes() - アトリビュートを取得する

User Contributed Notes

There are no user contributed notes for this page.


リフレクションされた ReflectionClass を取得する。

  • ≪ ReflectionParameter::getAttributes
  • ReflectionParameter::getDeclaringClass ≫
  • PHP Manual
  • ReflectionParameter
  • リフレクションされた ReflectionClass を取得する。

ReflectionParameter::getClass

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::getClass — リフレクションされた ReflectionClass を取得する。

警告

この関数は PHP 8.0.0 で 非推奨になります。この関数に頼らないことを強く推奨します。

説明

public ReflectionParameter::getClass(): ?ReflectionClass

パラメータとしてリフレクションされたクラスを、 ReflectionClass オブジェクトとして取得するか、null を返します。

PHP 8.0.0 以降は、この関数を使うことは推奨されなくなりました。 代わりに、引数の型を調べるために ReflectionType を取得して下さい。 それを取得するには、ReflectionParameter::getType() を使います。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionClass オブジェクトを返します。 型が宣言されていないか、 宣言されていてもクラスやインターフェイスでない場合は、null を返します。

例

例1 ReflectionParameter クラスの利用法

<?php
function foo(Exception $a) { }

$functionReflection = new ReflectionFunction('foo');
$parameters = $functionReflection->getParameters();
$aParameter = $parameters[0];

echo $aParameter->getClass()->name;
?>

参考

  • ReflectionParameter::getDeclaringClass() - 宣言しているクラスを取得する

User Contributed Notes

tarik at bitstore dot ru 22-Feb-2021 07:08
You may use this one function instead depricated

    /**
     * Get parameter class
     * @param \ReflectionParameter $parameter
     * @return \ReflectionClass|null
     */
    private function getClass(\ReflectionParameter $parameter):?\ReflectionClass
    {
        $type = $parameter->getType();
        if (!$type || $type->isBuiltin())
            return NULL;

// This line triggers autoloader!
        if(!class_exists($type->getName()))
            return NULL;

        return  new \ReflectionClass($type->getName());
    }
Dylan 12-Feb-2021 11:47
For php version >=8
ReflectionParamter::getType() is the recommended way to replace the deprecated methods:

- getClass()
e.g: $name = $param->getType() && !$param->getType()->isBuiltin()
       ? new ReflectionClass($param->getType()->getName())
       : null;

- isArray()
e.g: $isArray = $param->getType() && $param->getType()->getName() === 'array';

- isCallable()
e.g: $isCallable = $param->getType() && $param->getType()->getName() === 'callable';

This method is available in PHP 7.0 and later.
richard dot t dot rohrig at gmail dot com 01-Jun-2020 09:33
Example of how to use getClass() in conjunction with getConstructor() to build the dependencies of a class.

private function buildDependencies(ReflectionClass $reflection)
    {
        $constructor = $reflection->getConstructor();

        if (!$constructor) {
            return [];
        }

        $params = $constructor->getParameters();

        return array_map(function ($param) {

            $className = $param->getClass();

            if (!$className) {
                throw new Exception();
            }

            $className = $param->getClass()->getName();

            return $this->make($className);
        }, $params);
    }
tom at r dot je 11-May-2012 09:15
ReflectionParameter::getClass() will cause a fatal error (and trigger __autoload) if the class required by the parameter is not defined.

Sometimes it's useful to only know the class name without needing the class to be loaded.

Here's a simple function that will retrieve only the class name without requiring the class to exist:

<?php
function getClassName(ReflectionParameter $param) {
    preg_match('/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches);
    return isset($matches[1]) ? $matches[1] : null;
}
?>
infernaz at gmail dot com 31-Jan-2011 12:09
The method returns ReflectionClass object of parameter type class or NULL if none.

<?php

class A {
    function b(B $c, array $d, $e) {
    }
}
class B {
}

$refl = new ReflectionClass('A');
$par = $refl->getMethod('b')->getParameters();

var_dump($par[0]->getClass()->getName());  // outputs B
var_dump($par[1]->getClass());  // note that array type outputs NULL
var_dump($par[2]->getClass());  // outputs NULL

?>


宣言しているクラスを取得する

  • ≪ ReflectionParameter::getClass
  • ReflectionParameter::getDeclaringFunction ≫
  • PHP Manual
  • ReflectionParameter
  • 宣言しているクラスを取得する

ReflectionParameter::getDeclaringClass

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

ReflectionParameter::getDeclaringClass — 宣言しているクラスを取得する

説明

public ReflectionParameter::getDeclaringClass(): ?ReflectionClass

宣言しているクラスを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionClass オブジェクトを返します。 関数の中で呼ばれた場合、null を返します。

例

例1 メソッドを宣言しているクラスの取得

<?php
class Foo
{
public function bar(\DateTime $datetime)
{
}
}

class Baz extends Foo
{
}

$param = new \ReflectionParameter(['Baz', 'bar'], 0);

var_dump($param->getDeclaringClass());

上の例の出力は以下となります。

object(ReflectionClass)#2 (1) {
  ["name"]=>
  string(3) "Foo"
}

参考

  • ReflectionParameter::getClass() - リフレクションされた ReflectionClass を取得する。

User Contributed Notes

There are no user contributed notes for this page.


宣言している関数を取得する

  • ≪ ReflectionParameter::getDeclaringClass
  • ReflectionParameter::getDefaultValue ≫
  • PHP Manual
  • ReflectionParameter
  • 宣言している関数を取得する

ReflectionParameter::getDeclaringFunction

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

ReflectionParameter::getDeclaringFunction — 宣言している関数を取得する

説明

public ReflectionParameter::getDeclaringFunction(): ReflectionFunctionAbstract

宣言している関数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionFunction オブジェクトを返します。

参考

  • ReflectionParameter::getDeclaringClass() - 宣言しているクラスを取得する

User Contributed Notes

There are no user contributed notes for this page.


パラメータのデフォルト値を取得する

  • ≪ ReflectionParameter::getDeclaringFunction
  • ReflectionParameter::getDefaultValueConstantName ≫
  • PHP Manual
  • ReflectionParameter
  • パラメータのデフォルト値を取得する

ReflectionParameter::getDefaultValue

(PHP 5 >= 5.0.3, PHP 7, PHP 8)

ReflectionParameter::getDefaultValue — パラメータのデフォルト値を取得する

説明

public ReflectionParameter::getDefaultValue(): mixed

(内部またはユーザー定義の) 関数あるいはメソッドで、パラメータのデフォルト値を取得します。 省略可能なパラメータでない場合は ReflectionException がスローされます。

パラメータ

この関数にはパラメータはありません。

戻り値

パラメータのデフォルト対を返します。

変更履歴

バージョン | 説明
8.0.0 | ビルトイン関数 や ビルトインクラス のメソッドについても、デフォルト値を取得できるようになりました。 これより前のバージョンでは、ReflectionException がスローされていました。

例

例1 関数のパラメータのデフォルト値を取得する

<?php
function foo($test, $bar = 'baz')
{
echo $test . $bar;
}

$function = new ReflectionFunction('foo');

foreach ($function->getParameters() as $param) {
echo 'Name: ' . $param->getName() . PHP_EOL;
if ($param->isOptional()) {
echo 'Default value: ' . $param->getDefaultValue() . PHP_EOL;
}
echo PHP_EOL;
}
?>

上の例の出力は以下となります。

Name: test

Name: bar
Default value: baz

参考

  • ReflectionParameter::isOptional() - 省略可能であるかどうかを調べる
  • ReflectionParameter::isDefaultValueAvailable() - デフォルト値が存在するかどうかを調べる
  • ReflectionParameter::getDefaultValueConstantName() - デフォルト値が定数あるいは null の場合に、その定数名を返す
  • ReflectionParameter::isPassedByReference() - 参照渡しかどうかを調べる

User Contributed Notes

gmail@asmqb7 16-May-2016 12:57
[Editor's note: fixed on user's request]

Getting `Uncaught ReflectionException: Internal error: Failed to retrieve the default value`?

You have to wrap this inside ->isDefaultValueAvailable().


デフォルト値が定数あるいは null の場合に、その定数名を返す

  • ≪ ReflectionParameter::getDefaultValue
  • ReflectionParameter::getName ≫
  • PHP Manual
  • ReflectionParameter
  • デフォルト値が定数あるいは null の場合に、その定数名を返す

ReflectionParameter::getDefaultValueConstantName

(PHP 5 >= 5.4.6, PHP 7, PHP 8)

ReflectionParameter::getDefaultValueConstantName — デフォルト値が定数あるいは null の場合に、その定数名を返す

説明

public ReflectionParameter::getDefaultValueConstantName(): ?string

デフォルト値が定数か null の場合に、 (内部またはユーザー定義の) 関数やメソッドのデフォルト値の定数名を返します。 パラメータがオプションでない場合は、 ReflectionException がスローされます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に文字列、失敗した場合に null を返します。

変更履歴

バージョン | 説明
8.0.0 | ビルトイン関数 や ビルトインクラス のメソッドについても、デフォルト値の定数名を取得できるようになりました。 これより前のバージョンでは、ReflectionException がスローされていました。

例

例1 関数のパラメーターのデフォルト値の定数を取得する

<?php
function foo($test, $bar = PHP_INT_MIN)
{
echo $test . $bar;
}

$function = new ReflectionFunction('foo');

foreach ($function->getParameters() as $param) {
echo 'Name: ' . $param->getName() . PHP_EOL;
if ($param->isOptional()) {
echo 'Default value: ' . $param->getDefaultValueConstantName() . PHP_EOL;
}
echo PHP_EOL;
}
?>

上の例の出力は以下となります。

Name: test

Name: bar
Default value: PHP_INT_MIN

参考

  • ReflectionParameter::isOptional() - 省略可能であるかどうかを調べる
  • ReflectionParameter::isDefaultValueConstant() - このパラメータのデフォルト値が定数かどうかを返す
  • ReflectionParameter::getDefaultValue() - パラメータのデフォルト値を取得する

User Contributed Notes

There are no user contributed notes for this page.


パラメータ名を取得する

  • ≪ ReflectionParameter::getDefaultValueConstantName
  • ReflectionParameter::getPosition ≫
  • PHP Manual
  • ReflectionParameter
  • パラメータ名を取得する

ReflectionParameter::getName

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::getName — パラメータ名を取得する

説明

public ReflectionParameter::getName(): string

パラメータ名を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

パラメータ名を返します。

参考

  • ReflectionParameter::getValue()

User Contributed Notes

mike 25-May-2015 07:26
FYI, it returns the parameter name without the dollars($) sign at the start.


パラメータの位置を取得する

  • ≪ ReflectionParameter::getName
  • ReflectionParameter::getType ≫
  • PHP Manual
  • ReflectionParameter
  • パラメータの位置を取得する

ReflectionParameter::getPosition

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

ReflectionParameter::getPosition — パラメータの位置を取得する

説明

public ReflectionParameter::getPosition(): int

パラメータの位置を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

パラメータの位置を取得します。左から右へ数え、最初のパラメータが 0 番目となります。

参考

  • ReflectionParameter::getName() - パラメータ名を取得する

User Contributed Notes

There are no user contributed notes for this page.


引数の型を取得する

  • ≪ ReflectionParameter::getPosition
  • ReflectionParameter::hasType ≫
  • PHP Manual
  • ReflectionParameter
  • 引数の型を取得する

ReflectionParameter::getType

(PHP 7, PHP 8)

ReflectionParameter::getType — 引数の型を取得する

説明

public ReflectionParameter::getType(): ?ReflectionType

引数の型を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

引数の型が指定されていれば ReflectionType オブジェクトを返します。 そうでなければ null を返します。

例

例1 PHP 7.1.0 以降での ReflectionParameter::getType() の使い方

PHP 7.1.0 以降では、 ReflectionType::__toString() が推奨されなくなったので、 ReflectionParameter::getType() は ReflectionNamedType を返す 可能性があります。 この場合、引数の方の名前を取得するために、ReflectionNamedType() が利用可能です。

<?php
function someFunction(int $param, $param2) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParams = $reflectionFunc->getParameters();
$reflectionType1 = $reflectionParams[0]->getType();
$reflectionType2 = $reflectionParams[1]->getType();

assert($reflectionType1 instanceof ReflectionNamedType);
echo $reflectionType1->getName(), PHP_EOL;
var_dump($reflectionType2);
?>

上の例の出力は以下となります。

int
NULL

例2 PHP 7.1.0 より前の ReflectionParameter::getType() の使い方

<?php
function someFunction(int $param, $param2) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParams = $reflectionFunc->getParameters();
$reflectionType1 = $reflectionParams[0]->getType();
$reflectionType2 = $reflectionParams[1]->getType();

echo $reflectionType1, PHP_EOL;
var_dump($reflectionType2);
?>

上の例の PHP 7.0 での出力は、このようになります。

int
NULL

例3 PHP 8.0.0 以降の ReflectionParameter::getType() の使い方

PHP 8.0.0 以降では、このメソッドは ReflectionNamedType や ReflectionUnionType のインスタンスを返す可能性があります。 後者は前者の集合です。後者の型を解析するには、 ReflectionNamedType の配列に正規化する方が便利です。 以下の例に示す関数は、0 または ReflectionNamedType のインスタンスの配列を返します。

<?php
function getAllTypes(ReflectionParameter $reflectionParameter): array
{
$reflectionType = $reflectionParameter->getType();
if (!$reflectionType) return [];
return $reflectionType instanceof ReflectionUnionType
? $reflectionType->getTypes()
: [$reflectionType];
}
?>

参考

  • ReflectionParameter::hasType() - 引数が型を持つかを調べる
  • ReflectionType::__toString() - 文字列に変換する

User Contributed Notes

Will Beaumont 05-Sep-2020 04:26
As of 7.1, if a parameter type is found then this method returns an instance of ReflectionNamedType (https://www.php.net/manual/en/class.reflectionnamedtype.php), a subclass of ReflectionType.


引数が型を持つかを調べる

  • ≪ ReflectionParameter::getType
  • ReflectionParameter::isArray ≫
  • PHP Manual
  • ReflectionParameter
  • 引数が型を持つかを調べる

ReflectionParameter::hasType

(PHP 7, PHP 8)

ReflectionParameter::hasType — 引数が型を持つかを調べる

説明

public ReflectionParameter::hasType(): bool

引数が、関連する型を持つかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

型が指定されていれば true を。そうでなければ false を返します。

例

例1 ReflectionParameter::hasType() の例

<?php
function someFunction(string $param, $param2 = null) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParams = $reflectionFunc->getParameters();

var_dump($reflectionParams[0]->hasType());
var_dump($reflectionParams[1]->hasType());

上の例の出力は、 たとえば以下のようになります。

bool(true)
bool(false)

参考

  • ReflectionParameter::getType() - 引数の型を取得する

User Contributed Notes

There are no user contributed notes for this page.


配列を受け取るパラメータであるかどうかを調べる

  • ≪ ReflectionParameter::hasType
  • ReflectionParameter::isCallable ≫
  • PHP Manual
  • ReflectionParameter
  • 配列を受け取るパラメータであるかどうかを調べる

ReflectionParameter::isArray

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionParameter::isArray — 配列を受け取るパラメータであるかどうかを調べる

警告

この関数は PHP 8.0.0 で 非推奨になります。この関数に頼らないことを強く推奨します。

配列を受け取るパラメータかどうかを調べる別の方法については、下に示す例を参照ください。

説明

public ReflectionParameter::isArray(): bool

配列を受け取るパラメータであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

配列を受け取るパラメータである場合に true、それ以外の場合に false を返します。

例

例1 PHP 8.0.0 以降で同等のことを行うには

PHP 8.0.0 以降では、以下のコードは union の一部であった場合も含めて、配列型を宣言しているかどうかを報告します。

<?php
function declaresArray(ReflectionParameter $reflectionParameter): bool
{
$reflectionType = $reflectionParameter->getType();
if (!$reflectionType) return false;
$types = $reflectionType instanceof ReflectionUnionType
? $reflectionType->getTypes()
: [$reflectionType];
return in_array('array', array_map(fn(ReflectionNamedType $t) => $t->getName(), $types));
}
?>

参考

  • ReflectionParameter::isOptional() - 省略可能であるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


パラメータが callable かどうかを返す

  • ≪ ReflectionParameter::isArray
  • ReflectionParameter::isDefaultValueAvailable ≫
  • PHP Manual
  • ReflectionParameter
  • パラメータが callable かどうかを返す

ReflectionParameter::isCallable

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

ReflectionParameter::isCallable — パラメータが callable かどうかを返す

警告

この関数は PHP 8.0.0 で 非推奨になります。この関数に頼らないことを強く推奨します。

パラメータが callable かどうかを調べる別の方法については、下に示す例を参照ください。

説明

public ReflectionParameter::isCallable(): bool

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

例

例1 PHP 8.0.0 以降で同等のことを行うには

PHP 8.0.0 以降では、union 型の一部であるかも含めて、 以下のコードが callable 型を受け取るかどうかを報告します。

<?php
function declaresCallable(ReflectionParameter $reflectionParameter): bool
{
$reflectionType = $reflectionParameter->getType();
if (!$reflectionType) return false;
$types = $reflectionType instanceof ReflectionUnionType
? $reflectionType->getTypes()
: [$reflectionType];
return in_array('callable', array_map(fn(ReflectionNamedType $t) => $t->getName(), $types));
}
?>

戻り値

パラメータが callable の場合に true、そうではない場合に false を返します。 失敗した場合は null を返します。

User Contributed Notes

me at abiusx dot com 15-Jan-2016 05:18
Apparently this does not return true for callback arguments to many of the internal functions, such as array_map and array_walk.


デフォルト値が存在するかどうかを調べる

  • ≪ ReflectionParameter::isCallable
  • ReflectionParameter::isDefaultValueConstant ≫
  • PHP Manual
  • ReflectionParameter
  • デフォルト値が存在するかどうかを調べる

ReflectionParameter::isDefaultValueAvailable

(PHP 5 >= 5.0.3, PHP 7, PHP 8)

ReflectionParameter::isDefaultValueAvailable — デフォルト値が存在するかどうかを調べる

説明

public ReflectionParameter::isDefaultValueAvailable(): bool

パラメータのデフォルト値が存在するかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

デフォルト値が存在する場合に true、それ以外の場合に false を返します。

参考

  • ReflectionParameter::getDefaultValue() - パラメータのデフォルト値を取得する
  • ReflectionParameter::isDefaultValueConstant() - このパラメータのデフォルト値が定数かどうかを返す
  • ReflectionParameter::getName() - パラメータ名を取得する

User Contributed Notes

There are no user contributed notes for this page.


このパラメータのデフォルト値が定数かどうかを返す

  • ≪ ReflectionParameter::isDefaultValueAvailable
  • ReflectionParameter::isOptional ≫
  • PHP Manual
  • ReflectionParameter
  • このパラメータのデフォルト値が定数かどうかを返す

ReflectionParameter::isDefaultValueConstant

(PHP 5 >= 5.4.6, PHP 7, PHP 8)

ReflectionParameter::isDefaultValueConstant — このパラメータのデフォルト値が定数かどうかを返す

説明

public ReflectionParameter::isDefaultValueConstant(): bool

このパラメータのデフォルト値が定数かどうかを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

デフォルト値が定数である場合は true を返します。 そうでなければ false を返します。

参考

  • ReflectionParameter::getDefaultValueConstantName() - デフォルト値が定数あるいは null の場合に、その定数名を返す
  • ReflectionParameter::isDefaultValueAvailable() - デフォルト値が存在するかどうかを調べる

User Contributed Notes

kristianoye at gmail dot com 25-May-2015 09:39
This method returns true only if the parameter's default value is set to a named constant.  e.g.

class Foo {
   const OPTION_MULTIGET = 1;

   //Method 1
   public function setGetOptions($opts=0);

   //Method 2
   public function setMultiGetOptions($opts=Foo::OPTION_MULTIGET);
}

Method 1's first ReflectionParameter will return isDefaultValueConstant() = false (0 is a "constant"/static value but not a named constant) and Method 2's will return isDefaultValueConsntant() = true.


省略可能であるかどうかを調べる

  • ≪ ReflectionParameter::isDefaultValueConstant
  • ReflectionParameter::isPassedByReference ≫
  • PHP Manual
  • ReflectionParameter
  • 省略可能であるかどうかを調べる

ReflectionParameter::isOptional

(PHP 5 >= 5.0.3, PHP 7, PHP 8)

ReflectionParameter::isOptional — 省略可能であるかどうかを調べる

説明

public ReflectionParameter::isOptional(): bool

パラメータが省略可能であるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

省略可能である場合に true、それ以外の場合に false を返します。

参考

  • ReflectionParameter::getName() - パラメータ名を取得する

User Contributed Notes

There are no user contributed notes for this page.


参照渡しかどうかを調べる

  • ≪ ReflectionParameter::isOptional
  • ReflectionParameter::isVariadic ≫
  • PHP Manual
  • ReflectionParameter
  • 参照渡しかどうかを調べる

ReflectionParameter::isPassedByReference

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::isPassedByReference — 参照渡しかどうかを調べる

説明

public ReflectionParameter::isPassedByReference(): bool

パラメータが参照渡しであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

パラメータが参照渡しである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionParameter::getName() - パラメータ名を取得する

User Contributed Notes

There are no user contributed notes for this page.


引数が可変長の個数であるかをチェックする

  • ≪ ReflectionParameter::isPassedByReference
  • ReflectionParameter::__toString ≫
  • PHP Manual
  • ReflectionParameter
  • 引数が可変長の個数であるかをチェックする

ReflectionParameter::isVariadic

(PHP 5 >= 5.6.0, PHP 7, PHP 8)

ReflectionParameter::isVariadic — 引数が可変長の個数であるかをチェックする

説明

public ReflectionParameter::isVariadic(): bool

引数が 可変長引数リスト として宣言されているかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

引数が可変長であれば true を、そうでなければ false を返します。

User Contributed Notes

There are no user contributed notes for this page.


文字列に変換する

  • ≪ ReflectionParameter::isVariadic
  • ReflectionProperty ≫
  • PHP Manual
  • ReflectionParameter
  • 文字列に変換する

ReflectionParameter::__toString

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::__toString — 文字列に変換する

説明

public ReflectionParameter::__toString(): string

人間が読めるパラメータの説明を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

文字列を返します。

例

例1 ReflectionParameter::__toString() の例

<?php
echo new ReflectionParameter('substr', 0);
?>

上の例の出力は、 たとえば以下のようになります。

Parameter #0 [ <required> string $string ]

参考

  • ReflectionParameter::export() - エクスポートする
  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionProperty クラス

(PHP 5, PHP 7, PHP 8)

はじめに

ReflectionProperty クラスは クラスのプロパティについての情報を報告します。

クラス概要

class ReflectionProperty implements Reflector {
/* 定数 */
public const int IS_STATIC;
public const int IS_READONLY;
public const int IS_PUBLIC;
public const int IS_PROTECTED;
public const int IS_PRIVATE;
/* プロパティ */
public string $name;
public string $class;
/* メソッド */
public __construct(object|string $class, string $property)
private __clone(): void
public static export(mixed $class, string $name, bool $return = ?): string
public getAttributes(?string $name = null, int $flags = 0): array
public getDeclaringClass(): ReflectionClass
public getDefaultValue(): mixed
public getDocComment(): string|false
public getModifiers(): int
public getName(): string
public getType(): ?ReflectionType
public getValue(?object $object = null): mixed
public hasDefaultValue(): bool
public hasType(): bool
public isDefault(): bool
public isInitialized(?object $object = null): bool
public isPrivate(): bool
public isPromoted(): bool
public isProtected(): bool
public isPublic(): bool
public isReadOnly(): bool
public isStatic(): bool
public setAccessible(bool $accessible): void
public setValue(object $object, mixed $value): void
public __toString(): string
}

プロパティ

name

プロパティ名。読み込み専用で、書き込もうとすると ReflectionException をスローします。

class

プロパティが定義されているクラス名。読み込み専用で、書き込もうとすると ReflectionException をスローします。

定義済み定数

ReflectionProperty の修飾子

ReflectionProperty::IS_STATIC

static プロパティを示します。 PHP 7.4.0 より前のバージョンでは、この値は 1 でした。

ReflectionProperty::IS_READONLY

readonly プロパティを示します。 PHP 8.1.0 以降で利用可能です。

ReflectionProperty::IS_PUBLIC

public プロパティを示します。 PHP 7.4.0 より前のバージョンでは、この値は 256 でした。

ReflectionProperty::IS_PROTECTED

protected プロパティを示します。 PHP 7.4.0 より前のバージョンでは、この値は 512 でした。

ReflectionProperty::IS_PRIVATE

private プロパティを示します。 PHP 7.4.0 より前のバージョンでは、この値は 1024 でした。

注意:

これらの定数の値は、PHP のバージョンが異なると変更される可能性があります。 これらの値を直接用いず、常に定数を使うことを推奨します。

変更履歴

バージョン | 説明
8.0.0 | ReflectionProperty::export() は、削除されました。

目次

  • ReflectionProperty::__clone — クローンする
  • ReflectionProperty::__construct — ReflectionProperty オブジェクトを作成する
  • ReflectionProperty::export — エクスポートする
  • ReflectionProperty::getAttributes — アトリビュートを取得する
  • ReflectionProperty::getDeclaringClass — 宣言しているクラスを取得する
  • ReflectionProperty::getDefaultValue — プロパティで宣言されたデフォルト値を返す
  • ReflectionProperty::getDocComment — プロパティのドキュメントコメントを取得する
  • ReflectionProperty::getModifiers — プロパティの修飾子を取得する
  • ReflectionProperty::getName — プロパティ名を取得する
  • ReflectionProperty::getType — プロパティの型を取得する
  • ReflectionProperty::getValue — 値を取得する
  • ReflectionProperty::hasDefaultValue — デフォルト値が宣言されているかをチェックする
  • ReflectionProperty::hasType — プロパティが型を持つかをチェックする
  • ReflectionProperty::isDefault — デフォルトプロパティであるかどうかを調べる
  • ReflectionProperty::isInitialized — プロパティが初期化されているかをチェックする
  • ReflectionProperty::isPrivate — private プロパティであるかどうかを調べる
  • ReflectionProperty::isPromoted — プロパティがコンストラクタの引数から昇格したものかを調べる
  • ReflectionProperty::isProtected — protected プロパティであるかどうかを調べる
  • ReflectionProperty::isPublic — public プロパティであるかどうかを調べる
  • ReflectionProperty::isReadOnly — プロパティが readonly かを調べる
  • ReflectionProperty::isStatic — staticプロパティであるかどうかを調べる
  • ReflectionProperty::setAccessible — プロパティのアクセス範囲を設定する
  • ReflectionProperty::setValue — プロパティの値を設定する
  • ReflectionProperty::__toString — 文字列に変換する

User Contributed Notes

Nanhe Kumar 06-Jan-2014 12:36
<?php
//serialize static properties (class variable)

class Student {

    private $members = array();
    protected $name;
    public static $noOfStudent;

    public function __construct($name = 'Nanhe Kumar') {
        $this->name = $name;
        Student::$noOfStudent++;
    }

    public function __sleep() {
        $vars = get_class_vars(get_class($this));
        foreach ($vars as $key => $val) {
            if (!empty($val))
                $this->members[$key] = $val;
        }
        return array_keys(get_object_vars($this));
    }

    public function __wakeup() {
        foreach ($this->members as $key => $val) {
            $prop = new ReflectionProperty(get_class($this), $key);
            $prop->setValue(get_class($this), $val);
        }
        $this->members = array();
    }

    public function getTotalStudent() {
        return self::$noOfStudent;
    }

}

$so1 = new Student();
$so2 = new Student();
$serialized = serialize($so1);
print_r($serialized); //O:7:"Student":2:{s:16:"Studentmembers";a:1:{s:11:"noOfStudent";i:2;}s:7:"*name";s:11:"Nanhe Kumar";}
$unserialized = unserialize($serialized);
print_r($unserialized); //Student Object ( [members:Student:private] => Array ( ) [name:protected] => Nanhe Kumar )
echo Student::$noOfStudent; //2
?>
rasmus at mindplay dot dk 30-Jul-2010 05:06
I think a more accurate explanation is this:

The Reflection classes are designed to reflect upon the source code of an application, not on any runtime information.

I think you misunderstand the ReflectionProperty constructor in your example above. The fact that it accepts an object as argument is just a convenience feature - you are actually inspecting the class of that object, not the object itself, so it's basically equivalent to:

<?php

// works fine
$Reflection = new ReflectionProperty(get_class($a), 'a');

// throws exception
$Reflection = new ReflectionProperty(get_class($a), 'foo');

?>

Getting the class of the object you're passing in is implied, since inspecting a defined property is the purpose of this class.

In your example, $a->foo is a dynamic member - it is not defined as a member of class, so there is no defining class reference, line number, default value, etc. - which means, there is nothing to reflect upon.

Clearly this very useful library could use some real documentation...


クローンする

  • ≪ ReflectionProperty
  • ReflectionProperty::__construct ≫
  • PHP Manual
  • ReflectionProperty
  • クローンする

ReflectionProperty::__clone

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::__clone — クローンする

説明

private ReflectionProperty::__clone(): void

クローンします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

変更履歴

バージョン | 説明
8.1.0 | このメソッドは、final ではなくなりました。

参考

  • ReflectionProperty::export() - エクスポートする
  • オブジェクトのクローン作成

User Contributed Notes

There are no user contributed notes for this page.


ReflectionProperty オブジェクトを作成する

  • ≪ ReflectionProperty::__clone
  • ReflectionProperty::export ≫
  • PHP Manual
  • ReflectionProperty
  • ReflectionProperty オブジェクトを作成する

ReflectionProperty::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::__construct — ReflectionProperty オブジェクトを作成する

説明

public ReflectionProperty::__construct(object|string $class, string $property)

パラメータ

class

リフレクションするクラス、またはオブジェクトの名前を含む文字列。

property

調べたいプロパティの名前。

エラー / 例外

private あるいは protected なプロパティの値を取得あるいは設定しようとすると、 例外がスローされます。

例

例1 ReflectionProperty::__construct() の例

<?php

class Str
{
public $length = 5;
}

// ReflectionProperty クラスのインスタンスを作成します
$prop = new ReflectionProperty('Str', 'length');

// 基本情報を表示します
printf(
"===> The%s%s%s%s property '%s' (which was %s)\n" .
" having the modifiers %s\n",
$prop->isPublic() ? ' public' : '',
$prop->isPrivate() ? ' private' : '',
$prop->isProtected() ? ' protected' : '',
$prop->isStatic() ? ' static' : '',
$prop->getName(),
$prop->isDefault() ? 'declared at compile-time' : 'created at run-time',
var_export(Reflection::getModifierNames($prop->getModifiers()), true)
);

// Str のインスタンスを作成します
$obj= new Str();

// 現在の値を取得します
printf("---> Value is: ");
var_dump($prop->getValue($obj));

// 値を変更します
$prop->setValue($obj, 10);
printf("---> Setting value to 10, new value is: ");
var_dump($prop->getValue($obj));

// オブジェクトを出力します
var_dump($obj);

?>

上の例の出力は、 たとえば以下のようになります。

===> The public property 'length' (which was declared at compile-time)
     having the modifiers array (
  0 => 'public',
)
---> Value is: int(5)
---> Setting value to 10, new value is: int(10)
object(Str)#2 (1) {
  ["length"]=>
  int(10)
}

例2 ReflectionProperty クラスを用いた、private および protected プロパティの値の取得

<?php

class Foo
{
public $x = 1;
protected $y = 2;
private $z = 3;
}

$obj = new Foo;

$prop = new ReflectionProperty('Foo', 'y');
$prop->setAccessible(true);
var_dump($prop->getValue($obj)); // int(2)

$prop = new ReflectionProperty('Foo', 'z');
$prop->setAccessible(true);
var_dump($prop->getValue($obj)); // int(2)

?>

上の例の出力は、 たとえば以下のようになります。

int(2)
int(3)

参考

  • ReflectionProperty::getName() - プロパティ名を取得する
  • コンストラクタ

User Contributed Notes

geoffsmiths at hotmail dot com 05-Jul-2017 12:20
At example #2: the comment // int(2) is stated while the value for the private property is actually 3. (private $z = 3;)

var_dump($prop->getValue($obj)); // This should be int(3)


エクスポートする

  • ≪ ReflectionProperty::__construct
  • ReflectionProperty::getAttributes ≫
  • PHP Manual
  • ReflectionProperty
  • エクスポートする

ReflectionProperty::export

(PHP 5, PHP 7)

ReflectionProperty::export — エクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static ReflectionProperty::export(mixed $class, string $name, bool $return = ?): string

エクスポートします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

argument

エクスポートするリフレクション。

name

プロパティ名。

return

true に設定すると、エクスポートを発行するのではなく返します。 false (デフォルト) の場合はその逆です。

戻り値

参考

  • ReflectionProperty::__toString() - 文字列に変換する

User Contributed Notes

antonfedonyuk at gmail dot com 03-Sep-2020 03:16
Note: export() method is deprecated in PHP 7.4, use __toString() instead - this method return same result.


アトリビュートを取得する

  • ≪ ReflectionProperty::export
  • ReflectionProperty::getDeclaringClass ≫
  • PHP Manual
  • ReflectionProperty
  • アトリビュートを取得する

ReflectionProperty::getAttributes

(PHP 8)

ReflectionProperty::getAttributes — アトリビュートを取得する

説明

public ReflectionProperty::getAttributes(?string $name = null, int $flags = 0): array

このクラスプロパティで宣言されている全てのアトリビュートを、 ReflectionAttribute の配列として返します。

パラメータ

name

指定したクラス名にマッチするアトリビュートの、 ReflectionAttribute のみを含むようにフィルタします。

flags

name が指定されていた場合に、 結果をどうフィルタするかを決めるフラグ。

デフォルトは 0 です。 この場合、アトリビュートのクラス名が name であるものだけを返します。

他の利用可能なオプションは、 ReflectionAttribute::IS_INSTANCEOF です。 この場合、フィルタリングに instanceof を使います。

戻り値

アトリビュートの配列を、 ReflectionAttribute オブジェクトの配列として返します。

例

例1 基本的な使い方

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

class Basket {
#[Fruit]
#[Red]
public string $apple = 'apple';
}

$property = new ReflectionProperty('Basket', 'apple');
$attributes = $property->getAttributes();
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
    [1] => Red
)

例2 クラス名で結果をフィルタする

<?php
#[Attribute]
class Fruit {
}

#[Attribute]
class Red {
}

class Basket {
#[Fruit]
#[Red]
public string $apple = 'apple';
}

$property = new ReflectionProperty('Basket', 'apple');
$attributes = $property->getAttributes('Fruit');
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Fruit
)

例3 クラス名、かつ継承も考慮して結果をフィルタする

<?php
interface Color {
}

#[Attribute]
class Fruit {
}

#[Attribute]
class Red implements Color {
}

class Basket {
#[Fruit]
#[Red]
public string $apple = 'apple';
}

$property = new ReflectionProperty('Basket', 'apple');
$attributes = $property->getAttributes('Color', ReflectionAttribute::IS_INSTANCEOF);
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

上の例の出力は以下となります。

Array
(
    [0] => Red
)

参考

  • ReflectionClass::getAttributes() - アトリビュートを取得する
  • ReflectionClassConstant::getAttributes() - アトリビュートを取得する
  • ReflectionFunctionAbstract::getAttributes() - アトリビュートを取得する
  • ReflectionParameter::getAttributes() - アトリビュートを取得する

User Contributed Notes

There are no user contributed notes for this page.


宣言しているクラスを取得する

  • ≪ ReflectionProperty::getAttributes
  • ReflectionProperty::getDefaultValue ≫
  • PHP Manual
  • ReflectionProperty
  • 宣言しているクラスを取得する

ReflectionProperty::getDeclaringClass

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::getDeclaringClass — 宣言しているクラスを取得する

説明

public ReflectionProperty::getDeclaringClass(): ReflectionClass

宣言しているクラスを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionClass オブジェクトを返します。

参考

  • ReflectionProperty::getName() - プロパティ名を取得する

User Contributed Notes

metamarkers at gmail dot com 17-May-2013 06:30
If you're reflecting an object and get the declaring class of a property that's set but wasn't declared in any class, it returns the class of the instance.

<?php

class X {

}

$x = new X();
$x->foo = 'bar';
$reflection = new ReflectionObject($x);
echo $reflection->getProperty('foo')->getDeclaringClass()->getName(); // X

?>


プロパティで宣言されたデフォルト値を返す

  • ≪ ReflectionProperty::getDeclaringClass
  • ReflectionProperty::getDocComment ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティで宣言されたデフォルト値を返す

ReflectionProperty::getDefaultValue

(PHP 8)

ReflectionProperty::getDefaultValue — プロパティで宣言されたデフォルト値を返す

説明

public ReflectionProperty::getDefaultValue(): mixed

プロパティに明示または黙示的に宣言されているデフォルト値を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

プロパティに何かしらデフォルト値が存在する場合(nullも含みます)、 それを返します。デフォルト値がない場合、null を返します。 デフォルト値が null の場合と、型付きプロパティが初期化されてない場合は区別できません。 それらを区別するには、ReflectionProperty::hasDefaultValue() を使って下さい。

例

例1 ReflectionProperty::getDefaultValue() の例

<?php
class Foo {
public $bar = 1;
public ?int $baz;
public int $boing = 0;
public function __construct(public string $bak = "default") { }
}

$ro = new ReflectionClass(Foo::class);
var_dump($ro->getProperty('bar')->getDefaultValue());
var_dump($ro->getProperty('baz')->getDefaultValue());
var_dump($ro->getProperty('boing')->getDefaultValue());
var_dump($ro->getProperty('bak')->getDefaultValue());
?>

上の例の出力は以下となります。

int(1)
NULL
int(0)
NULL

参考

  • ReflectionProperty::hasDefaultValue() - デフォルト値が宣言されているかをチェックする

User Contributed Notes

rwalker dot php at gmail dot com 14-Apr-2021 01:49
An equivalent for PHP 7:

<?php
$reflectionProperty = new \ReflectionProperty(Foo::class, 'bar');

//PHP 8:
$defaultValue = $reflectionProperty->getDefaultValue();

//PHP 7:
$defaultValue = $reflectionProperty->getDeclaringClass()->getDefaultProperties()['bar'] ?? null;
?>


プロパティのドキュメントコメントを取得する

  • ≪ ReflectionProperty::getDefaultValue
  • ReflectionProperty::getModifiers ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティのドキュメントコメントを取得する

ReflectionProperty::getDocComment

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

ReflectionProperty::getDocComment — プロパティのドキュメントコメントを取得する

説明

public ReflectionProperty::getDocComment(): string|false

プロパティのドキュメントコメントを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

プロパティのドキュメントコメントを返します。 ドキュメントコメントが存在しない場合は、false を返します。

例

例1 ReflectionProperty::getDocComment() の例

<?php
class Str
{
/**
* @var int The length of the string
*/
public $length = 5;
}

$prop = new ReflectionProperty('Str', 'length');

var_dump($prop->getDocComment());

?>

上の例の出力は、 たとえば以下のようになります。

string(53) "/**
     * @var int  The length of the string
     */"

例2 複数のプロパティを宣言している場合

複数のプロパティの宣言が、 単一のドキュメントコメントの後に行われている場合、 ドキュメントコメントは最初のプロパティのみを参照します。

<?php
class Foo
{
/** @var string */
public $a, $b;
}
$class = new \ReflectionClass('Foo');
foreach ($class->getProperties() as $property) {
echo $property->getName() . ': ' . var_export($property->getDocComment(), true) . PHP_EOL;
}
?>

上の例の出力は以下となります。

a: '/** @var string */'
b: false

参考

  • ReflectionProperty::getModifiers() - プロパティの修飾子を取得する
  • ReflectionProperty::getName() - プロパティ名を取得する
  • ReflectionProperty::getValue() - 値を取得する

User Contributed Notes

Jim 23-May-2022 02:51
Unfortunately, inherited doc comments are not supported.

<?php

class A {
    /**
     * @var string
     */
    public string $prop = 'A';
}

class B extends A {
    public string $prop = 'B';
}

$prop = new ReflectionProperty('B', 'prop');
var_dump($prop->getDocComment());

?>

results in FALSE


プロパティの修飾子を取得する

  • ≪ ReflectionProperty::getDocComment
  • ReflectionProperty::getName ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティの修飾子を取得する

ReflectionProperty::getModifiers

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::getModifiers — プロパティの修飾子を取得する

説明

public ReflectionProperty::getModifiers(): int

修飾子を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

修飾子の数値表現を返します。 これらの修飾子の実際の意味は、 定義済みの定数 で説明しています。

参考

  • ReflectionProperty::isPrivate() - private プロパティであるかどうかを調べる
  • Reflection::getModifierNames() - 修飾子の名前を取得する

User Contributed Notes

There are no user contributed notes for this page.


プロパティ名を取得する

  • ≪ ReflectionProperty::getModifiers
  • ReflectionProperty::getType ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティ名を取得する

ReflectionProperty::getName

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::getName — プロパティ名を取得する

説明

public ReflectionProperty::getName(): string

プロパティ名を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

調べているプロパティの名前を返します。

参考

  • ReflectionProperty::getValue() - 値を取得する

User Contributed Notes

There are no user contributed notes for this page.


プロパティの型を取得する

  • ≪ ReflectionProperty::getName
  • ReflectionProperty::getValue ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティの型を取得する

ReflectionProperty::getType

(PHP 7 >= 7.4.0, PHP 8)

ReflectionProperty::getType — プロパティの型を取得する

説明

public ReflectionProperty::getType(): ?ReflectionType

プロパティに関連付けられた型を取得する

パラメータ

この関数にはパラメータはありません。

戻り値

プロパティが型を持っていれば、ReflectionType を返します。そうでなければ、 null を返します。

例

例1 ReflectionProperty::getType() の例

<?php
class User
{
public string $name;
}

$rp = new ReflectionProperty('User', 'name');
echo $rp->getType()->getName();
?>

上の例の出力は以下となります。

string

参考

  • ReflectionProperty::hasType() - プロパティが型を持つかをチェックする
  • ReflectionProperty::isInitialized() - プロパティが初期化されているかをチェックする

User Contributed Notes

andr3medeiros at gmail dot com 06-Aug-2020 10:31
<?php

namespace App\Traits;

use ReflectionClass;
use Illuminate\Support\Str;
use InvalidArgumentException;

trait FieldTypeTrait {

  protected function getType(String $field, ReflectionClass $reflectedClass = null)
  {
    if(is_null($reflectedClass)) {
      $reflectedClass = new ReflectionClass($this);
    }

    if ($reflectedClass->hasProperty($field)) {
      return $this->getFieldType($field, $reflectedClass);
    }

    return null;
  }

  protected function enumValue(String $field) {
    if($this->isEnum($field)) {
      throw new InvalidArgumentException("'$field' is not an enum");
    }

    $type = $this->getType($field);
    $enumClass = $type->name;

    return new $enumClass($this->{$field});
  }

  protected function isEnum(String $field)
  {
    $type = $this->getType($field);

    if(!is_object($type)) {
      return false;
    }

    $className = $type->name;

    $reflectedClass = new ReflectionClass($className);
    $reflectedParent = $reflectedClass->getParentClass();

    return $reflectedParent->getName() == 'MyCLabs\Enum\Enum';
  }

  private function getUseStatements(): array
  {
    $reflectedThis = new ReflectionClass($this);
    $contents = file_get_contents($reflectedThis->getFileName());

    $matches = [];

    preg_match_all("/use ([\w\\\\]+)( as \w+)*/", $contents, $matches);

    $results = [];
    foreach ($matches[1] as $index => $value) {
      $results[] = [
        'namespace' => $value,
        'alias' => isset($matches[2][$index]) ? str_replace(' as ', '', $matches[2][$index]) : null
      ];
    }

    return $results;
  }

  private function getFieldType(String $field, ReflectionClass $reflectedClass)
  {
    $docComment = $reflectedClass->getProperty($field)->getDocComment();
    $type = $this->getFieldTypeByFieldDocComment($docComment);

    if (!is_object($type)) {
      $fromClass = $this->getTypeByClassDocComment($field, $reflectedClass->getDocComment());

      if(is_object($fromClass)) {
          return $fromClass;
      }
    }

    return $type;
  }

  private function getFieldTypeByFieldDocComment(String $docComment)
  {
    $matches = [];

    if (preg_match("/\@var (\w+)(\[\])*/", $docComment, $matches) === 1) {

      if (count($matches) > 0) {
        $type = $matches[1];
        $isArray = isset($matches[2]);
        $fullyQualifiedName = $this->getFullyQualifiedName($type);

        if (class_exists($fullyQualifiedName)) {
          return (object) [
            'name' => $fullyQualifiedName,
            'array' => $isArray
          ];
        }
      }

      return $type;
    }
  }

  private function getTypeByClassDocComment(String $field, String $docComment)
  {
    $matches = [];

    if (preg_match_all("/\@property (\w+) (\\$\w+)/", $docComment, $matches) > 0) {
      $type = null;
      $isArray = false;

      foreach ($matches[2] as $index => $value) {
        if($value == $field) {
          $type = $matches[1][$index];
          $isArray = Str::endsWith($type, '[]');
          $type = str_replace('[]', '', $type);
        }
      }

      if ($type) {
        $fullyQualifiedName = $this->getFullyQualifiedName($type);

        if (class_exists($fullyQualifiedName)) {
          return (object) [
            'name' => $fullyQualifiedName,
            'array' => $isArray
          ];
        }
      }

      return $type;
    }
  }

  private function getFullyQualifiedName($className)
  {
    $useStatements = collect($this->getUseStatements());
    $aliasedStatement = $useStatements->where('alias', $className);

    if ($aliasedStatement) {
      return $aliasedStatement['namespace'];
    }

    $statement = $useStatements->first(function ($statement) use ($className) {
      return Str::endsWith($statement['namespace'], $className);
    });

    if ($statement) {
      return $statement['namespace'];
    }

    return null;
  }
}
email at dronov dot vg 03-Jun-2020 02:46
class User
{
    /**
     * @var string
     */
    public $name;
}

function getTypeNameFromAnnotation(string $className, string $propertyName): ?string
{
    $rp = new \ReflectionProperty($className, $propertyName);
    if (preg_match('/@var\s+([^\s]+)/', $rp->getDocComment(), $matches)) {
        return $matches[1];
    }

    return null;
}

echo getTypeNameFromAnnotation('User', 'name');

// string


値を取得する

  • ≪ ReflectionProperty::getType
  • ReflectionProperty::hasDefaultValue ≫
  • PHP Manual
  • ReflectionProperty
  • 値を取得する

ReflectionProperty::getValue

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::getValue — 値を取得する

説明

public ReflectionProperty::getValue(?object $object = null): mixed

プロパティの値を取得します。

パラメータ

object

static でないプロパティの場合は、プロパティを取得したいオブジェクトを指定しなければなりません。 オブジェクトを指定せずにデフォルトのプロパティを取得したい場合は、かわりに ReflectionClass::getDefaultProperties() を使います。

戻り値

プロパティの現在の値を返します。

変更履歴

バージョン | 説明
8.1.0 | private と protected なプロパティは ReflectionProperty::getValue() ですぐにアクセスできるようになりました。 これより前のバージョンでは、 ReflectionProperty::setAccessible() をコールすることでアクセスできるようにする必要がありました。 そうしない場合、 ReflectionException がスローされていました。
8.0.0 | object は、nullable になりました。

例

例1 ReflectionProperty::getValue() の例

<?php
class Foo {
public static $staticProperty = 'foobar';

public $property = 'barfoo';
protected $privateProperty = 'foofoo';
}

$reflectionClass = new ReflectionClass('Foo');

var_dump($reflectionClass->getProperty('staticProperty')->getValue());
var_dump($reflectionClass->getProperty('property')->getValue(new Foo));

$reflectionProperty = $reflectionClass->getProperty('privateProperty');
$reflectionProperty->setAccessible(true); // PHP 8.1.0 より前のバージョンのみ、この行の実行が必須でした
var_dump($reflectionProperty->getValue(new Foo));
?>

上の例の出力は以下となります。

string(6) "foobar"
string(6) "barfoo"
string(6) "foofoo"

参考

  • ReflectionProperty::setValue() - プロパティの値を設定する
  • ReflectionProperty::setAccessible() - プロパティのアクセス範囲を設定する
  • ReflectionClass::getDefaultProperties() - デフォルトプロパティを取得する
  • ReflectionClass::getStaticPropertyValue() - staticプロパティの値を取得する

User Contributed Notes

sergiy dot sokolenko at gmail dot com 28-Jun-2010 03:48
To allow protected and private properties to be accessed, you should use
ReflectionProperty::setAccessible(bool $accessible):

<?php
/** Class Foo with protected and private members */
class Foo {
    protected $bar = 'barrr!';
    private $baz = 'bazzz!';
}

$reflFoo = new ReflectionClass('Foo');
$reflBar = $reflFoo->getProperty('bar');
$reflBaz = $reflFoo->getProperty('baz');

// Set private and protected members accessible for getValue/setValue
$reflBar->setAccessible(true);
$reflBaz->setAccessible(true);

$foo = new Foo();
echo $reflBar->getValue($foo); // will output "barrr!"
echo $reflBaz->getValue($foo); // will output "bazzz!"

// You can also setValue
$reflBar->setValue($foo, "new value");
echo $reflBar->getValue($foo); // will output "new value"
?>


デフォルト値が宣言されているかをチェックする

  • ≪ ReflectionProperty::getValue
  • ReflectionProperty::hasType ≫
  • PHP Manual
  • ReflectionProperty
  • デフォルト値が宣言されているかをチェックする

ReflectionProperty::hasDefaultValue

(PHP 8)

ReflectionProperty::hasDefaultValue — デフォルト値が宣言されているかをチェックする

説明

public ReflectionProperty::hasDefaultValue(): bool

プロパティにデフォルト値が宣言されているかをチェックします。 暗黙の null のデフォルト値も含めてチェックが行われます。 デフォルト値が存在しない型付きプロパティ(または動的なプロパティ)の場合は、false が返されます。

パラメータ

この関数にはパラメータはありません。

戻り値

プロパティが何かしらデフォルト値を持っている場合(nullを含みます)、true を返します。 プロパティにデフォルト値が宣言されていないか、動的なプロパティの場合は、false を返します。

例

例1 ReflectionProperty::hasDefaultValue() の例

<?php
class Foo {
public $bar;
public ?int $baz;
public ?int $foo = null;
public int $boing;

public function __construct()
{
$this->ping = '';
}
}

$ro = new ReflectionObject(new Foo());
var_dump($ro->getProperty('bar')->hasDefaultValue());
var_dump($ro->getProperty('baz')->hasDefaultValue());
var_dump($ro->getProperty('foo')->hasDefaultValue());
var_dump($ro->getProperty('boing')->hasDefaultValue());
var_dump($ro->getProperty('ping')->hasDefaultValue()); // 動的なプロパティ
var_dump($ro->getProperty('pong')->hasDefaultValue()); // 未定義のプロパティ
?>

上の例の出力は以下となります。

bool(true)
bool(false)
bool(true)
bool(false)
bool(false)

Fatal error: Uncaught ReflectionException: Property Foo::$pong does not exist in example.php

参考

  • ReflectionProperty::getDefaultValue() - プロパティで宣言されたデフォルト値を返す

User Contributed Notes

There are no user contributed notes for this page.


プロパティが型を持つかをチェックする

  • ≪ ReflectionProperty::hasDefaultValue
  • ReflectionProperty::isDefault ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティが型を持つかをチェックする

ReflectionProperty::hasType

(PHP 7 >= 7.4.0, PHP 8)

ReflectionProperty::hasType — プロパティが型を持つかをチェックする

説明

public ReflectionProperty::hasType(): bool

プロパティが、自身に関連付けられた型を持つかをチェックします。

パラメータ

この関数にはパラメータはありません。

戻り値

型が指定されていれば true そうでなければ false

例

例1 ReflectionProperty::hasType() の例

<?php
class User
{
public string $name;
}

$rp = new ReflectionProperty('User', 'name');
var_dump($rp->hasType());
?>

上の例の出力は以下となります。

bool(true)

参考

  • ReflectionProperty::getType() - プロパティの型を取得する
  • ReflectionProperty::isInitialized() - プロパティが初期化されているかをチェックする

User Contributed Notes

There are no user contributed notes for this page.


デフォルトプロパティであるかどうかを調べる

  • ≪ ReflectionProperty::hasType
  • ReflectionProperty::isInitialized ≫
  • PHP Manual
  • ReflectionProperty
  • デフォルトプロパティであるかどうかを調べる

ReflectionProperty::isDefault

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::isDefault — デフォルトプロパティであるかどうかを調べる

説明

public ReflectionProperty::isDefault(): bool

そのプロパティがコンパイル時に宣言されたものなのか、実行時に動的に宣言されたものなのかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

プロパティがコンパイル時に宣言された者である場合に true、 実行時に作られたものである場合に false を返します。

例

例1 ReflectionProperty::isDefault() の例

<?php
class Foo {
public $bar;
}

$o = new Foo();
$o->bar = 42;
$o->baz = 42;

$ro = new ReflectionObject($o);
var_dump($ro->getProperty('bar')->isDefault());
var_dump($ro->getProperty('baz')->isDefault());
?>

上の例の出力は以下となります。

bool(true)
bool(false)

参考

  • ReflectionProperty::getValue() - 値を取得する

User Contributed Notes

There are no user contributed notes for this page.


プロパティが初期化されているかをチェックする

  • ≪ ReflectionProperty::isDefault
  • ReflectionProperty::isPrivate ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティが初期化されているかをチェックする

ReflectionProperty::isInitialized

(PHP 7 >= 7.4.0, PHP 8)

ReflectionProperty::isInitialized — プロパティが初期化されているかをチェックする

説明

public ReflectionProperty::isInitialized(?object $object = null): bool

プロパティが初期化されているかをチェックします。

パラメータ

object

プロパティが static でない場合、プロパティを取得する対象のオブジェクトを与えなければなりません。

戻り値

型付きのプロパティが初期化される前か、明示的に unset() されたプロパティの場合は、 false を返します。 それ以外の全てのプロパティは、 true が返されます。

エラー / 例外

プロパティがアクセス不能な場合、 ReflectionException がスローされます。 ReflectionProperty::setAccessible() を使えば、protected や private なプロパティをアクセス可能にすることが出来ます。

変更履歴

バージョン | 説明
8.0.0 | object は、nullable になりました。

例

例1 ReflectionProperty::isInitialized() の例

<?php
class User
{
public string $name;
}

$rp = new ReflectionProperty('User', 'name');
$user = new User;
var_dump($rp->isInitialized($user));
$user->name = 'Nikita';
var_dump($rp->isInitialized($user));
?>

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • ReflectionProperty::hasType() - プロパティが型を持つかをチェックする

User Contributed Notes

There are no user contributed notes for this page.


private プロパティであるかどうかを調べる

  • ≪ ReflectionProperty::isInitialized
  • ReflectionProperty::isPromoted ≫
  • PHP Manual
  • ReflectionProperty
  • private プロパティであるかどうかを調べる

ReflectionProperty::isPrivate

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::isPrivate — private プロパティであるかどうかを調べる

説明

public ReflectionProperty::isPrivate(): bool

private プロパティであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

private プロパティである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionProperty::isPublic() - public プロパティであるかどうかを調べる
  • ReflectionProperty::isProtected() - protected プロパティであるかどうかを調べる
  • ReflectionProperty::isReadOnly() - プロパティが readonly かを調べる
  • ReflectionProperty::isStatic() - staticプロパティであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


プロパティがコンストラクタの引数から昇格したものかを調べる

  • ≪ ReflectionProperty::isPrivate
  • ReflectionProperty::isProtected ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティがコンストラクタの引数から昇格したものかを調べる

ReflectionProperty::isPromoted

(PHP 8)

ReflectionProperty::isPromoted — プロパティがコンストラクタの引数から昇格したものかを調べる

説明

public ReflectionProperty::isPromoted(): bool

プロパティが コンストラクタの引数から昇格 したものかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

プロパティがコンストラクタの引数から昇格したものなら true を返します。 そうでない場合は、false を返します。

例

例1 ReflectionProperty::isPromoted() の例

<?php
class Foo {
public $baz;

public function __construct(public $bar) {}
}

$o = new Foo(42);
$o->baz = 42;

$ro = new ReflectionObject($o);
var_dump($ro->getProperty('bar')->isPromoted());
var_dump($ro->getProperty('baz')->isPromoted());
?>

上の例の出力は以下となります。

bool(true)
bool(false)

参考

  • ReflectionProperty::isDefault() - デフォルトプロパティであるかどうかを調べる
  • ReflectionProperty::isInitialized() - プロパティが初期化されているかをチェックする
  • ReflectionProperty::getValue() - 値を取得する

User Contributed Notes

There are no user contributed notes for this page.


protected プロパティであるかどうかを調べる

  • ≪ ReflectionProperty::isPromoted
  • ReflectionProperty::isPublic ≫
  • PHP Manual
  • ReflectionProperty
  • protected プロパティであるかどうかを調べる

ReflectionProperty::isProtected

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::isProtected — protected プロパティであるかどうかを調べる

説明

public ReflectionProperty::isProtected(): bool

protected プロパティであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

protected プロパティである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionProperty::isPublic() - public プロパティであるかどうかを調べる
  • ReflectionProperty::isPrivate() - private プロパティであるかどうかを調べる
  • ReflectionProperty::isReadOnly() - プロパティが readonly かを調べる
  • ReflectionProperty::isStatic() - staticプロパティであるかどうかを調べる

User Contributed Notes

Ievgen Iefimenko the_boss at bk dot ru 09-Jun-2012 09:44
<?php

/**
* Return 1 if property is public,
* else return void
*/

class Classname{
    private $variable;
}

$obj = new Classname;
$rp = new ReflectionProperty($obj,'variable');
echo $rp->isPrivate();
?>


public プロパティであるかどうかを調べる

  • ≪ ReflectionProperty::isProtected
  • ReflectionProperty::isReadOnly ≫
  • PHP Manual
  • ReflectionProperty
  • public プロパティであるかどうかを調べる

ReflectionProperty::isPublic

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::isPublic — public プロパティであるかどうかを調べる

説明

public ReflectionProperty::isPublic(): bool

public プロパティであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

public プロパティである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionProperty::isProtected() - protected プロパティであるかどうかを調べる
  • ReflectionProperty::isPrivate() - private プロパティであるかどうかを調べる
  • ReflectionProperty::isReadOnly() - プロパティが readonly かを調べる
  • ReflectionProperty::isStatic() - staticプロパティであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


プロパティが readonly かを調べる

  • ≪ ReflectionProperty::isPublic
  • ReflectionProperty::isStatic ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティが readonly かを調べる

ReflectionProperty::isReadOnly

(PHP 8 >= 8.1.0)

ReflectionProperty::isReadOnly — プロパティが readonly かを調べる

説明

public ReflectionProperty::isReadOnly(): bool

プロパティが readonly かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

プロパティが readonly の場合は true を返します。 そうでない場合、false を返します。

参考

  • ReflectionProperty::isPublic() - public プロパティであるかどうかを調べる
  • ReflectionProperty::isProtected() - protected プロパティであるかどうかを調べる
  • ReflectionProperty::isPrivate() - private プロパティであるかどうかを調べる
  • ReflectionProperty::isStatic() - staticプロパティであるかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


staticプロパティであるかどうかを調べる

  • ≪ ReflectionProperty::isReadOnly
  • ReflectionProperty::setAccessible ≫
  • PHP Manual
  • ReflectionProperty
  • staticプロパティであるかどうかを調べる

ReflectionProperty::isStatic

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::isStatic — staticプロパティであるかどうかを調べる

説明

public ReflectionProperty::isStatic(): bool

staticプロパティであるかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

staticプロパティである場合に true、それ以外の場合に false を返します。

参考

  • ReflectionProperty::isPublic() - public プロパティであるかどうかを調べる
  • ReflectionProperty::isProtected() - protected プロパティであるかどうかを調べる
  • ReflectionProperty::isPrivate() - private プロパティであるかどうかを調べる
  • ReflectionProperty::isReadOnly() - プロパティが readonly かを調べる

User Contributed Notes

There are no user contributed notes for this page.


プロパティのアクセス範囲を設定する

  • ≪ ReflectionProperty::isStatic
  • ReflectionProperty::setValue ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティのアクセス範囲を設定する

ReflectionProperty::setAccessible

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

ReflectionProperty::setAccessible — プロパティのアクセス範囲を設定する

説明

public ReflectionProperty::setAccessible(bool $accessible): void

ReflectionProperty::getValue() や ReflectionProperty::setValue() メソッド経由で、 protected や private なプロパティにアクセス可能にします。

注意: PHP 8.1.0 以降は、このメソッドをコールしても何も起こりません。 つまり、全てのプロパティはデフォルトでアクセス可能です。

パラメータ

accessible

true を指定すると、アクセスできるようになります。

戻り値

値を返しません。

例

例1 簡単なクラス定義

<?php
class MyClass
{
private $foo = 'bar';
}

$property = new ReflectionProperty("MyClass", "foo");
$property->setAccessible(true);

$obj = new MyClass();
echo $property->getValue($obj);
echo $obj->foo;
?>

上の例の出力は、 たとえば以下のようになります。

bar
Fatal error: Uncaught Error: Cannot access private property MyClass::$foo in /in/WJqTv:12

参考

  • ReflectionProperty::isPrivate() - private プロパティであるかどうかを調べる
  • ReflectionProperty::isProtected() - protected プロパティであるかどうかを調べる

User Contributed Notes

matthieu at mnapoli dot fr 19-Oct-2012 08:50
Note that the property will only become accessible using the ReflectionProperty class. The property is still private or protected in the class instances.

<?php
class MyClass {
     private $myProperty = true;
}

$class = new ReflectionClass("MyClass");
$property = $class->getProperty("myProperty");
$property->setAccessible(true);

$obj = new MyClass();
echo $property->getValue($obj); // Works
echo $obj->myProperty; // Doesn't work (error)
?>
Yzmir Ramirez 15-Oct-2010 05:31
Have you tried:

<?php

echo "PHP Version: ".phpversion()."\n";

class Foo
{
    private   $bar  = "private";
    protected $bar2 = "protected";
    public    $bar3 = "public";
}

$obj = new Foo;

$arr = (array)$obj;

print_r($arr);
?>

Output:

PHP Version: 5.2.12
Array
(
    [Foobar] => private
    [*bar2] => protected
    [bar3] => public
)

PHP Version: 5.1.6
Array
(
    [Foobar] => private
    [*bar2] => protected
    [bar3] => public
)
Rob McVey 11-Jun-2010 10:11
If you are using < PHP 5.3 and need to get the private attributes and values, you can use this method:

This is what you are doing:

<?php
$obj_with_privates = new MyObject();
$class     = get_class($obj_with_privates);
$vars     = get_object_vars($obj_with_privates);
//will not show private attributes
print_r($vars);

$reflection = new ReflectionClass( $class );
$attributes = $reflection->getProperties();
//still no private access!
print_r($attributes);
?>

This is what you should do:

<?php
$obj_with_privates = new MyObject();

$class         = get_class( $obj_with_privates );
$reflection = new ReflectionClass( $class );
$abstract    = $reflection->getMethods( ReflectionMethod::IS_ABSTRACT );
$priv_attr  = $reflection->getProperties( ReflectionProperty::IS_PRIVATE );
$privates   = array();
$parent     = get_parent_class( $class );
$child         = $class;
$constructor = $reflection->getConstructor();

//If the class has abstract methods you need to implement them
$abstr_methods = "";
if(sizeof($abstr_methods))
{
    foreach($abstract as $method)
    {
        $mname = $method->name;
        $abstr_methods .= "public function $mname(){return false;}";
    }
}

//Convert private attributes to public attributes
if(sizeof($priv_attr))
{
    $parseable = unserialize(str_replace("\0$class\0", "\0*\0", serialize($obj)));
    foreach($priv_attr as $attribute)
    {
        $aname = $attribute->name;
        $privates[$aname] = $parseable->$aname;
    }
}

$temp_child_class = "temp" . str_replace("_", "", "$class");

//You can gain access to protected attributes by extending the target class
$class_def = "
class $temp_child_class extends $class{
    $constructor
    public function reflect_getmyvars(){
        return get_object_vars(\$this);
    }
    $abstr_methods
}
";

//place class definition in memory
eval($class_def);

//generate object from dynamic class
$tcobj =@ new $temp_child_class;
//call the method we added to the object (to access protected vars)
$vars = $tcobj->reflect_getmyvars();

$attribs = array_merge($vars, $privates);

//will now show private attributes
print_r($attribs);
?>


プロパティの値を設定する

  • ≪ ReflectionProperty::setAccessible
  • ReflectionProperty::__toString ≫
  • PHP Manual
  • ReflectionProperty
  • プロパティの値を設定する

ReflectionProperty::setValue

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::setValue — プロパティの値を設定する

説明

public ReflectionProperty::setValue(object $object, mixed $value): void
public ReflectionProperty::setValue(mixed $value): void

プロパティの値を設定 (変更) します。

注意: PHP 8.3.0 以降では、このメソッドにひとつだけ引数を渡してコールすることは、推奨されなくなりました。ReflectionClass::setStaticPropertyValue() を使いましょう。

パラメータ

object

static でないプロパティの場合は、プロパティを変更したいオブジェクトを指定しなければなりません。 staticプロパティ の場合、null を指定しなければ なりません。

value

新しい値。

戻り値

値を返しません。

変更履歴

バージョン | 説明
8.3.0 | このメソッドにひとつだけ引数を渡してコールすることは、推奨されなくなりました。static プロパティを変更する場合は、代わりに ReflectionClass::setStaticPropertyValue() を使ってください。
8.1.0 | private と protected なプロパティは ReflectionProperty::setValue() ですぐにアクセスできるようになりました。 これより前のバージョンでは、 ReflectionProperty::setAccessible() をコールすることでアクセスできるようにする必要がありました。 そうしない場合、 ReflectionException がスローされていました。

例

例1 ReflectionProperty::setValue() の例

<?php
class Foo {
public static $staticProperty;

public $property;
protected $privateProperty;
}

$reflectionClass = new ReflectionClass('Foo');

// PHP 8.3 以降では、static プロパティを設定する目的で setValue メソッドを使うべきではありません。代わりに、setStaticPropertyValue() を使いましょう。
$reflectionClass->setStaticPropertyValue('staticProperty', 'foo');
var_dump(Foo::$staticProperty);

$foo = new Foo;

$reflectionClass->getProperty('property')->setValue($foo, 'bar');
var_dump($foo->property);

$reflectionProperty = $reflectionClass->getProperty('privateProperty');
$reflectionProperty->setAccessible(true); // PHP 8.1.0 より前のバージョンのみ、この行の実行が必須でした
$reflectionProperty->setValue($foo, 'foobar');
var_dump($reflectionProperty->getValue($foo));
?>

上の例の出力は以下となります。

string(3) "foo"
string(3) "bar"
string(6) "foobar"

参考

  • ReflectionProperty::getValue() - 値を取得する
  • ReflectionProperty::setAccessible() - プロパティのアクセス範囲を設定する
  • ReflectionClass::setStaticPropertyValue() - staticプロパティの値を設定する

User Contributed Notes

p stewart imperial ac uk 16-Dec-2022 03:18
setValue can be used for readonly properties, but only if the property has not yet been initialised:

<?php

class Person
{
    private readonly int $age;
    public function __construct(array $props = []) {
        if (isset($props['age'])) {
            $this->age = (int)$props['age'];
        }
    }
}

$personWithKnownAge = new Person(['age' => 50]);

$reflection = new ReflectionProperty($personWithKnownAge, 'age');
$reflection->setValue($personWithKnownAge, 10); // Fails - Age is already initialised, value cannot be changed.

$personWithUnknownAge = new Person();

$reflection = new ReflectionProperty($personWithUnknownAge, 'age');
$reflection->setValue($personWithUnknownAge, 10); // Succeeeds - Age is not yet initialised, value can be set.
?>

This can be useful for situations where it is desirable to initialise properties from outside of the defining class, for example an ORM setup where the parent class is responsible for setting properties on a model subclass instance.
temirkhan.nasukhov 10-Oct-2022 05:41
Keep in mind that setValue won't work for readonly properties.

<?php

class Person
{
    public function __construct(private readonly int $age) {}
}

$someOldPerson = new Person(80);

$reflection = new ReflectionProperty($someOldPerson, 'age');
$reflection->setValue($someOldPerson, 10); // Fatal error: Uncaught Error: Cannot modify readonly property Person::$age
me at ircmaxell dot om 22-Jun-2011 09:27
You can use ReflectionProperty::setValue to set the value on static properties as well as regular instance properties.  Simply pass null in place of the instance:

<?php
class Foo {
    protected static $bar = null;
    public static function sayBar() {
        echo self::$bar;
    }
}

$r = new ReflectionProperty('Foo', 'bar');
$r->setAccessible(true);
$r->setValue(null, 'foo');

Foo::sayBar(); // "foo"
?>


文字列に変換する

  • ≪ ReflectionProperty::setValue
  • ReflectionType ≫
  • PHP Manual
  • ReflectionProperty
  • 文字列に変換する

ReflectionProperty::__toString

(PHP 5, PHP 7, PHP 8)

ReflectionProperty::__toString — 文字列に変換する

説明

public ReflectionProperty::__toString(): string

プロパティを表現した文字列を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

文字列を返します。

参考

  • __toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionType クラス

(PHP 7, PHP 8)

はじめに

ReflectionType クラスは、 関数の引数や戻り値の型、 またはクラスのプロパティの型に関する情報を報告します。 リフレクション拡張モジュールでは、以下のサブクラスが宣言されています。

  • ReflectionNamedType (PHP 7.1.0 以降)
  • ReflectionUnionType (PHP 8.0.0 以降)
  • ReflectionIntersectionType (PHP 8.1.0 以降)

クラス概要

abstract class ReflectionType implements Stringable {
/* メソッド */
public allowsNull(): bool
public __toString(): string
}

変更履歴

バージョン | 説明
8.0.0 | ReflectionType は、抽象クラスになり、 ReflectionType::isBuiltin() は、 ReflectionNamedType::isBuiltin() に移動しました。

目次

  • ReflectionType::allowsNull — null が許されるかをチェックする
  • ReflectionType::__toString — 文字列に変換する

User Contributed Notes

Ondej Mirtes 27-Sep-2020 06:53
Method ReflectionType::getName() does not exist. This may have been virtually true in the past but not anymore. It exists on ReflectionNamedType which used to be the only child class of ReflectionType. So you could have kind of relied on that.

But in PHP 8 there's also ReflectionUnionType which doesn't have the getName() method. So in order to support PHP 8, you need to support both ReflectionNamedType and ReflectionUnionType.
benjamin dot morel at gmail dot com 18-Sep-2020 09:03
Known subclasses:

- ReflectionNamedType
- ReflectionUnionType
roland at mxchange dot org 11-Mar-2020 09:13
I guess it is <?php ReflectionNamedType::getName(); ?> ?
1franck 28-Jan-2020 08:59
For those who stumble on notice about ReflectionType::__toString() beeing deprecated, use method ReflectionType::getName() instead which is not yet documented.


null が許されるかをチェックする

  • ≪ ReflectionType
  • ReflectionType::__toString ≫
  • PHP Manual
  • ReflectionType
  • null が許されるかをチェックする

ReflectionType::allowsNull

(PHP 7, PHP 8)

ReflectionType::allowsNull — null が許されるかをチェックする

説明

public ReflectionType::allowsNull(): bool

引数が null を許容するかをチェックします。

パラメータ

この関数にはパラメータはありません。

戻り値

null が許容されるなら true を、そうでないなら false を返します。

例

例1 ReflectionType::allowsNull() の例

<?php
function someFunction(string $param, stdClass $param2 = null) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParams = $reflectionFunc->getParameters();

var_dump($reflectionParams[0]->getType()->allowsNull());
var_dump($reflectionParams[1]->getType()->allowsNull());

上の例の出力は以下となります。

bool(false)
bool(true)

参考

  • ReflectionNamedType::isBuiltin() - 組み込みの型であるかを調べる
  • ReflectionType::__toString() - 文字列に変換する
  • ReflectionParameter::getType() - 引数の型を取得する

User Contributed Notes

There are no user contributed notes for this page.


文字列に変換する

  • ≪ ReflectionType::allowsNull
  • ReflectionUnionType ≫
  • PHP Manual
  • ReflectionType
  • 文字列に変換する

ReflectionType::__toString

(PHP 7, PHP 8)

ReflectionType::__toString — 文字列に変換する

説明

public ReflectionType::__toString(): string

引数の型の名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

引数の型を返します。

変更履歴

バージョン | 説明
8.0.0 | ReflectionType::__toString() は非推奨ではなくなりました。
7.1.0 | ReflectionType::__toString() は非推奨になりました。

例

例1 ReflectionType::__toString() の例

<?php
function someFunction(string $param) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParam = $reflectionFunc->getParameters()[0];

echo $reflectionParam->getType();

上の例の出力は、 たとえば以下のようになります。

string

参考

  • ReflectionNamedType::getName() - 型の名前の文字列を取得する
  • ReflectionNamedType::isBuiltin() - 組み込みの型であるかを調べる
  • ReflectionType::allowsNull() - null が許されるかをチェックする
  • ReflectionUnionType::getTypes() - union 型に含まれる型を返す。
  • ReflectionParameter::getType() - 引数の型を取得する

User Contributed Notes

Anonymous 26-Jul-2020 04:32
Regarding this method's deprecation:

ReflectionType::__toString() was first deprecated in PHP 7.1.0 alpha1.
The deprecation notice was removed in PHP 7.1.0 RC3, before being reinstated in PHP 7.4.0 alpha1.

Starting with PHP 7.1.0 beta 3, ReflectionParameter::getType() & ReflectionFunctionAbstract::getReturnType() return instances of ReflectionNamedType instead of ReflectionType.
The ReflectionNamedType class inherits from ReflectionType but provides an additional getName() method which can be used to retrieve the type hint.

Lastly, PHP 8.0.0 alpha1 introduced the concept of union types (see https://wiki.php.net/rfc/union_types_v2). As a result, ReflectionParameter::getType() & ReflectionFunctionAbstract::getReturnType() will now return either instances of ReflectionNamedType or ReflectionUnionType depending on the type hint, both of which are descendants of ReflectionType.


ReflectionUnionType クラス

(PHP 8)

はじめに

クラス概要

class ReflectionUnionType extends ReflectionType {
/* メソッド */
public getTypes(): array
/* 継承したメソッド */
public ReflectionType::allowsNull(): bool
public ReflectionType::__toString(): string
}

目次

  • ReflectionUnionType::getTypes — union 型に含まれる型を返す。

User Contributed Notes

There are no user contributed notes for this page.


union 型に含まれる型を返す。

  • ≪ ReflectionUnionType
  • ReflectionGenerator ≫
  • PHP Manual
  • ReflectionUnionType
  • union 型に含まれる型を返す。

ReflectionUnionType::getTypes

(PHP 8)

ReflectionUnionType::getTypes — union 型に含まれる型を返す。

説明

public ReflectionUnionType::getTypes(): array

union 型に含まれるリフレクションの型を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionType オブジェクトの配列を返します。

例

例1 ReflectionUnionType::getTypes() の例

<?php
function someFunction(int|float $number) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParam = $reflectionFunc->getParameters()[0];

var_dump($reflectionParam->getType()->getTypes());

上の例の出力は、 たとえば以下のようになります。

array(2) {
    [0] =>
    class ReflectionNamedType#4(0) {
    }
    [1] =>
    class ReflectionNamedType#5(0) {
    }
}

参考

  • ReflectionType::allowsNull() - null が許されるかをチェックする
  • ReflectionParameter::getType() - 引数の型を取得する

User Contributed Notes

baptiste at pillot dot fr 08-Sep-2023 12:22
ReflectionUnionType::getTypes can return an array of ReflectionNamedType and/or ReflectionIntersectionType objects only.
baptiste at pillot dot fr 08-Sep-2023 12:12
Sorting :

Contrary to what one might expect, the returned array of ReflectionType objects will not be sorted in the same order than the types declared into the source code.

- Classes, interfaces, traits, iterable (replaced by Traversable), ReflectionIntersectionType objects, parent and self: these types will be returned first, in the order in which they were declared.
- static and all built-in types (iterable replaced by array) will come next. They will always be returned in this order: static, callable, array, string, int, float, bool (or false or true), null.

Notice that when used into an union type, iterable is an alias for Traversable|array. ReflectionUnionType::getTypes will return these both ReflectionNamedType objects, instead of a single one named 'iterable'.

Example :
<?php
class PC {}
class C extends PC {
    function f(): null|bool|float|int|parent|PC|string|iterable|(ReflectionClass&ReflectionProperty)|callable|static|self|C {}
}
echo join(', ', array_map(
    function($t) { return ($t instanceof ReflectionIntersectionType) ? '<intersection>' : $t->getName(); },
    (new ReflectionMethod('C', 'f'))->getReturnType()->getTypes()
)) . "\n";
?>

Will display :
parent, PC, Traversable, <intersection>, self, C, static, callable, array, string, int, float, bool, null

Try it: https://onlinephp.io/c/777c6


ReflectionGenerator クラス

(PHP 7, PHP 8)

はじめに

ReflectionGenerator クラスは、ジェネレータに関する情報を報告します。

クラス概要

final class ReflectionGenerator {
/* メソッド */
public __construct(Generator $generator)
public getExecutingFile(): string
public getExecutingGenerator(): Generator
public getExecutingLine(): int
public getFunction(): ReflectionFunctionAbstract
public getThis(): ?object
public getTrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT): array
}

変更履歴

バージョン | 説明
8.0.0 | このクラスは final として定義され、 継承できなくなりました。

目次

  • ReflectionGenerator::__construct — ReflectionGenerator オブジェクトを構築する
  • ReflectionGenerator::getExecutingFile — 現在実行中のジェネレータのファイル名を取得する
  • ReflectionGenerator::getExecutingGenerator — 実行中の Generator オブジェクトを取得する
  • ReflectionGenerator::getExecutingLine — 現在実行中のジェネレータの行を取得する
  • ReflectionGenerator::getFunction — ジェネレータの関数名を取得する
  • ReflectionGenerator::getThis — ジェネレータの $this の値を取得する
  • ReflectionGenerator::getTrace — 実行中のジェネレータのトレースを取得する

User Contributed Notes

There are no user contributed notes for this page.


ReflectionGenerator オブジェクトを構築する

  • ≪ ReflectionGenerator
  • ReflectionGenerator::getExecutingFile ≫
  • PHP Manual
  • ReflectionGenerator
  • ReflectionGenerator オブジェクトを構築する

ReflectionGenerator::__construct

(PHP 7, PHP 8)

ReflectionGenerator::__construct — ReflectionGenerator オブジェクトを構築する

説明

public ReflectionGenerator::__construct(Generator $generator)

ReflectionGenerator オブジェクトを構築します。

パラメータ

generator

ジェネレータオブジェクト

例

例1 ReflectionGenerator::__construct() の例

<?php

function gen()
{
yield 1;
}

$gen = gen();

$reflectionGen = new ReflectionGenerator($gen);

echo <<< output
{$reflectionGen->getFunction()->name}
Line: {$reflectionGen->getExecutingLine()}
File: {$reflectionGen->getExecutingFile()}
output;

上の例の出力は、 たとえば以下のようになります。

gen
Line: 5
File: /path/to/file/example.php

参考

  • ReflectionGenerator::getFunction() - ジェネレータの関数名を取得する
  • ReflectionGenerator::getExecutingLine() - 現在実行中のジェネレータの行を取得する
  • ReflectionGenerator::getExecutingFile() - 現在実行中のジェネレータのファイル名を取得する

User Contributed Notes

There are no user contributed notes for this page.


現在実行中のジェネレータのファイル名を取得する

  • ≪ ReflectionGenerator::__construct
  • ReflectionGenerator::getExecutingGenerator ≫
  • PHP Manual
  • ReflectionGenerator
  • 現在実行中のジェネレータのファイル名を取得する

ReflectionGenerator::getExecutingFile

(PHP 7, PHP 8)

ReflectionGenerator::getExecutingFile — 現在実行中のジェネレータのファイル名を取得する

説明

public ReflectionGenerator::getExecutingFile(): string

現在実行中のジェネレータのファイル名をフルパスで取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

現在実行中のジェネレータのファイル名をフルパスを返します。

例

例1 ReflectionGenerator::getExecutingFile() の例

<?php

class GenExample
{
public function gen()
{
yield 1;
}
}

$gen = (new GenExample)->gen();

$reflectionGen = new ReflectionGenerator($gen);

echo "File: {$reflectionGen->getExecutingFile()}";

上の例の出力は、 たとえば以下のようになります。

File: /path/to/file/example.php

参考

  • ReflectionGenerator::getExecutingLine() - 現在実行中のジェネレータの行を取得する
  • ReflectionGenerator::getExecutingGenerator() - 実行中の Generator オブジェクトを取得する

User Contributed Notes

There are no user contributed notes for this page.


実行中の Generator オブジェクトを取得する

  • ≪ ReflectionGenerator::getExecutingFile
  • ReflectionGenerator::getExecutingLine ≫
  • PHP Manual
  • ReflectionGenerator
  • 実行中の Generator オブジェクトを取得する

ReflectionGenerator::getExecutingGenerator

(PHP 7, PHP 8)

ReflectionGenerator::getExecutingGenerator — 実行中の Generator オブジェクトを取得する

説明

public ReflectionGenerator::getExecutingGenerator(): Generator

実行中の Generator オブジェクトを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

現在実行中の Generator オブジェクトを返します。

例

例1 ReflectionGenerator::getExecutingGenerator() の例

<?php

class GenExample
{
public function gen()
{
yield 1;
}
}

$gen = (new GenExample)->gen();

$reflectionGen = new ReflectionGenerator($gen);

$gen2 = $reflectionGen->getExecutingGenerator();

var_dump($gen2 === $gen);
var_dump($gen2->current());

上の例の出力は、 たとえば以下のようになります。

bool(true)
int(1);

参考

  • ReflectionGenerator::getExecutingLine() - 現在実行中のジェネレータの行を取得する
  • ReflectionGenerator::getExecutingFile() - 現在実行中のジェネレータのファイル名を取得する

User Contributed Notes

There are no user contributed notes for this page.


現在実行中のジェネレータの行を取得する

  • ≪ ReflectionGenerator::getExecutingGenerator
  • ReflectionGenerator::getFunction ≫
  • PHP Manual
  • ReflectionGenerator
  • 現在実行中のジェネレータの行を取得する

ReflectionGenerator::getExecutingLine

(PHP 7, PHP 8)

ReflectionGenerator::getExecutingLine — 現在実行中のジェネレータの行を取得する

説明

public ReflectionGenerator::getExecutingLine(): int

現在実行中のジェネレータの行を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

現在実行中のジェネレータの式の行番号を返します。

例

例1 ReflectionGenerator::getExecutingLine() の例

<?php

class GenExample
{
public function gen()
{
yield 1;
}
}

$gen = (new GenExample)->gen();

$reflectionGen = new ReflectionGenerator($gen);

echo "Line: {$reflectionGen->getExecutingLine()}";

上の例の出力は、 たとえば以下のようになります。

Line: 7

参考

  • ReflectionGenerator::getExecutingGenerator() - 実行中の Generator オブジェクトを取得する
  • ReflectionGenerator::getExecutingFile() - 現在実行中のジェネレータのファイル名を取得する

User Contributed Notes

There are no user contributed notes for this page.


ジェネレータの関数名を取得する

  • ≪ ReflectionGenerator::getExecutingLine
  • ReflectionGenerator::getThis ≫
  • PHP Manual
  • ReflectionGenerator
  • ジェネレータの関数名を取得する

ReflectionGenerator::getFunction

(PHP 7, PHP 8)

ReflectionGenerator::getFunction — ジェネレータの関数名を取得する

説明

public ReflectionGenerator::getFunction(): ReflectionFunctionAbstract

ReflectionFunctionAbstract から派生したクラスを返すことによって、 取得したジェネレータの関数名を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionFunctionAbstract クラスを返します。 これは 関数の場合は ReflectionFunction ですし、 メソッドの場合は ReflectionMethod になります。

例

例1 ReflectionGenerator::getFunction() の例

<?php

function gen()
{
yield 1;
}

$gen = gen();

$reflectionGen = new ReflectionGenerator($gen);

var_dump($reflectionGen->getFunction());

上の例の出力は、 たとえば以下のようになります。

object(ReflectionFunction)#3 (1) {
  ["name"]=>
  string(3) "gen"
}

参考

  • ReflectionGenerator::getThis() - ジェネレータの $this の値を取得する
  • ReflectionGenerator::getTrace() - 実行中のジェネレータのトレースを取得する

User Contributed Notes

There are no user contributed notes for this page.


ジェネレータの $this の値を取得する

  • ≪ ReflectionGenerator::getFunction
  • ReflectionGenerator::getTrace ≫
  • PHP Manual
  • ReflectionGenerator
  • ジェネレータの $this の値を取得する

ReflectionGenerator::getThis

(PHP 7, PHP 8)

ReflectionGenerator::getThis — ジェネレータの $this の値を取得する

説明

public ReflectionGenerator::getThis(): ?object

ジェネレータがアクセスできる $this の値を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

$this の値を返します。 ジェネレータがクラスコンテキストの中で作られていない場合は null を返します。

例

例1 ReflectionGenerator::getThis() の例

<?php

class GenExample
{
public function gen()
{
yield 1;
}
}

$gen = (new GenExample)->gen();

$reflectionGen = new ReflectionGenerator($gen);

var_dump($reflectionGen->getThis());

上の例の出力は、 たとえば以下のようになります。

object(GenExample)#3 (0) {
}

参考

  • ReflectionGenerator::getFunction() - ジェネレータの関数名を取得する
  • ReflectionGenerator::getTrace() - 実行中のジェネレータのトレースを取得する

User Contributed Notes

There are no user contributed notes for this page.


実行中のジェネレータのトレースを取得する

  • ≪ ReflectionGenerator::getThis
  • ReflectionFiber ≫
  • PHP Manual
  • ReflectionGenerator
  • 実行中のジェネレータのトレースを取得する

ReflectionGenerator::getTrace

(PHP 7, PHP 8)

ReflectionGenerator::getTrace — 実行中のジェネレータのトレースを取得する

説明

public ReflectionGenerator::getTrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT): array

現在実行中のジェネレータのトレースを取得します。

パラメータ

options

options の値は以下のフラグのうちのいずれかです:

利用可能なオプション
オプション | 説明
DEBUG_BACKTRACE_PROVIDE_OBJECT | デフォルト
DEBUG_BACKTRACE_IGNORE_ARGS | スタックトレース内の関数に引数の情報を含めない

戻り値

現在実行中のジェネレータのトレースを返します。

例

例1 ReflectionGenerator::getTrace() の例

<?php
function foo() {
yield 1;
}

function bar()
{
yield from foo();
}

function baz()
{
yield from bar();
}

$gen = baz();
$gen->valid(); // ジェネレータを開始

var_dump((new ReflectionGenerator($gen))->getTrace());

上の例の出力は、 たとえば以下のようになります。

array(2) {
  [0]=>
  array(4) {
    ["file"]=>
    string(18) "example.php"
    ["line"]=>
    int(8)
    ["function"]=>
    string(3) "foo"
    ["args"]=>
    array(0) {
    }
  }
  [1]=>
  array(4) {
    ["file"]=>
    string(18) "example.php"
    ["line"]=>
    int(12)
    ["function"]=>
    string(3) "bar"
    ["args"]=>
    array(0) {
    }
  }
}

参考

  • ReflectionGenerator::getFunction() - ジェネレータの関数名を取得する
  • ReflectionGenerator::getThis() - ジェネレータの $this の値を取得する

User Contributed Notes

There are no user contributed notes for this page.


ReflectionFiber クラス

(PHP 8 >= 8.1.0)

はじめに

クラス概要

final class ReflectionFiber {
/* メソッド */
public __construct(Fiber $fiber)
public getCallable(): callable
public getExecutingFile(): ?string
public getExecutingLine(): ?int
public getFiber(): Fiber
public getTrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT): array
}

目次

  • ReflectionFiber::__construct — Constructs a ReflectionFiber オブジェクトを構築する
  • ReflectionFiber::getCallable — Fiber の構築に使われた callable を取得する
  • ReflectionFiber::getExecutingFile — 現在実行中のファイル名を取得する
  • ReflectionFiber::getExecutingLine — 現在実行中の行番号を取得する
  • ReflectionFiber::getFiber — リフレクションされた Fiber クラスのインスタンスを取得する
  • ReflectionFiber::getTrace — 現在実行している時点のバックトレースを取得する

User Contributed Notes

There are no user contributed notes for this page.


Constructs a ReflectionFiber オブジェクトを構築する

  • ≪ ReflectionFiber
  • ReflectionFiber::getCallable ≫
  • PHP Manual
  • ReflectionFiber
  • Constructs a ReflectionFiber オブジェクトを構築する

ReflectionFiber::__construct

(PHP 8 >= 8.1.0)

ReflectionFiber::__construct — Constructs a ReflectionFiber オブジェクトを構築する

説明

public ReflectionFiber::__construct(Fiber $fiber)

ReflectionFiber オブジェクトを構築します。

パラメータ

fiber

リフレクションする Fiber オブジェクト。

User Contributed Notes

There are no user contributed notes for this page.


Fiber の構築に使われた callable を取得する

  • ≪ ReflectionFiber::__construct
  • ReflectionFiber::getExecutingFile ≫
  • PHP Manual
  • ReflectionFiber
  • Fiber の構築に使われた callable を取得する

ReflectionFiber::getCallable

(PHP 8 >= 8.1.0)

ReflectionFiber::getCallable — Fiber の構築に使われた callable を取得する

説明

public ReflectionFiber::getCallable(): callable

Fiber の構築に使われた callable を返します。 Fiber が既に終了している場合、 Error がスローされます。

パラメータ

この関数にはパラメータはありません。

戻り値

Fiber の構築に使われた callable を返します。

User Contributed Notes

There are no user contributed notes for this page.


現在実行中のファイル名を取得する

  • ≪ ReflectionFiber::getCallable
  • ReflectionFiber::getExecutingLine ≫
  • PHP Manual
  • ReflectionFiber
  • 現在実行中のファイル名を取得する

ReflectionFiber::getExecutingFile

(PHP 8 >= 8.1.0)

ReflectionFiber::getExecutingFile — 現在実行中のファイル名を取得する

説明

public ReflectionFiber::getExecutingFile(): ?string

リフレクションされた Fiber が実行しているファイル名のフルパスを返します。 Fiber が開始していないか、既に終了している場合、 Error がスローされます。

パラメータ

この関数にはパラメータはありません。

戻り値

リフレクションされた Fiber が実行しているファイル名のフルパスを返します。 リフレクションされた Fiber がユーザー定義関数の外側で使われている場合、 null を返します。

User Contributed Notes

There are no user contributed notes for this page.


現在実行中の行番号を取得する

  • ≪ ReflectionFiber::getExecutingFile
  • ReflectionFiber::getFiber ≫
  • PHP Manual
  • ReflectionFiber
  • 現在実行中の行番号を取得する

ReflectionFiber::getExecutingLine

(PHP 8 >= 8.1.0)

ReflectionFiber::getExecutingLine — 現在実行中の行番号を取得する

説明

public ReflectionFiber::getExecutingLine(): ?int

リフレクションされた Fiber が現在実行している行番号を返します。 Fiber が開始していないか、既に終了している場合、 Error がスローされます。

パラメータ

この関数にはパラメータはありません。

戻り値

Fiber が現在実行している行番号を返します。 リフレクションされた Fiber が現在実行している行番号を返します。 リフレクションされた fiber がユーザー定義関数の外側で実行されている場合、 fiber がまだ開始していないか、既に終了している場合、 Error がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


リフレクションされた Fiber クラスのインスタンスを取得する

  • ≪ ReflectionFiber::getExecutingLine
  • ReflectionFiber::getTrace ≫
  • PHP Manual
  • ReflectionFiber
  • リフレクションされた Fiber クラスのインスタンスを取得する

ReflectionFiber::getFiber

(PHP 8 >= 8.1.0)

ReflectionFiber::getFiber — リフレクションされた Fiber クラスのインスタンスを取得する

説明

public ReflectionFiber::getFiber(): Fiber

リフレクションされた Fiber クラスのインスタンスを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

リフレクションされた Fiber クラスのインスタンスを返します。

User Contributed Notes

There are no user contributed notes for this page.


現在実行している時点のバックトレースを取得する

  • ≪ ReflectionFiber::getFiber
  • ReflectionIntersectionType ≫
  • PHP Manual
  • ReflectionFiber
  • 現在実行している時点のバックトレースを取得する

ReflectionFiber::getTrace

(PHP 8 >= 8.1.0)

ReflectionFiber::getTrace — 現在実行している時点のバックトレースを取得する

説明

public ReflectionFiber::getTrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT): array

リフレクションされた Fiber で、 現在実行している時点のバックトレースを取得します。

パラメータ

options

options の値には、以下のフラグが指定できます。

利用可能なオプション
オプション | 説明
DEBUG_BACKTRACE_PROVIDE_OBJECT | これがデフォルトの値です。
DEBUG_BACKTRACE_IGNORE_ARGS | スタックトレースに、関数の引数に関する情報を含めない。

戻り値

Fiber で、現在実行している時点のバックトレースを返します。

User Contributed Notes

There are no user contributed notes for this page.


ReflectionIntersectionType クラス

(PHP 8 >= 8.1.0)

はじめに

クラス概要

class ReflectionIntersectionType extends ReflectionType {
/* メソッド */
public getTypes(): array
/* 継承したメソッド */
public ReflectionType::allowsNull(): bool
public ReflectionType::__toString(): string
}

目次

  • ReflectionIntersectionType::getTypes — 交差型に含まれている型を返す

User Contributed Notes

There are no user contributed notes for this page.


交差型に含まれている型を返す

  • ≪ ReflectionIntersectionType
  • ReflectionReference ≫
  • PHP Manual
  • ReflectionIntersectionType
  • 交差型に含まれている型を返す

ReflectionIntersectionType::getTypes

(PHP 8 >= 8.1.0)

ReflectionIntersectionType::getTypes — 交差型に含まれている型を返す

説明

public ReflectionIntersectionType::getTypes(): array

交差型に含まれている型を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

ReflectionType オブジェクトの配列を返します。

例

例1 ReflectionIntersectionType::getTypes() の例

<?php

function someFunction(Iterator&Countable $value) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParam = $reflectionFunc->getParameters()[0];

var_dump($reflectionParam->getType()->getTypes());
?>

上の例の出力は、 たとえば以下のようになります。

array(2) {
    [0] =>
    class ReflectionNamedType#4(0) {
    }
    [1] =>
    class ReflectionNamedType#5(0) {
    }
}

参考

  • ReflectionType::allowsNull() - null が許されるかをチェックする
  • ReflectionParameter::getType() - 引数の型を取得する

User Contributed Notes

baptiste at pillot dot fr 08-Sep-2023 12:30
php 8.2: ReflectionIntersectionType::getTypes returns an array of ReflectionNamedType. For now, PHP's DNF implementation does not allow union types nested into intersection types.


ReflectionReference クラス

(PHP 7 >= 7.4.0, PHP 8)

はじめに

ReflectionReference クラスは、リファレンスに関する情報を提供します。

クラス概要

final class ReflectionReference {
/* メソッド */
private __construct()
public static fromArrayElement(array $array, int|string $key): ?ReflectionReference
public getId(): string
}

目次

  • ReflectionReference::__construct — private なコンストラクタのため、直接インスタンス化できません
  • ReflectionReference::fromArrayElement — 配列の要素から、ReflectionReference を生成する
  • ReflectionReference::getId — リファレンスのユニークなIDを取得する

User Contributed Notes

There are no user contributed notes for this page.


private なコンストラクタのため、直接インスタンス化できません

  • ≪ ReflectionReference
  • ReflectionReference::fromArrayElement ≫
  • PHP Manual
  • ReflectionReference
  • private なコンストラクタのため、直接インスタンス化できません

ReflectionReference::__construct

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

ReflectionReference::__construct — private なコンストラクタのため、直接インスタンス化できません

説明

private ReflectionReference::__construct()

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


配列の要素から、ReflectionReference を生成する

  • ≪ ReflectionReference::__construct
  • ReflectionReference::getId ≫
  • PHP Manual
  • ReflectionReference
  • 配列の要素から、ReflectionReference を生成する

ReflectionReference::fromArrayElement

(PHP 7 >= 7.4.0, PHP 8)

ReflectionReference::fromArrayElement — 配列の要素から、ReflectionReference を生成する

説明

public static ReflectionReference::fromArrayElement(array $array, int|string $key): ?ReflectionReference

配列の要素から、ReflectionReference を生成します。

パラメータ

array

リファレンスの情報が含まれる array。

key

キー。int または string。

戻り値

$array[$key] がリファレンスの場合、 ReflectionReference のインスタンスを返します。 そうでない場合、null を返します。

エラー / 例外

array が array でない場合、 または key が int でも string でもない場合、 TypeError がスローされます。 $array[$key] が存在しない場合、 ReflectionException がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


リファレンスのユニークなIDを取得する

  • ≪ ReflectionReference::fromArrayElement
  • ReflectionAttribute ≫
  • PHP Manual
  • ReflectionReference
  • リファレンスのユニークなIDを取得する

ReflectionReference::getId

(PHP 7 >= 7.4.0, PHP 8)

ReflectionReference::getId — リファレンスのユニークなIDを取得する

説明

public ReflectionReference::getId(): string

リファレンスが生きている間、リファレンス単位でユニークなIDを返します。 このIDは同じリファレンスであるかを比較するのに使えますし、 既知のリファレンスのマッピングを管理するのにも使えます。

パラメータ

この関数にはパラメータはありません。

戻り値

文字列を返します。フォーマットは決まっていません。

例

例1 ReflectionReference::getId() の基本的な使い方

<?php
$val1 = 'foo';
$val2 = 'bar';
$arr = [&$val1, &$val2, &$val1];

$rr1 = ReflectionReference::fromArrayElement($arr, 0);
$rr2 = ReflectionReference::fromArrayElement($arr, 1);
$rr3 = ReflectionReference::fromArrayElement($arr, 2);

var_dump($rr1->getId() === $rr2->getId());
var_dump($rr1->getId() === $rr3->getId());
?>

上の例の出力は以下となります。

bool(false)
bool(true)

User Contributed Notes

There are no user contributed notes for this page.


ReflectionAttribute クラス

(PHP 8)

はじめに

ReflectionAttribute クラスは、 アトリビュート に関する情報を提供します。

クラス概要

class ReflectionAttribute implements Reflector {
/* 定数 */
public const int IS_INSTANCEOF;
/* メソッド */
private __construct()
public getArguments(): array
public getName(): string
public getTarget(): int
public isRepeated(): bool
public newInstance(): object
}

定義済み定数

ReflectionAttribute のフラグ

ReflectionAttribute::IS_INSTANCEOF

instanceof のチェックを使い、 アトリビュートを取得します。

注意:

これらの定数の値は、 PHP のバージョンによっては変更される可能性があります。 値そのものに依存せず、定数を使うことを推奨します。

目次

  • ReflectionAttribute::__construct — private なコンストラクタのため、直接インスタンス化できません
  • ReflectionAttribute::getArguments — アトリビュートに渡された引数を取得する
  • ReflectionAttribute::getName — アトリビュートの名前を取得する
  • ReflectionAttribute::getTarget — アトリビュートのターゲットをビットマスクとして返す
  • ReflectionAttribute::isRepeated — この名前のアトリビュートが、実際にコード上に繰り返し現れているかどうかを取得する
  • ReflectionAttribute::newInstance — アトリビュートクラスをインスタンス化する

User Contributed Notes

There are no user contributed notes for this page.


private なコンストラクタのため、直接インスタンス化できません

  • ≪ ReflectionAttribute
  • ReflectionAttribute::getArguments ≫
  • PHP Manual
  • ReflectionAttribute
  • private なコンストラクタのため、直接インスタンス化できません

ReflectionAttribute::__construct

(PHP 8)

ReflectionAttribute::__construct — private なコンストラクタのため、直接インスタンス化できません

説明

private ReflectionAttribute::__construct()

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


アトリビュートに渡された引数を取得する

  • ≪ ReflectionAttribute::__construct
  • ReflectionAttribute::getName ≫
  • PHP Manual
  • ReflectionAttribute
  • アトリビュートに渡された引数を取得する

ReflectionAttribute::getArguments

(PHP 8)

ReflectionAttribute::getArguments — アトリビュートに渡された引数を取得する

説明

public ReflectionAttribute::getArguments(): array

アトリビュートに渡された引数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

アトリビュートに渡された引数を返します。

User Contributed Notes

There are no user contributed notes for this page.


アトリビュートの名前を取得する

  • ≪ ReflectionAttribute::getArguments
  • ReflectionAttribute::getTarget ≫
  • PHP Manual
  • ReflectionAttribute
  • アトリビュートの名前を取得する

ReflectionAttribute::getName

(PHP 8)

ReflectionAttribute::getName — アトリビュートの名前を取得する

説明

public ReflectionAttribute::getName(): string

アトリビュートの名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

アトリビュートの名前を返します。

User Contributed Notes

There are no user contributed notes for this page.


アトリビュートのターゲットをビットマスクとして返す

  • ≪ ReflectionAttribute::getName
  • ReflectionAttribute::isRepeated ≫
  • PHP Manual
  • ReflectionAttribute
  • アトリビュートのターゲットをビットマスクとして返す

ReflectionAttribute::getTarget

(PHP 8)

ReflectionAttribute::getTarget — アトリビュートのターゲットをビットマスクとして返す

説明

public ReflectionAttribute::getTarget(): int

アトリビュートのターゲットをビットマスクとして取得します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

アトリビュートのターゲットをビットマスクとして返します。

User Contributed Notes

There are no user contributed notes for this page.


この名前のアトリビュートが、実際にコード上に繰り返し現れているかどうかを取得する

  • ≪ ReflectionAttribute::getTarget
  • ReflectionAttribute::newInstance ≫
  • PHP Manual
  • ReflectionAttribute
  • この名前のアトリビュートが、実際にコード上に繰り返し現れているかどうかを取得する

ReflectionAttribute::isRepeated

(PHP 8)

ReflectionAttribute::isRepeated — この名前のアトリビュートが、実際にコード上に繰り返し現れているかどうかを取得する

説明

public ReflectionAttribute::isRepeated(): bool

この名前のアトリビュートが、実際にコード上に繰り返し現れているかどうかを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

アトリビュートが繰り返し使われている場合は true を返します。 そうでない場合は、false を返します。

User Contributed Notes

There are no user contributed notes for this page.


アトリビュートクラスをインスタンス化する

  • ≪ ReflectionAttribute::isRepeated
  • Reflector ≫
  • PHP Manual
  • ReflectionAttribute
  • アトリビュートクラスをインスタンス化する

ReflectionAttribute::newInstance

(PHP 8)

ReflectionAttribute::newInstance — アトリビュートクラスをインスタンス化する

説明

public ReflectionAttribute::newInstance(): object

この ReflectionAttribute クラスと引数を表現する、 アトリビュートクラスをインスタンス化します。

パラメータ

この関数にはパラメータはありません。

戻り値

アトリビュートの新しいインスタンスを返します。

User Contributed Notes

baptiste at pillot dot fr 30-Jan-2023 11:07
Calling ReflectionAttribute::newInstance() using an attribute name that has a matching class without #[Attribute] will result in an error.

Example :

<?php
class FakeAttribute {}

#[FakeAttribute]
class Test {}

try {
    (new ReflectionClass(Test::class))->getAttributes()[0]->newInstance();
}
catch (Error $error) {
    echo 'Throwed error ' . get_class($error) . ' with message : ' . $error->getMessage();
}
?>

This will output :

Throwed error Error with message : Attempting to use non-attribute class "FakeAttribute" as attribute
baptiste at pillot dot fr 30-Jan-2023 11:06
Calling ReflectionAttribute::newInstance() using an attribute name that does not have a corresponding class will result in an error.

Example :

<?php
#[FakeAttribute]
class Test {}

try {
  (new ReflectionClass(Test::class))->getAttributes()[0]->newInstance();
}
catch (Error $error) {
  echo 'Throwed error ' . get_class($error) . ' with message : ' . $error->getMessage();
}
?>

This will output :

Throwed error Error with message : Attribute class "FakeAttribute" not found


Reflector インターフェイス

(PHP 5, PHP 7, PHP 8)

はじめに

Reflector は、 すべてのエクスポート可能なリフレクションクラスが実装しているインターフェイスです。

インターフェイス概要

interface Reflector extends Stringable {
/* 継承したメソッド */
public Stringable::__toString(): string
}

変更履歴

バージョン | 説明
8.0.0 | Reflector::export() は、削除されました。
8.0.0 | Reflector は、 Stringable を継承するようになりました。 これによって Reflector::__toString() を置き換える形で、 Stringable::__toString() が継承されるようになりました。

参考

  • Reflector::export()

目次

  • Reflector::export — エクスポートする

User Contributed Notes

There are no user contributed notes for this page.


エクスポートする

  • ≪ Reflector
  • ReflectionException ≫
  • PHP Manual
  • Reflector
  • エクスポートする

Reflector::export

(PHP 5, PHP 7)

Reflector::export — エクスポートする

警告

この関数は PHP 7.4.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この関数に頼らないことを強く推奨します。

説明

public static Reflector::export(): string

エクスポートします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

参考

  • Reflection::__toString()

User Contributed Notes

There are no user contributed notes for this page.


ReflectionException クラス

(PHP 5, PHP 7, PHP 8)

はじめに

ReflectionException クラスです。

クラス概要

class ReflectionException extends Exception {
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 継承したメソッド */
public Exception::__construct(string $message = "", int $code = 0, ?Throwable $previous = null)
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

User Contributed Notes

temirkhan.nasukhov 18-Apr-2019 11:50
Note that this exception is unchecked even if it is not based on RuntimeException.  Such error must lead to direct fixes in code and not in catch-handle of situation.

Also keep in mind that IDE (mine is Phpstorm 2018.3.4) inspections will highlight it for that reason so do not create phpdoc with throws for any Runtime exceptions.

<?php

/**
 * This way is wrong
 *
 * @throws \ReflectionException
 */
function createReflection()
{
    return new \ReflectionClass('invalid argument');
}

/**
 * This way is fine(I don't mean the code of course)
 */
function createReflection()
{
    return new \ReflectionClass('invalid argument');
}


変数操作

  • はじめに
  • インストール/設定
    • 実行時設定
  • 変数操作 関数
    • boolval — 変数の boolean としての値を取得する
    • debug_zval_dump — 内部的な zval を表す文字列をダンプする
    • doubleval — floatval のエイリアス
    • empty — 変数が空であるかどうかを検査する
    • floatval — 変数の float 値を取得する
    • get_debug_type — 変数の型名をデバッグしやすい形で取得する
    • get_defined_vars — 全ての定義済の変数を配列で返す
    • get_resource_id — 指定されたリソースの、数値の識別子を返す
    • get_resource_type — リソース型を返す
    • gettype — 変数の型を取得する
    • intval — 変数の整数としての値を取得する
    • is_array — 変数が配列かどうかを検査する
    • is_bool — 変数が boolean であるかを調べる
    • is_callable — 引数が、現在のスコープから関数としてコール可能な値かどうかを調べる
    • is_countable — 引数が、数えられる値かどうかを調べる
    • is_double — is_float のエイリアス
    • is_float — 変数の型が float かどうか調べる
    • is_int — 変数が整数型かどうかを検査する
    • is_integer — is_int のエイリアス
    • is_iterable — 変数の内容が反復可能な値であることを確認する
    • is_long — is_int のエイリアス
    • is_null — 変数が null かどうか調べる
    • is_numeric — 変数が数字または数値形式の文字列であるかを調べる
    • is_object — 変数がオブジェクトかどうかを検査する
    • is_real — is_float のエイリアス
    • is_resource — 変数がリソースかどうかを調べる
    • is_scalar — 変数がスカラかどうかを調べる
    • is_string — 変数の型が文字列かどうかを調べる
    • isset — 変数が宣言されていること、そして null とは異なることを検査する
    • print_r — 指定した変数に関する情報を解りやすく出力する
    • serialize — 値の保存可能な表現を生成する
    • settype — 変数の型をセットする
    • strval — 変数の文字列としての値を取得する
    • unserialize — 保存用表現から PHP の値を生成する
    • unset — 指定した変数の割当を解除する
    • var_dump — 変数に関する情報をダンプする
    • var_export — 変数の文字列表現を出力または返す

User Contributed Notes

There are no user contributed notes for this page.


はじめに

変数の動作に関する情報については、このマニュアルの 言語リファレンスセクションにある 変数のエントリを参照ください。

User Contributed Notes

There are no user contributed notes for this page.


実行時設定

php.ini の設定により動作が変化します。

変数設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
unserialize_callback_func | null | INI_ALL |
unserialize_max_depth | "4096" | INI_ALL | PHP 7.4.0 以降で利用可能。
INI_* モードの詳細および定義については どこで設定を行うのか を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

unserialize_callback_func string

unserialize() が未定義のクラスを使おうとしたときに、ここで指定したコールバックをコールします。 指定したコールバック関数が定義されていない場合や そのコールバック関数が未定義のクラスの定義に失敗したときに警告が発生します。

unserialize() および クラスのオートローディング も参照ください。

unserialize_max_depth int

unserialize() を使ったアンシリアライズ処理の間に許される、 データ構造の再帰の深さの最大値を設定します。 これは、スタックオーバーフローを防ぐためのものです。 unserialize_max_depth=0 に設定すると、 この設定を無効にすることができます。

unserialize() および クラスのオートローディング も参照ください。

User Contributed Notes

There are no user contributed notes for this page.


変数操作 関数

目次

  • boolval — 変数の boolean としての値を取得する
  • debug_zval_dump — 内部的な zval を表す文字列をダンプする
  • doubleval — floatval のエイリアス
  • empty — 変数が空であるかどうかを検査する
  • floatval — 変数の float 値を取得する
  • get_debug_type — 変数の型名をデバッグしやすい形で取得する
  • get_defined_vars — 全ての定義済の変数を配列で返す
  • get_resource_id — 指定されたリソースの、数値の識別子を返す
  • get_resource_type — リソース型を返す
  • gettype — 変数の型を取得する
  • intval — 変数の整数としての値を取得する
  • is_array — 変数が配列かどうかを検査する
  • is_bool — 変数が boolean であるかを調べる
  • is_callable — 引数が、現在のスコープから関数としてコール可能な値かどうかを調べる
  • is_countable — 引数が、数えられる値かどうかを調べる
  • is_double — is_float のエイリアス
  • is_float — 変数の型が float かどうか調べる
  • is_int — 変数が整数型かどうかを検査する
  • is_integer — is_int のエイリアス
  • is_iterable — 変数の内容が反復可能な値であることを確認する
  • is_long — is_int のエイリアス
  • is_null — 変数が null かどうか調べる
  • is_numeric — 変数が数字または数値形式の文字列であるかを調べる
  • is_object — 変数がオブジェクトかどうかを検査する
  • is_real — is_float のエイリアス
  • is_resource — 変数がリソースかどうかを調べる
  • is_scalar — 変数がスカラかどうかを調べる
  • is_string — 変数の型が文字列かどうかを調べる
  • isset — 変数が宣言されていること、そして null とは異なることを検査する
  • print_r — 指定した変数に関する情報を解りやすく出力する
  • serialize — 値の保存可能な表現を生成する
  • settype — 変数の型をセットする
  • strval — 変数の文字列としての値を取得する
  • unserialize — 保存用表現から PHP の値を生成する
  • unset — 指定した変数の割当を解除する
  • var_dump — 変数に関する情報をダンプする
  • var_export — 変数の文字列表現を出力または返す

User Contributed Notes

aldemarcalazans@gmail 06-Oct-2019 08:57
I thought the PHP developers should include in this section, the operator "identity" ( see http://php.net/manual/en/language.operators.arithmetic.php).

From an arithmetic point of view, this operator is useless but, as a converter from string to number, it is great. It does not force the numerical string to have an integer or float type, instead, it automatically determines the adequate type, depending on the numerical quantity represented by the string.


変数の boolean としての値を取得する

  • ≪ 変数操作 関数
  • debug_zval_dump ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の boolean としての値を取得する

boolval

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

boolval — 変数の boolean としての値を取得する

説明

boolval(mixed $value): bool

value の bool としての値を返します。

パラメータ

value

bool に変換したいスカラー値。

戻り値

value の bool としての値を返します。

例

例1 boolval() の例

<?php
echo '0: '.(boolval(0) ? 'true' : 'false')."\n";
echo '42: '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0: '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2: '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"": '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0": '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1": '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]: '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]: '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
?>

上の例の出力は以下となります。

0:        false
42:       true
0.0:      false
4.2:      true
"":       false
"string": true
"0":      false
"1":      true
[1, 2]:   true
[]:       false
stdClass: true

参考

  • floatval() - 変数の float 値を取得する
  • intval() - 変数の整数としての値を取得する
  • strval() - 変数の文字列としての値を取得する
  • settype() - 変数の型をセットする
  • is_bool() - 変数が boolean であるかを調べる
  • 型の相互変換

User Contributed Notes

John Doe 16-Aug-2021 07:51
Type casting is the easiet and fastest way:

(bool)$value
Anonymous 18-Mar-2021 11:39
boolval('false') returns true.
boolval('False') return true.
uasenior at gmail dot com 28-Jan-2020 08:02
<?

// Some way to print boolean value as string

$b = true;

echo ['false', 'true'][$b];

?>
raphael.satyago 20-Jan-2015 09:20
function is_true($val, $return_null=false){
    $boolval = ( is_string($val) ? filter_var($val, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) : (bool) $val );
    return ( $boolval===null && !$return_null ? false : $boolval );
}

// Return Values:

is_true(new stdClass);      // true
is_true([1,2]);             // true
is_true([1]);               // true
is_true([0]);               // true
is_true(42);                // true
is_true(-42);               // true
is_true('true');            // true
is_true('on')               // true
is_true('off')              // false
is_true('yes')              // true
is_true('no')               // false
is_true('ja')               // false
is_true('nein')             // false
is_true('1');               // true
is_true(NULL);              // false
is_true(0);                 // false
is_true('false');           // false
is_true('string');          // false
is_true('0.0');             // false
is_true('4.2');             // false
is_true('0');               // false
is_true('');                // false
is_true([]);                // false
Matt M 09-Jan-2015 05:27
To anyone like me who came here looking for a way to turn any value into a 0/1 that will fit into a MySQL boolean (tinyint) field:

<?php
$tinyint = (int) filter_var($valToCheck, FILTER_VALIDATE_BOOLEAN);
?>

tinyint will be 0 (zero) for values like string "false", boolean false, int 0

tinyint will be 1 for values like string "true", boolean true, int 1

Useful if you are accepting data that might be from a language like Javascript that sends string "false" for a boolean false.
Babak Bandpey 13-May-2014 09:14
I believe that the double negation !! can perform the same task with the same result if your PHP is not up2date

var_dump(!!1, !!0, !!"test", !!"");

outputs:
boolean true

boolean false

boolean true

boolean false

May the life be good to you.
Anonymous 30-Dec-2013 05:12
A misspell in v2.0.
:-)

Hack v2.1

<?php

if( ! function_exists('boolval'))
{
    /**
     * Get the boolean value of a variable
     *
     * @param mixed The scalar value being converted to a boolean.
     * @return boolean The boolean value of var.
     */
    function boolval($var)
    {
        return !! $var;
    }
}

?>
info at lomalkin dot ru 15-Mar-2013 11:08
<?

// Hack for old php versions to use boolval()

if (!function_exists('boolval')) {
        function boolval($val) {
                return (bool) $val;
        }
}
?>


内部的な zval を表す文字列をダンプする

  • ≪ boolval
  • doubleval ≫
  • PHP Manual
  • 変数操作 関数
  • 内部的な zval を表す文字列をダンプする

debug_zval_dump

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

debug_zval_dump — 内部的な zval を表す文字列をダンプする

説明

debug_zval_dump(mixed $value, mixed ...$values): void

内部的な zval (Zend の値) を表す文字列表現をダンプします。 これは Zend Engine や PHP 拡張モジュールの実装の詳細をデバッグしたり、理解したりするのに役立ちます。

パラメータ

value

ダンプする変数または値。

values

ダンプする追加の変数または値。

戻り値

値を返しません。

例

例1 debug_zval_dump() の例

<?php
$var1 = 'Hello';
$var1 .= ' World';
$var2 = $var1;

debug_zval_dump($var1);
?>

上の例の出力は以下となります。

string(11) "Hello World" refcount(3)

注意: refcount を理解する

Zend Engine の実装の詳細を理解していないと、 この関数が表示する refcount の値に驚くかもしれません。

Zend Engine は、リファレンスカウントを以下の2つの用途で使います:

  • "コピーオンライト" と呼ばれるテクニックを使ってメモリを最適化し、 値が同じ複数の値を保持する複数の変数を、メモリ上の同じコピーを指すようにします。 この場合、変数の値が変更された時に、 その変数は新しいメモリ上のコピーの値を指すようになります。 そして、その変数のリファレンスカウントは1になります。
  • リファレンス渡しされたり、リファレンスが代入されている値( リファレンスの説明 も参照ください) を追跡する用途にも使います。 この用途のリファレンスカウントは、 現在の値を指しているものとは別の、リファレンス用の zval に保存されています。 この追加の zval は、現状 debug_zval_dump() では見えません。

debug_zval_dump() は、値渡しされた通常の引数を入力として受け取るので、 コピーオンライトのテクニックを使います: つまり、データをコピーせず、 関数呼び出しが行われている間、リファレンスカウントをひとつ増やします。 関数が受け取った引数を変更すると、データのコピーが行われます。 コピーを行わないと、呼び出しスコープの中でリファレンスカウントがひとつ増えてしまうからです。

渡す引数によっては、debug_zval_dump() はリファレンスが割り当てられている変数を表示しません。 この動きを示すために、上の例をちょっと変更した例を考えてみましょう:

<?php
$var1 = 'Hello';
$var1 .= ' World';
// Point three variables as references to the same value
$var2 =& $var1;
$var3 =& $var1;

debug_zval_dump($var1);
?>

上の例の出力は以下となります。

string(11) "Hello World" refcount(2)

$var1, $var2, $var3 はリファレンスで結びついていますが、 値 だけが debug_zval_dump() に渡されます。 この値は、リファレンスの設定に一度使われ、 debug_zval_dump() の中で一度使われます。 よって、リファレンスカウントは2になります。

データ型によっては、Zend Engine 内で最適化が行われてしまうため、 ユーザはさらに混乱してしまいます。 整数のように "コピーオンライト" を行わないデータ型の変数では、 リファレンスカウントを全く表示しません。 別の場合、このリファレンスカウントの値は、 内部的に使われる追加のコピーの値を表示する場合もあります。 たとえば、文字列リテラルや配列が、命令セットの一部として保存されているような場合です。

参考

  • var_dump() - 変数に関する情報をダンプする
  • debug_backtrace() - バックトレースを生成する
  • リファレンスの説明
  • » References Explained (by Derick Rethans)

User Contributed Notes

Hayley Watson 09-Jul-2019 11:01
If you're finding the interpretation of refcount confusing, the Xdebug extension offers a function similar to this one, but because the variable name is passed as a string, xdebug_debug_zval() doesn't scribble on the refcount with its own references to the zval.


floatval のエイリアス

  • ≪ debug_zval_dump
  • empty ≫
  • PHP Manual
  • 変数操作 関数
  • floatval のエイリアス

doubleval

(PHP 4, PHP 5, PHP 7, PHP 8)

doubleval — floatval() のエイリアス

説明

この関数は次の関数のエイリアスです。 floatval().

User Contributed Notes

There are no user contributed notes for this page.


変数が空であるかどうかを検査する

  • ≪ doubleval
  • floatval ≫
  • PHP Manual
  • 変数操作 関数
  • 変数が空であるかどうかを検査する

empty

(PHP 4, PHP 5, PHP 7, PHP 8)

empty — 変数が空であるかどうかを検査する

説明

empty(mixed $var): bool

変数が空であるかどうかを検査します。 変数が空であるとみなされるのは、変数が存在しない場合や 変数の値が false に等しい場合です。 empty() は、変数が存在しない場合でも警告を発しません。

パラメータ

var

チェックする変数

変数が存在しなくても警告は発生しません。 つまり、empty() は本質的に !isset($var) || $var == false と同じことを簡潔に記述しているだけです。

戻り値

var が存在しない、 または空や0の値が設定されている場合、 つまり boolean のコンテキストで false と見なされる場合、 true を返します。 詳細は boolean への変換 を参照ください。 それ以外の場合は false を返します。

例

例1 簡単な empty() / isset() の比較

<?php
$var = 0;

// $var が空なのでtrueと評価されます
if (empty($var)) {
echo '$var is either 0, empty, or not set at all';
}

// $var が設定されているのでtrueと評価されます
if (isset($var)) {
echo '$var is set even though it is empty';
}
?>

例2 文字列のオフセットに対する empty()

<?php
$expected_array_got_string = 'somestring';
var_dump(empty($expected_array_got_string['some_key']));
var_dump(empty($expected_array_got_string[0]));
var_dump(empty($expected_array_got_string['0']));
var_dump(empty($expected_array_got_string[0.5]));
var_dump(empty($expected_array_got_string['0.5']));
var_dump(empty($expected_array_got_string['0 Mostel']));
?>

上の例の出力は以下となります。

bool(true)
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)

注意

注意: これは、関数ではなく 言語構造のため、可変関数 や 名前付き引数 を用いてコールすることはできません。

注意:

オブジェクトのアクセス不能なプロパティに対して empty() を使用した場合は、もしオーバーロードメソッド __isset() が宣言されていればそれをコールします。

参考

  • isset() - 変数が宣言されていること、そして null とは異なることを検査する
  • __isset()
  • unset() - 指定した変数の割当を解除する
  • array_key_exists() - 指定したキーまたは添字が配列にあるかどうかを調べる
  • count() - 配列または Countable オブジェクトに含まれるすべての要素の数を数える
  • strlen() - 文字列の長さを得る
  • PHP 型の比較表

User Contributed Notes

mmulej at gmail dot com 30-Dec-2022 11:28
Tests on
- Win 11
- Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz   2.21 GHz
- 64Gb RAM,
- PHP 8.1.10 (in Tinkerwell)
repeatedly show `empty` > `count` > `=== []`, but the margin is small and not worth the micro-optimizations.

Note: Same results (with `$n = 10000000`) for PHP v7.4.33 using onlinephp(dot)io sandbox tool.

<?php

$test = range(0, 1000);
$test2 = [];
$n = 1000_000_000;

$t1 = microtime(true); for ($x = 0; $x < $n; $x++) if (count($test)) {}
$t2 = microtime(true); for ($x = 0; $x < $n; $x++) if (count($test2)) {}
$t3 = microtime(true); for ($x = 0; $x < $n; $x++) if ($test === []) {}
$t4 = microtime(true); for ($x = 0; $x < $n; $x++) if ($test2 === []) {}
$t5 = microtime(true); for ($x = 0; $x < $n; $x++) if (empty($test)) {}
$t6 = microtime(true); for ($x = 0; $x < $n; $x++) if (empty($test2)) {}
$t7 = microtime(true);

echo "count(\$test):  " . ($t2 - $t1) . " sec\n";
echo "count(\$test2): " . ($t3 - $t2) . " sec\n";
echo "\$test === []:  " . ($t4 - $t3) . " sec\n";
echo "\$test2 === []: " . ($t5 - $t4) . " sec\n";
echo "empty(\$test):  " . ($t6 - $t5) . " sec\n";
echo "empty(\$test2): " . ($t7 - $t6) . " sec\n";

?>

Results:
<?php
count($test):  18.034885168076 sec
count($test2): 17.133869886398 sec
$test === []:  20.059770107269 sec
$test2 === []: 14.204195022583 sec
empty($test):  13.583840847015 sec
empty($test2): 12.971315145493 sec
?>
Lukas 05-May-2022 02:36
<?php

// Difference of empty() vs. isset()

$testCase = array(
    1 => '',
    2 => ' ',
    3 => null,
    4 => array(),
    5 => false,
    6 => true,
    7 => '0',
    8 => 0,
);

foreach ($testCase as $k => $v) {
    echo "<br> $k => " . strval($v) . " " . (empty($v) ? "is empty" : "is not empty") . " / " . (isset($v) ? "is set" : "is not set");
}

/*
RESULT:
 1 =>  is empty / is set
 2 =>   is not empty / is set
 3 =>  is empty / is not set
 4 => Array is empty / is set
 5 =>  is empty / is set
 6 => 1 is not empty / is set
 7 => 0 is empty / is set
 8 => 0 is empty / is set
*/
info at ensostudio dot ru 22-Jul-2021 09:11
Multiple empty():
<?php
/**
 * Multiple empty().
 *
 * @param mixed[] $vars Variables to test
 * @return bool
 */
function multi_empty(& ...$vars)
{
    // no callback is supplied, all empty values will be removed
    return array_filter($vars) === [];
}
?>
example:
<?php
$notEmptyVar = 1;
$emptyVar = null;
// $undefinedVar - not defined

multi_empty($emptyVar); // true
multi_empty($emptyVar, $undefinedVar); // true
multi_empty($notEmptyVar , $emptyVar); // false
multi_empty($notEmptyVar , $emptyVar, $undefinedVar); // false
?>
pm1625637 at gmail dot com 05-Dec-2019 02:11
Be careful about this  :

<?php
$del = '';
echo empty($del);
?>

Output : 1
markmanning at gmail dot com 23-Mar-2019 09:15
I normally count() an array, so I wanted to see how empty() would stack up.

<?php
    $test = array();
    $test2 = array();
    for ($x = 0; $x < 1000; $x++)  $test[] = $x;

    $ts = microtime(true);
    for ($x = 0; $x < 100000000; $x++)
    {
        if (count($test))
        {
        }
    }

    echo "Time taken:  " . (microtime(true) - $ts) . " sec\n";
?>

For 100,000,000 comparisons, here are the results against PHP 7.2.16 on my hardware:

count($test):  2.697 sec
count($test2):  2.596 sec
$test === array():  2.579 sec
$test2 === array():  2.552 sec
empty($test):  3.085 sec
empty($test2):  3.113 sec

In short, it doesn't matter what method is used although empty() is actually just ever so slightly slower despite it being a language construct.  YMMV.
fahimcseiiuc at gmail dot com 25-Feb-2019 10:02
<?php

    /*"" (an empty string)
      0 (0 as an integer)
      0.0 (0 as a float)
      "0" (0 as a string)
      NULL
      FALSE
      array() (an empty array)*/

$anEmptyString = "";
empty($anEmptyString);
if(empty($anEmptyString) == TRUE){
    echo "TRUE";
} else{
    echo "FALSE";
}
echo "<hr>";         //line break

$anIntegerNumber = 0;
empty($anIntegerNumber);
if(empty($anIntegerNumber) == TRUE){
    echo "TRUE";
} else{
    echo "FALSE";
}
echo "<hr>";         //line break

$aFloatNumber = 0.0;
empty($aFloatNumber);
if(empty($aFloatNumber) == TRUE){
    echo "TRUE";
} else{
    echo "FALSE";
}
echo "<hr>";       //line break

$aZeroValuedString = "0";
empty($aZeroValuedString);
if(empty($aZeroValuedString) == TRUE){
    echo "TRUE";
} else{
    echo "FALSE";
}
echo "<hr>";        //line break

$aNULL = NULL;
empty($aNULL);
if(empty($aNULL) == TRUE){
    echo "TRUE";
} else{
    echo "FALSE";
}
echo "<hr>";        //line break

$aBooleanFALSE = FALSE;
empty($aBooleanFALSE);
if(empty($aBooleanFALSE) == TRUE){
    echo "TRUE";
} else{
    echo "FALSE";
}
echo "<hr>";        //line break

$anEmptyArray = array();
empty($anEmptyArray);
if(empty($anEmptyArray) == TRUE){
    echo "TRUE";
} else{
    echo "FALSE";
}
echo "<hr>";       //line break

?>
GazetteSDF 21-Sep-2018 09:02
For the verification of a form, to "block" entries such as a simple space or other, I thought of this combination:

function isEmpty($string){
    $val = preg_replace('#[^A-Za-z0-9]+#', '', $string) ;
    $val = trim($string, '');
    return ($string=='') ;
}

This protects entries like: ' ' ,'  -  ', '. - +', ... On entries like name, profession, ... it's helpful
xzero at elite7hackers dot net 13-Jul-2017 11:36
Note that empty() will return false on null byte. Eg.

<?php
// Save to variable, so it works on older PHP versions
$null_byte = chr(0); // === \0

var_dump(
    empty(null),
    empty($null_byte)
);
/**
 * Results:
 *
 * bool(true)
 * bool(false)
 */
wranvaud at gmail dot com 02-Jul-2017 06:22
Note that if your variable only has an "end of line" (aka carriage return), PHP_EOL it is not considered as empty. Since end of lines are not always easy to spot this can be confusing.
Claudio Galdiolo 25-Mar-2017 12:20
Warning: an "empty" object is NOT considered to be empty
<?php
$var = new stdClass(); // "empty" object
var_dump(empty($var)); // bool(false)
?>

I don't know if there is a standard way to test for "empty" objects, I personally use array casting:
<?php
$var = new stdClass(); // "empty" object
$var = (array) $var; // cast to empty array
var_dump(empty($var)); // bool(true)
?>
mcfogw at gmail dot com 08-May-2016 02:40
I'm comparing behavior of `!` and `empty()`, find an undocumented behavior here.

just like cast-to-boolean, `empty()` cares about if SimpleXML object is made from emty tags.

`empty(simplexml_load_string('<root />'))` is TRUE

this behavior begins from php 5.1.0~7, in 5.0.x that's FALSE

proof here => https://3v4l.org/74Tc4
Javier Alfonso 11-Mar-2016 01:05
If you test an element of an array (like $_POST['key]), it test if the key doesn't exist or if it exist if its value is empty and never emit a warning.

For who don't want to test what happen if passed an array element here is my test and result.

<?php
$a = array();
$b = array('key');
$c = array('key' => false);
$d = array('key' => 'La verdad nos hace libres');

echo (empty($a['key'])?'A empty':'A not empty'), ' - ', (empty($b['key'])?'B empty':'B not empty'), ' - ', (empty($c['key'])?'C empty':'C not empty'), ' - ', (empty($d['key'])?'D empty':'D not empty');
?>

And the result is:

    A empty - B empty - C empty - D not empty
your dot brother dot t at hotmail dot com 25-Dec-2014 09:38
(experienced in PHP 5.6.3) The `empty()` can't evaluate `__get()` results explicitly, so the `empty()` statement bellow always renders true
<?php
class Juice extends Liquid{
   protected $apple;
   protected $orange;
   public function __get($name) {
      return $this->$name;
   }
   public function __construct($apple, $orange) {
      $this->apple = $apple;
      $this->orange = $orange;
   }
}

class Glass {
   protected $liquid;
   public function __get($name) {
      return $name == "liquid" ? $this->liquid : false;
   }
   public function __construct() {
      $this->juice = new Juice(3, 5);
   }
}

$glass = new Glass();
var_dump(empty($this->liquid->apple));

/**
 * The output is:
 * bool(true)
 */
?>

The correct way is to force the evaluation of `__get()` first, by using extra braces around implicit statements like this:
<?php
var_dump(empty(($this->liquid->apple)));

/**
 * The output is:
 * bool(false)
 */
?>

So if you are using packages that utilize object oriented designs and magic methods like `__get()`, it's a good practice to always use double braces for `empty()` calls.
chrisdmiddleton at gmail dot com 09-Sep-2014 08:37
If you want to use empty() to evaluate an expression (not a variable), and you don't have PHP 5.5+, you can do it by wrapping the call to empty in a function, like so:
<?php
function is_empty($var) {

    return empty($var);

}
?>
Then you can do something like
<?php
if(is_empty(NULL)) {
 /* ... */
}
?>
without issue, since the local variable $var is being tested rather than the expression in the function call itself.
Nanhe Kumar 31-Jan-2014 10:17
<?php
/**
* @author :  Nanhe Kumar <nanhe.kumar@gmail.com>
* List of all empty values
**/

$testCase = array(
    1 => '',
    2 => "",
    3 => null,
    4 => array(),
    5 => FALSE,
    6 => NULL,
    7=>'0',
    8=>0,

);

foreach ($testCase as $k => $v) {
    if (empty($v)) {
        echo "<br> $k=>$v is empty";
    }
}
/**
Output
1=> is empty
2=> is empty
3=> is empty
4=>Array is empty
5=> is empty
6=> is empty
7=>0 is empty
8=>0 is empty
**/
?>
martin dot aarhof at gmail dot com 15-Mar-2012 08:38
<?php
$str = '            ';
var_dump(empty($str)); // boolean false
?>

So remember to trim your strings first!

<?php
$str = '        ';
$str = trim($str);
var_dump(empty($str)); // boolean true
?>
qeremy 07-Mar-2012 03:33
Simple solution for: "Fatal error: Can't use function return value in write context in ..."

<?php
function _empty($val) { return empty($val); }
?>
chris dot wisefool at gmail dot com 09-Sep-2011 12:44
Note that checking the existence of a subkey of an array when that subkey does not exist but the parent does and is a string will return false for empty.

i.e.

<?php
$params = array('search'=>'1');
empty($params['search']['filter']); # returns false
?>

This is correct, per the documentation (http://php.net/manual/en/language.types.string.php); quite a bit down the page is the Warning: "Writing to an out of range offset pads the string with spaces. Non-integer types are converted to integer." ) I didn't receive a warning but perhaps that's correct too...depends on whether the string -> integer conversion is considered "illegal": "Illegal offset type emits E_NOTICE."

(i.e. since $params['search'] is a string, the 'filter' subscript is converted to 0, so the test becomes empty($params['search'][0]), which is obviously false), but it tripped me up enough to mistakenly file a bug report (which I've since closed).
steven at nevvix dot com 02-May-2011 09:16
When you need to accept these as valid, non-empty values:
- 0 (0 as an integer)
- 0.0 (0 as a float)
- "0" (0 as a string)

<?php
function is_blank($value) {
    return empty($value) && !is_numeric($value);
}
?>

This is similar to Rails' blank? method.
phpsort 21-Jan-2011 11:13
I'm summarising a few points on empty() with inaccessible properties, in the hope of saving others a bit of time. Using PHP 5.3.2.
<?php
class MyClass {
    private $foo = 'foo';
}
$myClass = new MyClass;
echo $myClass->foo;
?>
As expected, this gives "Fatal error: Cannot access private property MyClass::$foo".
But substitute the line
if (empty($myClass->foo)) echo 'foo is empty'; else echo 'foo is not empty';
and we get the misleading result "foo is empty".
There is NO ERROR OR WARNING, so this is a real gotcha. Your code will just go wrong silently, and I would say it amounts to a bug.
If you add two magic functions to the class:
public function __get($var) { return $this->$var; }
public function __isset($var) { return isset($this->$var); }
then we get the expected result. You need both functions.
For empty($myClass->foo), I believe PHP calls __isset, and if that is true returns the result of empty on the result of __get. (Some earlier posts wrongly suggest PHP just returns the negation of __isset).
BUT ...
See the earlier post by php at lanar dot com. I confirm those results, and if you extend the test with isset($x->a->b->c) it appears that __isset is only called for the last property in the chain. Arguably another bug. empty() behaves in the same way. So things are not as clear as we might hope.
See also the note on empty() at
http://uk3.php.net/manual/en/language.oop5.overloading.php
Clear as mud!
e dot klerks at i-bytes dot nl 08-Nov-2010 06:16
To make an empty function, which only accepts arrays, one can use type-hinting:

<?php
// emptyArray :: [a] -> Bool

function emptyArray(array $xs){
 return empty($xs);
}
?>

Type hinting is a good thing to use in your code, because it makes it more easy to reason about your code. Besides that, it automatically documents the code.
rodolphe dot bodeau at free dot fr 25-Oct-2010 06:37
Be careful, if "0" (zero as a string), 0 (zero as an integer) and -0 (minus zero as an integer) return true, "-0" (minus zero as a string (yes, I already had some customers that wrote -0 into a form field)) returns false. You need to cast your variable before testing it with the empty() function :

<?php
$var = "-0";
echo empty($var);  // returns false
$var = (int) $var; // casts $var as an integer
echo empty($vat);  // returns true
?>
ehsmeng 21-Sep-2010 05:25
I can't use empty() in all situations because '0' is usually not considered empty to me. I did a quick benchmark over the most common ways of testing it. '' == var suffers from '' == 0 is true so that's just there for curiosity.

<?php
    $microtimeref = microtime(true);
    $a = 0;
    $b = 'asd';
    for ($i = 0; $i < 5000000; $i++)
    {
        if (0 == mb_strlen ($b))
        {
            $a++;
        }
    }
    echo "Total time 0 == mb_strlen(var): <b>" . round(microtime(true) - $microtimeref,3) . 's</b><br />';
?>

The results:

Total time 0 == mb_strlen(var): 3.141s
Total time 0 === strlen(var): 2.904s
Total time 0 == strlen(var): 2.878s
Total time '' == var: 1.774s
Total time '' === var: 1.706s
Total time empty(var): 1.496s

Thus '' === var will be my zero length string test.
marko dot crni at gmail dot com 16-Sep-2010 11:06
Calling non existing object property, empty($object->prop), will trigger __isset(), the same way as isset($object->prop) does, but there is one difference. If __isset() returns TRUE, another call to __get() will be made and actual return value will be result of empty() and result of __get().
aidan1103 at yahoo dot com 26-Mar-2010 10:11
empty() should not necessarily return the negation of the __isset() magic function result, if you set a data member to 0, isset() should return true and empty should also return true.  A simpler implementation of the __isset magic function would be:

public function __isset($key) {
  return isset($this->{$key});
}

I don't understand why this isn't included in stdClass and inherited by default.
Janci 24-Aug-2009 08:57
Please note that results of empty() when called on non-existing / non-public variables of a class are a bit confusing if using magic method __get (as previously mentioned by nahpeps at gmx dot de). Consider this example:

<?php
class Registry
{
    protected $_items = array();
    public function __set($key, $value)
    {
        $this->_items[$key] = $value;
    }
    public function __get($key)
    {
        if (isset($this->_items[$key])) {
            return $this->_items[$key];
        } else {
            return null;
        }
    }
}

$registry = new Registry();
$registry->empty = '';
$registry->notEmpty = 'not empty';

var_dump(empty($registry->notExisting)); // true, so far so good
var_dump(empty($registry->empty)); // true, so far so good
var_dump(empty($registry->notEmpty)); // true, .. say what?
$tmp = $registry->notEmpty;
var_dump(empty($tmp)); // false as expected
?>

The result for empty($registry->notEmpty) is a bit unexpeced as the value is obviously set and non-empty. This is due to the fact that the empty() function uses __isset() magic functin in these cases. Although it's noted in the documentation above, I think it's worth mentioning in more detail as the behaviour is not straightforward. In order to achieve desired (expexted?) results, you need to add  __isset() magic function to your class:

<?php
class Registry
{
    protected $_items = array();
    public function __set($key, $value)
    {
        $this->_items[$key] = $value;
    }
    public function __get($key)
    {
        if (isset($this->_items[$key])) {
            return $this->_items[$key];
        } else {
            return null;
        }
    }
    public function __isset($key)
    {
        if (isset($this->_items[$key])) {
            return (false === empty($this->_items[$key]));
        } else {
            return null;
        }
    }
}

$registry = new Registry();
$registry->empty = '';
$registry->notEmpty = 'not empty';

var_dump(empty($registry->notExisting)); // true, so far so good
var_dump(empty($registry->empty)); // true, so far so good
var_dump(empty($registry->notEmpty)); // false, finally!
?>

It actually seems that empty() is returning negation of the __isset() magic function result, hence the negation of the empty() result in the __isset() function above.
denobasis-bozic et yahoo.com 18-Jul-2009 04:54
test if all multiarray's are empty

<?php
function is_multiArrayEmpty($multiarray) {
    if(is_array($multiarray) and !empty($multiarray)){
        $tmp = array_shift($multiarray);
            if(!is_multiArrayEmpty($multiarray) or !is_multiArrayEmpty($tmp)){
                return false;
            }
            return true;
    }
    if(empty($multiarray)){
        return true;
    }
    return false;
}

$testCase = array (
0 => '',
1 => "",
2 => null,
3 => array(),
4 => array(array()),
5 => array(array(array(array(array())))),
6 => array(array(), array(), array(), array(), array()),
7 => array(array(array(), array()), array(array(array(array(array(array(), array())))))),
8 => array(null),
9 => 'not empty',
10 => "not empty",
11 => array(array("not empty")),
12 => array(array(),array("not empty"),array(array()))
);

foreach ($testCase as $key => $case ) {
    echo "$key is_multiArrayEmpty= ".is_multiArrayEmpty($case)."<br>";
}
?>

OUTPUT:
========

0 is_multiArrayEmpty= 1
1 is_multiArrayEmpty= 1
2 is_multiArrayEmpty= 1
3 is_multiArrayEmpty= 1
4 is_multiArrayEmpty= 1
5 is_multiArrayEmpty= 1
6 is_multiArrayEmpty= 1
7 is_multiArrayEmpty= 1
8 is_multiArrayEmpty= 1
9 is_multiArrayEmpty=
10 is_multiArrayEmpty=
11 is_multiArrayEmpty=
12 is_multiArrayEmpty=
mlibazisi mabandla 28-May-2009 02:47
in cases when "0" is not intended to be empty, here is a simple function to safely test for an empty string (or mixed variable):

<?php
function _empty($string){
     $string = trim($string);
     if(!is_numeric($string)) return empty($string);
     return FALSE;
}
?>
thomas at thomasnoest dot nl 28-Nov-2008 01:54
Note on the selfmade empty function below:

function_exists() returns false on language constructs and empty is a language construct.
Anonymous 20-Aug-2008 02:41
To add on to what anon said, what's happening in john_jian's example seems unusual because we don't see the implicit typecasting going on behind the scenes.  What's really happening is:

$a = '';
$b = 0;
$c = '0';

(int)$a == $b -> true, because any string that's not a number gets converted to 0
$b==(int)$c -> true, because the int in the string gets converted
and
$a==$c -> false, because they're being compared as strings, rather than integers.  (int)$a==(int)$c should return true, however.

Note: I don't remember if PHP even *has* typecasting, much less if this is the correct syntax.  I'm just using something for the sake of examples.
tom at tomwardrop dot com 22-May-2008 05:01
In reply to "admin at ninthcircuit dot info",

Using str_replace is unnecessary. I would encourage the use of trim which would most likely be faster (haven't tested) and easier. Trim also takes care of other white space like line breaks and tabs. Actually, in most of the applications I code, I use a multi-dimensional array map function with trim on the Super Globals such as $_POST, $_GET and $_COOKIE as so far, there hasn't been an instance where I would want any user input to begin or end with whitespace. The good thing about doing this is that you never have to worry about 'trimming' your input which makes your code easier and more reliable (incase you forget to trim some input).
Greg Hartwig 02-May-2008 02:55
David from CodeXplorer:
>> The ONLY reason to use empty() is for code readability. It is the same as an IF/ELSE check.
>> So, don't bother using EMPTY in the real world.

This is NOT true.  empty() will not generate warnings if you're testing against an undefined variable as a simple boolean check will.  On production systems, warnings are usually shut off, but they are often active on development systems.

You could test a flag with
   <?php if ($flagvar)  ... ?>
but this can generate a warning if $flagvar is not set.

Instead of
   <?php if (isset($flagvar) && $flagvar)  ... ?>
you can simply use
   <?php if (!empty($flagvar))  ... ?>

for easy readability without warnings.
EllisGL 04-Oct-2007 02:48
Here's what I do for the zero issue issue:
if($val == '' && $val !== 0 && $val !== '0')
rkulla2 at gmail dot com 05-Sep-2007 03:57
Since I didn't like how empty() considers 0 and "0" to be empty (which can easily lead to bugs in your code), and since it doesn't deal with whitespace, i created the following function:

<?php
function check_not_empty($s, $include_whitespace = false)
{
    if ($include_whitespace) {
        // make it so strings containing white space are treated as empty too
        $s = trim($s);
    }
    return (isset($s) && strlen($s)); // var is set and not an empty string ''
}
?>

Instead of saying if (!empty($var)) { // it's not empty } you can just say if (check_not_empty($var)) { // it's not empty }.

If you want strings that only contain whitespace (such as tabs or spaces) to be treated as empty then do: check_not_empty($var, 1)

If you want to check if a string IS empty then do: !check_not_empty($var).

So, whenever you want to check if a form field both exists and contains a value just do: if (check_not_empty($_POST['foo'], 1))

no need to do if (isset() && !empty()) anymore =]
jmarbas at hotmail dot com 01-Jul-2005 09:10
empty($var) will return TRUE if $var is empty (according to the definition of 'empty' above) AND if $var is not set.

I know that the statement in the "Return Values" section of the manual already says this in reverse:

"Returns FALSE if var has a non-empty and non-zero value."

but I was like "Why is this thing returning TRUE for unset variables???"... oh i see now... Its supposed to return TRUE for unset variables!!!

<?php
  ini_set('error_reporting',E_ALL);
  ini_set('display_errors','1');
  empty($var);
?>
paul at worldwithoutwalls dot co dot uk 22-May-2004 10:09
Note the exceptions when it comes to decimal numbers:

<?php
$a = 0.00;
$b = '0.00';
echo (empty($a)? "empty": "not empty"); //result empty
echo (empty($b)? "empty": "not empty"); //result not empty
//BUT...
$c = intval($b);
echo (empty($c)? "empty": "not empty"); //result empty
?>

For those of you using MySQL, if you have a table with a column of decimal type, when you do a SELECT, your data will be returned as a string, so you'll need to do apply intval() before testing for empty.

e.g.
TABLE t has columns id MEDIUMINT and d DECIMAL(4,2)
and contains 1 row where id=1, d=0.00
<?php
$q = "SELECT * FROM t";
$res = mysql_query($q);
$row = mysql_fetch_assoc($res);
echo (empty($row['d'])? "empty": "not empty"); //result not empty
?>


変数の float 値を取得する

  • ≪ empty
  • get_debug_type ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の float 値を取得する

floatval

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

floatval — 変数の float 値を取得する

説明

floatval(mixed $value): float

value の float 値を返します。

パラメータ

value

あらゆるスカラ型を指定できます。オブジェクトに floatval() を使用することはできません。 その場合は E_WARNING レベルのエラーを発して 1 を返します。

戻り値

指定した変数の float 値を返します。 空の配列の場合は 0、空でない配列の場合は 1 を返します。

文字列の場合、ほとんどは 0 を返しますが、先頭の文字が何であるかによってこれは変わります。 float 型へのキャスト と同じルールに従います。

変更履歴

バージョン | 説明
8.0.0 | オブジェクトを指定して変換しようとした場合のエラーレベルが、 E_NOTICE から E_WARNING に変更されました。

例

例1 floatval() の例

<?php
$var = '122.34343The';
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 122.34343
?>

例2 floatval() で、先頭が非数値である場合の例

<?php
$var = 'The122.34343';
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 0
?>

参考

  • boolval() - 変数の boolean としての値を取得する
  • intval() - 変数の整数としての値を取得する
  • strval() - 変数の文字列としての値を取得する
  • settype() - 変数の型をセットする
  • 型の相互変換

User Contributed Notes

iliyazelenkog at gmail dot com 02-Nov-2018 10:51
(float) would be more performant here (up to 6x times faster).

intval, floatval, doubleval, strva for PHP4 functions (intval, floatval, doubleval, strval), in PHP5 use type casting construction (i.e. '(type) parameter').
radler63 at hotmail dot com 16-Feb-2018 12:27
I get the following disturbing results:
var_dump string(10) "?0.01333"
echo the string=?0.01333
echo (float)string=0
echo floatval(string)=0

The string is an outcome of array_map('str_getcsv', file(...
I can't find the characters 8-10

thanks
T-Soloveychik at ya.ru 03-Mar-2017 02:23
Float value less than 0.0001 (0.0000999999999999995) will be converted by floatval to scientific notation (exponential notation):
<?php

var_dump(floatval(0.0000999999999999995)); # >> float(0,0001)

var_dump(floatval("0.000099")); # >> float(9.9E-5)

var_dump((string)floatval(0.000099)); # >> string(6) "9.9E-5"
pierpaolocira 15-Nov-2016 11:41
Be aware the last tofloat($num).

In theory it is very useful to have a function "separator-agnostic" (I think "locale based" solutions are useless if you have to parse a user file that can have a locale different to the server).

But this can lead to misinterpretations; in short: "123,456" is "123.456" (so comma used as decimal separator) or "123456" (comma used as thousand separator).

In any case, if you really want to use it, please don't forget that this function doesn't manage negative numbers.
movila dot e dot v at gmail dot com 05-Jul-2016 08:05
<?php
       $price = '1.299,00 EUR';
    //$price = 'EUR 1.299,00';
    //$price = '$1,745.09';
    //$price = '$14';
    //$price = '$.14';

    function floatValue($str){
        if(preg_match("/([0-9\.,-]+)/", $str, $match)){
            $value = $match[0];
            if( preg_match("/(\.\d{1,2})$/", $value, $dot_delim) ){
                $value = (float)str_replace(',', '', $value);
            }
            else if( preg_match("/(,\d{1,2})$/", $value, $comma_delim) ){
                $value = str_replace('.', '', $value);
                $value = (float)str_replace(',', '.', $value);
            }
            else
                $value = (int)$value;
        }
        else {
            $value = 0;
        }
        return $value;
    }

    echo floatValue($price);
/*
    1.299,00
    1.299,00
    1,745.09
    14
    0.14
*/
?>
Alexey M 23-Mar-2016 02:28
There is much easier way to deal with formatted numbers:

<?php
$str = '13,232.95';
$var = (double)filter_var($str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
var_dump($var);
?>
double(13232.95)
zfcb13 at gmail dot com 24-Oct-2015 10:18
More elegant function with selection of decimal point (deafault ,):
<?php
function floatvaldec($v, $dec=',') { return floatval(ereg_replace("," , "." , ereg_replace("[^-0-9$dec]","",$v))); }

// examples:
echo '<br>'.floatvaldec('somthing123.456.789,12Euro') ;
echo '<br>'.floatvaldec('x123,456 789.12 Euro', '.') ;
echo '<br>'.floatvaldec('123.456 789,12$') ;
?>
brewal dot renault at gmail dot com 26-Feb-2014 09:25
This function takes the last comma or dot (if any) to make a clean float, ignoring thousand separator, currency or any other letter :

function tofloat($num) {
    $dotPos = strrpos($num, '.');
    $commaPos = strrpos($num, ',');
    $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos :
        ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false);

    if (!$sep) {
        return floatval(preg_replace("/[^0-9]/", "", $num));
    }

    return floatval(
        preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . '.' .
        preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num)))
    );
}

$num = '1.999,369?';
var_dump(tofloat($num)); // float(1999.369)
$otherNum = '126,564,789.33 m2';
var_dump(tofloat($otherNum)); // float(126564789.33)

Demo : http://codepad.org/NW4e9hQH
PapaPinguoin 31-Oct-2011 07:26
To view the very large and very small numbers (eg from a database DECIMAL), without displaying scientific notation, or leading zeros.

FR : Pour afficher les tres grand et tres petits nombres (ex. depuis une base de donnees DECIMAL), sans afficher la notation scientifique, ni les zeros non significatifs.

<?php
function floattostr( $val )
{
    preg_match( "#^([\+\-]|)([0-9]*)(\.([0-9]*?)|)(0*)$#", trim($val), $o );
    return $o[1].sprintf('%d',$o[2]).($o[3]!='.'?$o[3]:'');
}
?>

<?php
echo floattostr("0000000000000001");
echo floattostr("1.00000000000000");
echo floattostr("0.00000000001000");
echo floattostr("0000.00010000000");
echo floattostr("000000010000000000.00000000000010000000000");
echo floattostr("-0000000000000.1");
echo floattostr("-00000001.100000");

// result
// 1
// 1
// 0.00000000001
// 0.0001
// 10000000000.0000000000001
// -0.1
// -1.1

?>
secretr at NOSPAM dot e107 dot org 03-Jan-2011 08:37
setlocale() and floatval() duo could break your DB queries in a very simple way:

<?php
setlocale(LC_ALL, 'bg_BG', 'bgr_BGR');
echo floatval(0.15); // output 0,15
?>

You would need simple workaround like:

<?php
function number2db($value)
{
    $larr = localeconv();
    $search = array(
        $larr['decimal_point'],
        $larr['mon_decimal_point'],
        $larr['thousands_sep'],
        $larr['mon_thousands_sep'],
        $larr['currency_symbol'],
        $larr['int_curr_symbol']
    );
    $replace = array('.', '.', '', '', '', '');

    return str_replace($search, $replace, $value);
}

setlocale(LC_ALL, 'bg_BG', 'bgr_BGR');
$testVal = floatval(0.15); // result 0,15
var_dump($testVal, number2db($testVal));

// Result:
// float(0,15)
// string(4) "0.15"
?>
chris at georgakopoulos dot com 29-Jul-2009 08:12
locale aware floatval:

<?php
function ParseFloat($floatString){
    $LocaleInfo = localeconv();
    $floatString = str_replace($LocaleInfo["mon_thousands_sep"] , "", $floatString);
    $floatString = str_replace($LocaleInfo["mon_decimal_point"] , ".", $floatString);
    return floatval($floatString);
}
?>
ted devito 09-Mar-2009 09:10
i noticed all (well, unless i missed something) the functions working with decimals destroy trailing decimal places. this function restores them in case you want to be able to display a consistent precision for users.

<?php
function decimal($val, $precision = 0) {
    if ((float) $val) :
        $val = round((float) $val, (int) $precision);
        list($a, $b) = explode('.', $val);
        if (strlen($b) < $precision) $b = str_pad($b, $precision, '0', STR_PAD_RIGHT);
        return $precision ? "$a.$b" : $a;
    else : // do whatever you want with values that do not have a float
        return $val;
    endif;
}
?>
info at marc-gutt dot de 26-Aug-2008 03:55
<?php
function floatvalue($value) {
     return floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,2}))*$#e', "str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'", $value));
}
?>

It is much shorter and able to handle those one, too:
xx,-
xx,--
xx'xxx,xx

After using floatvalue() you can go forward with number_format() as usual.
Michiel 30-Jul-2008 05:21
The last getFloat() function is not completely correct.

1.000.000 and 1,000,000 and its negative variants are not correctly parsed. For the sake of comparing and to make myself clear I use the name parseFloat in stead of getFloat for the new function:

<?php
function parseFloat($ptString) {
            if (strlen($ptString) == 0) {
                    return false;
            }

            $pString = str_replace(" ", "", $ptString);

            if (substr_count($pString, ",") > 1)
                $pString = str_replace(",", "", $pString);

            if (substr_count($pString, ".") > 1)
                $pString = str_replace(".", "", $pString);

            $pregResult = array();

            $commaset = strpos($pString,',');
            if ($commaset === false) {$commaset = -1;}

            $pointset = strpos($pString,'.');
            if ($pointset === false) {$pointset = -1;}

            $pregResultA = array();
            $pregResultB = array();

            if ($pointset < $commaset) {
                preg_match('#(([-]?[0-9]+(\.[0-9])?)+(,[0-9]+)?)#', $pString, $pregResultA);
            }
            preg_match('#(([-]?[0-9]+(,[0-9])?)+(\.[0-9]+)?)#', $pString, $pregResultB);
            if ((isset($pregResultA[0]) && (!isset($pregResultB[0])
                    || strstr($preResultA[0],$pregResultB[0]) == 0
                    || !$pointset))) {
                $numberString = $pregResultA[0];
                $numberString = str_replace('.','',$numberString);
                $numberString = str_replace(',','.',$numberString);
            }
            elseif (isset($pregResultB[0]) && (!isset($pregResultA[0])
                    || strstr($pregResultB[0],$preResultA[0]) == 0
                    || !$commaset)) {
                $numberString = $pregResultB[0];
                $numberString = str_replace(',','',$numberString);
            }
            else {
                return false;
            }
            $result = (float)$numberString;
            return $result;
}
?>

Comparing of float parsing functions with the following function:

<?php
function testFloatParsing() {
    $floatvals = array(
        "22 000,76",
        "22.000,76",
        "22,000.76",
        "22 000",
        "22,000",
        "22.000",
        "22000.76",
        "22000,76",
        "1.022.000,76",
        "1,022,000.76",
        "1,000,000",
        "1.000.000",
        "1022000.76",
        "1022000,76",
        "1022000",
        "0.76",
        "0,76",
        "0.00",
        "0,00",
        "1.00",
        "1,00",
        "-22 000,76",
        "-22.000,76",
        "-22,000.76",
        "-22 000",
        "-22,000",
        "-22.000",
        "-22000.76",
        "-22000,76",
        "-1.022.000,76",
        "-1,022,000.76",
        "-1,000,000",
        "-1.000.000",
        "-1022000.76",
        "-1022000,76",
        "-1022000",
        "-0.76",
        "-0,76",
        "-0.00",
        "-0,00",
        "-1.00",
        "-1,00"
    );

    echo "<table>
        <tr>
            <th>String</th>
            <th>floatval()</th>
            <th>getFloat()</th>
            <th>parseFloat()</th>
        </tr>";

    foreach ($floatvals as $fval) {
        echo "<tr>";
        echo "<td>" . (string) $fval . "</td>";

        echo "<td>" . (float) floatval($fval) . "</td>";
        echo "<td>" . (float) getFloat($fval) . "</td>";
        echo "<td>" . (float) parseFloat($fval) . "</td>";
        echo "</tr>";
    }
    echo "</table>";
}
?>
steve at opilo dot net 20-Jul-2008 06:07
Most of the functions listed here that deal with $ and , are unnecessarily complicated. You can use ereg_replace() to strip out ALL of the characters that will cause floatval to fail in one simple line of code:

<?php $output = floatval(ereg_replace("[^-0-9\.]","",$input)); ?>
leprau at leprau dot de 19-Jul-2007 09:26
For those of you, who are looking for a function that rips the first,
but longest possible float (or at least integer) from a string,
like 123.45 from the string "Price: 123,45$"

If no useable value is found, the function returns false.

Checks for both comma and dot as decimal-separator,
but does not check for 3 digits between thousands,
so 1,234.5 is as valid as 1,23,4.5 (both will return 1234.5)

12,.3 will return 12
1,000,000 will return 1000.0 !

(if thousands separator is defined,
decimals should be defined too ...
in fact I was too lazy to check for that too)

Here you go, and feel free to optimize the function ;)
<?php
function getFloat($pString) {
    if (strlen($pString) == 0) {
            return false;
    }
    $pregResult = array();

    $commaset = strpos($pString,',');
    if ($commaset === false) {$commaset = -1;}

    $pointset = strpos($pString,'.');
    if ($pointset === false) {$pointset = -1;}

    $pregResultA = array();
    $pregResultB = array();

    if ($pointset < $commaset) {
        preg_match('#(([-]?[0-9]+(\.[0-9])?)+(,[0-9]+)?)#', $pString, $pregResultA);
    }
    preg_match('#(([-]?[0-9]+(,[0-9])?)+(\.[0-9]+)?)#', $pString, $pregResultB);
    if ((isset($pregResultA[0]) && (!isset($pregResultB[0])
            || strstr($preResultA[0],$pregResultB[0]) == 0
            || !$pointset))) {
        $numberString = $pregResultA[0];
        $numberString = str_replace('.','',$numberString);
        $numberString = str_replace(',','.',$numberString);
    }
    elseif (isset($pregResultB[0]) && (!isset($pregResultA[0])
            || strstr($pregResultB[0],$preResultA[0]) == 0
            || !$commaset)) {
        $numberString = $pregResultB[0];
        $numberString = str_replace(',','',$numberString);
    }
    else {
        return false;
    }
    $result = (float)$numberString;
    return $result;
}
?>
aa at geb-team dot de 04-Sep-2006 08:03
@pillepop2003 at yahoo dot de

<?php
float('-100.00', array('single_dot_as_decimal' => true)); // whoops, returns -10000
?>

use: "/^[0-9-]*[\.]{1}[0-9-]+$/"
instead of: "/^[0-9]*[\.]{1}[0-9-]+$/"
19-Apr-2005 05:30
you can also use typecasting instead of functions:

(float) $value;
pillepop2003 at yahoo dot de 14-Dec-2004 02:38
Use this snippet to extract any float out of a string. You can choose how a single dot is treated with the (bool) 'single_dot_as_decimal' directive.
This function should be able to cover almost all floats that appear in an european environment.

<?php

    function float($str, $set=FALSE)
    {
        if(preg_match("/([0-9\.,-]+)/", $str, $match))
        {
            // Found number in $str, so set $str that number
            $str = $match[0];

            if(strstr($str, ','))
            {
                // A comma exists, that makes it easy, cos we assume it separates the decimal part.
                $str = str_replace('.', '', $str);    // Erase thousand seps
                $str = str_replace(',', '.', $str);    // Convert , to . for floatval command

                return floatval($str);
            }
            else
            {
                // No comma exists, so we have to decide, how a single dot shall be treated
                if(preg_match("/^[0-9]*[\.]{1}[0-9-]+$/", $str) == TRUE && $set['single_dot_as_decimal'] == TRUE)
                {
                    // Treat single dot as decimal separator
                    return floatval($str);

                }
                else
                {
                    // Else, treat all dots as thousand seps
                    $str = str_replace('.', '', $str);    // Erase thousand seps
                    return floatval($str);
                }
            }
        }

        else
        {
            // No number found, return zero
            return 0;
        }
    }

// Examples

echo float('foo 123,00 bar'); // returns 123.00
echo float('foo 123.00 bar' array('single_dot_as_decimal'=> TRUE)); //returns 123.000
echo float('foo 123.00 bar' array('single_dot_as_decimal'=> FALSE)); //returns 123000
echo float('foo 222.123.00 bar' array('single_dot_as_decimal'=> TRUE)); //returns 222123000
echo float('foo 222.123.00 bar' array('single_dot_as_decimal'=> FALSE)); //returns 222123000

// The decimal part can also consist of '-'
echo float('foo 123,-- bar'); // returns 123.00

?>

Big Up.
Philipp
anonymous at start dot be 15-Jun-2004 07:00
Easier-to-grasp-function for the ',' problem.

<?php
function Getfloat($str) {
  if(strstr($str, ",")) {
    $str = str_replace(".", "", $str); // replace dots (thousand seps) with blancs
    $str = str_replace(",", ".", $str); // replace ',' with '.'
  }

  if(preg_match("#([0-9\.]+)#", $str, $match)) { // search for number that may contain '.'
    return floatval($match[0]);
  } else {
    return floatval($str); // take some last chances with floatval
  }
}

echo Getfloat("$ 19.332,35-"); // will print: 19332.35
?>
vickers at hotpop dot com 26-Jan-2004 03:45
floatval() does not work with "$35,234.43", as it could not handle the '$' and the ','.  The following takes care of all values, such that only numeric and the decimal sign are input into floatval().  (It probably shows I'm an old 'c' guy)...this function only lightly tested.

<?php
function strtflt($str) {
    $il = strlen($str);
    $flt = "";
    $cstr = "";

    for($i=0;$i<$il;$i++) {
        $cstr = substr($str, $i, 1);
        if(is_numeric($cstr) || $cstr == ".")
            $flt = $flt.$cstr;
    }
    return floatval($flt);
}
?>

Richard Vickers
vickers@hotpop.com
Zipi 25-Apr-2003 02:51
This function converts a string to a float no matter is the decimal separator dot (.) or comma (,). It also converts integers correctly. It takes the digits from the beginning of the string and ignores all other characters.

<?php
function floatval($strValue) {
   $floatValue = ereg_replace("(^[0-9]*)(\\.|,)([0-9]*)(.*)", "\\1.\\3", $strValue);
   if (!is_numeric($floatValue)) $floatValue = ereg_replace("(^[0-9]*)(.*)", "\\1", $strValue);
   if (!is_numeric($floatValue)) $floatValue = 0;
   return $floatValue;
  }
?>

-Zipi (Finland)
jason at shadonet dot com 07-Mar-2003 07:07
Instead of using floatval which only appeared in PHP 4.2 you could juse use $variable = (float)$variable

This function doesn't seem to add any functionality that wasn't already there.


変数の型名をデバッグしやすい形で取得する

  • ≪ floatval
  • get_defined_vars ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の型名をデバッグしやすい形で取得する

get_debug_type

(PHP 8)

get_debug_type — 変数の型名をデバッグしやすい形で取得する

説明

get_debug_type(mixed $value): string

PHP の変数 value の、解決済みの名前を返します。 この関数は、オブジェクトをクラス名に、 リソースをリソース型の名前に、 そしてスカラー型の値を型宣言で使われている通常の名前に解決します。

gettype() は、歴史的な理由で決まった型の名前を返します。 この関数は、それよりも実際に使われている型により近い名前を返すという点が異なります。

パラメータ

value

型をチェックする変数。

戻り値

返される文字列としてあり得るのは、以下になります:

型 + 状態 | 戻り値 | 備考
null | "null" | -
boolean (true または false) | "bool" | -
整数型 | "int" | -
浮動小数点型 | "float" | -
文字列 | "string" | -
配列 | "array" | -
リソース | "resource (resourcename)" | -
リソース(閉じられたもの) | "resource (closed)" | 例: fclose で閉じられたファイルストリーム
名前付きのクラスのオブジェクト | 名前空間も含めた、クラスの完全修飾名。 例: Foo\Bar | -
無名クラスのオブジェクト | "class@anonymous" | 無名クラスのオブジェクトは、$x = new class { ... } という文法で作成されます。

例

例1 get_debug_type() の例

<?php
echo get_debug_type(null) . PHP_EOL;
echo get_debug_type(true) . PHP_EOL;
echo get_debug_type(1) . PHP_EOL;
echo get_debug_type(0.1) . PHP_EOL;
echo get_debug_type("foo") . PHP_EOL;
echo get_debug_type([]) . PHP_EOL;

$fp = fopen(__FILE__, 'rb');
echo get_debug_type($fp) . PHP_EOL;

fclose($fp);
echo get_debug_type($fp) . PHP_EOL;

echo get_debug_type(new stdClass) . PHP_EOL;
echo get_debug_type(new class {}) . PHP_EOL;
?>

上の例の出力は、 たとえば以下のようになります。

null
bool
int
float
string
array
resource (stream)
resource (closed)
stdClass
class@anonymous

参考

  • gettype() - 変数の型を取得する
  • get_class() - オブジェクトのクラス名を返す

User Contributed Notes

vyacheslav dot belchuk at gmail dot com 02-Nov-2023 05:52
Also, the function returns the correct type of Closure, as opposed to gettype()

<?php

echo get_debug_type(function () {}) . PHP_EOL;
echo get_debug_type(fn () => '') . PHP_EOL . PHP_EOL;

echo gettype(function () {}) . PHP_EOL;
echo gettype(fn () => '');

?>

Output:

Closure
Closure

object
object


全ての定義済の変数を配列で返す

  • ≪ get_debug_type
  • get_resource_id ≫
  • PHP Manual
  • 変数操作 関数
  • 全ての定義済の変数を配列で返す

get_defined_vars

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

get_defined_vars — 全ての定義済の変数を配列で返す

説明

get_defined_vars(): array

この関数は、環境変数、サーバー変数、get_defined_vars() がコールされたスコープ内でユーザーが定義した変数を含む、全ての の定義済の変数のリストを有する多次元の配列を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

すべての変数を含む多次元の配列を返します。

例

例1 get_defined_vars() の例

<?php
$b = array(1, 1, 2, 3, 5, 8);

$arr = get_defined_vars();

// $b を出力
print_r($arr["b"]);

// PHPインタプリタのパスを出力 (CGIとして使用された場合)
// 例えば、/usr/local/bin/php
echo $arr["_"];

// コマンドラインパラメータがある場合に出力
print_r($arr["argv"]);

// サーバー変数を全て表示
print_r($arr["_SERVER"]);

// 変数の配列で利用可能なキーを全て出力
print_r(array_keys(get_defined_vars()));
?>

参考

  • isset() - 変数が宣言されていること、そして null とは異なることを検査する
  • get_defined_functions() - 定義済みの全ての関数を配列で返す
  • get_defined_constants() - すべての定数の名前とその値を連想配列として返す

User Contributed Notes

cmswares dot com at gmail dot com 10-Jan-2022 11:27
Be aware of what get_defined_vars() function returns in different contexts:

- In global scope, a list of all defined variables, whether superglobals, command line arguments or user-defined variables
- In function scope, only a list of user-defined variables (both arguments and in-body definitions)
- In class/object method scope, does not return class/object properties;

Also, as of PHP 5.4, does not return $_ENV even where available.

For further details and scope tests/results, see https://github.com/php/doc-en/issues/1317
Qiibow 05-Sep-2021 02:55
get_defined_vars() is very useful for importing many values at once
into another scope (Such as User-defined functions).

Below is an example for showing some of many values and their variable-names in a table.
(useful in debugging)

You can put this user-defined function at many places in your script
to show some values (values to be changed in loops)
to check if they are what they shall be there or not.

<?php
// Set "get_defined_vars()" to 2nd argument.
function get_value_table($name_array, $gdv) {
    $name_value_table = [];
    foreach ($name_array as $name) :
        if (!array_key_exists($name, $gdv)) :
            $value = 'undefined';
        elseif (is_bool($gdv[$name])) :
            $value = $gdv[$name]? 'true' : 'false';
        elseif (is_numeric($gdv[$name]) || is_string($gdv[$name])) :
            $value = $gdv[$name];
        elseif (is_array($gdv[$name])) :
            $value = '<pre>'.print_r($gdv[$name],true).'</pre>';
        else :
            $value = (PHP_VERSION_ID >= 80000)? get_debug_type($gdv[$name]) : get_type($gdv[$name]);
        endif;
        $name_value_table[] = '<tr><td>$'.$name.'<td>'.$value;
    endforeach;
    return '<table border=1>'.implode("\n", $name_value_table).'</table>';
} // (f) get_value_table()

$_1 = 'a';
$_2 = 'b';
$_3 = [1,2];
$_4 = false;
$_5 = null;

$name_array = ['_1','_2','_3','_4','_5','_6'];
$show_id = 1;

if ($show_id === 1) :
    echo get_value_table($name_array, get_defined_vars());
endif;
/*
if $show_id === 1, only shows below.

$_1      a
$_2      b
$_3      Array
      (
          [0] => 1
          [1] => 2
      )
$_4      false
$_5      null
$_6      undefined
*/

$_2 = 'c';
if ($show_id === 2) :
    echo get_value_table($name_array, get_defined_vars()); // $_2   c
endif;
# if $show_id === 2, $_2 turns "c".

?>
nix dot code at 4assistance dot com dot nix 22-Jun-2021 01:27
Insert this at point of interest; add keys of unwanted 1st dim variables to 2nd param of array_diff_key
<?php
echo '<pre>defined_except '; var_dump (array_diff_key (get_defined_vars(), ['GLOBALS'=>0,'_SERVER'=>0])); echo ' '.basename(__FILE__).':'.__LINE__.'</pre>'; #die;
?>
antonfedonyuk at gmail dot com 05-Feb-2021 09:29
NOTE: when you call code by eval() PHP append self vars to result, they have "__" prefix ("__source_code" and "__bootstrap_file" in PHP 7.3).

Fix:
<?php
function filter_eval_vars(array $vars): array
{
    foreach ($vars as $key => $value) {
         if ($key[0] === '_' && $key[1] === '_') {
              unset($vars[$key]);
         }
    }
    return $vars;
}

?>
npelov at croler dot net 02-Feb-2021 12:35
get_defined_vars() returns all variables - locally defined vars and global vars (well actually only super globals). If you need local vars only  - for example you need to get variables from a file - let's say config.php and you don't want a missing value to be replaced with a global defined somewhere else.

<?php

  /**
   * Filters out global vars from get_defined_vars() in order to get local vars only
   * @param array $localVars pass get_defined_vars() here
   *
   * @return array local vars only
   */
  function removeGlobals(array $localVars) {
    return array_diff_key($localVars, $GLOBALS);
  }

  define('CONFIG_FILE_PATH', '/path/to/config.php');
  function readConfig() {
    require CONFIG_FILE_PATH;
    $config = removeGlobals(get_defined_vars());
    return $config;
  }

?>
Joey 11-Jun-2018 07:22
I posted here before about "this" being in get_defined_vars.

It turns out it's not always there but in certain cases it will inexplicably appear.

    php -r '
    class Test {
        public function a() {var_dump(array_keys(get_defined_vars()));$a = 123;}
        public function b() {var_dump(array_keys(get_defined_vars()));$this;}
    }
    $t = new Test();
    $t->a();
    $t->b();
    '

    array()
    array('this')

This does not happen in PHP 7.2 but will happen in PHP 5.6.
Joey 24-Apr-2018 08:30
Some comments here point out that this function wont return references. It does however return names and names are "references".

I would not recommend the suggestions here that convert it to references.

Instead...

    public function x($a, $b, $c) {
        foreach(array_keys(get_defined_vars()) as $key)
            if($key !== 'this')
                $this->y(${$key});
    }

    public function y(&$input) {
        $input++;
    }

Instead of ${} you can also use $$.

I have done some whacky things in my time to make extremely generic code but I've never had to do anything like the above. It might not even work (but should since it's no different to $a[$key]).

You could also do $$key++ but I've never seen code like that which wasn't horrifically bad (using dynamic where dynamic isn't beneficial).

If you're doing something like that then give it additional scrutiny.
Joey 24-Apr-2018 08:20
I occasionally use this as a hack to convert arguments to an array where terseness is needed (dealing with legacy code, etc).

However in an object context it'll also pull in $this.

Make sure to unset it. If you map it to properties or an array then setting the key this wont be an error.

I recommend using a wrapper function that strips this from the result.
istiaquealamjoy at gmail dot com 23-May-2017 05:37
for all those who don't know how to us this function. copy and run this code in your computer  .

note: you need to know what superglobals are.....

<?php

$A = 5  ;
$B = 10 ;
$C = 15 ;
$D = 20 ;

$F = get_defined_vars($A);

var_dump($F);  //don't use echo. it will show error

?>

Result : will show all superglobals status along with your defined
variables along with its values
sergeyzuzic at mail dot ru 14-Nov-2015 10:35
dirty code sample:

print_r(compact(array_keys(get_defined_vars())));
mail at mkharitonov dot net 01-Jun-2014 07:14
Reference variables are returned by reference (tested on PHP 5.5.11):
<?php
$a = null;
$b = &$a;
get_defined_vars()['b'] = 4;
var_dump($b); // int(4)
?>
ryanlwh at yahoo dot com 02-Apr-2013 05:28
Since get_defined_vars() only gets the variables at the point you call the function, there is a simple way to get the variables defined within the current scope.

<?php
// The very top of your php script
$vars = get_defined_vars();

// Now do your stuff
$foo = 'foo';
$bar = 'bar';

// Get all the variables defined in current scope
$vars = array_diff(get_defined_vars(),$vars);

echo '<pre>';
print_r($vars);
echo '</pre>';
?>
Anonymous 18-Apr-2011 05:32
get_defined_vars() returns ALL the vars (in the current scope), what if you just want all YOUR vars, not PHP's super-globals?

<?php
    var_export(array_diff(get_defined_vars(), array(array())));
?>

Example...

<?php
    $TOP_LEVEL_VAR=1;
    var_export(array_diff(get_defined_vars(), array(array())));
?>

The output (with register_globals off) should be...

array (
  'TOP_LEVEL_VAR' => 1,
)

...it perfectly eliminated all the super-globals, without me having to specify them! (note with register_globals on, the output includes those globals, then TOP_LEVEL_VAR).

Here it is, as a function...(it's the best I could do {I can't call get_defined_vars() inside get_user_defined_vars() cuz of the scope issue}).

<?php
    header('Content-type: text/plain');

    $TOP_LEVEL_VAR=1;

    echo 'register_globals(';
    echo ini_get('register_globals');
    echo ') '.phpversion()."\n";

    var_export(get_user_defined_vars(get_defined_vars()));

    function get_user_defined_vars($vars) {
        return array_diff($vars, array(array()));
    }
?>

Note that originally I had an array of the super-globals I wanted removed from get_defined_vars()'s array, then I noticed even an empty double-array, array(array()), made it give me the correct result. Weird.

This was tested on PHP 5.2.9.
meint at meint dot net 11-Jan-2011 12:46
Please be aware that function_get_vars only returns the variables defined at the point before you call the function_get_vars function, it does not scan the entire function for you, only the lines before you call it.
Johan de Vries 17-Jun-2010 08:09
Note that this only returns things you've used. See http://bugs.php.net/bug.php?id=52110 . So don't expect this to have the $this entry, unless you assign $this to return $this.
donovan at example dot com 21-Oct-2008 09:15
As a note, get_defined_vars() does not return a set of variable references (as I hoped). For example:

<?php

// define a variable
$my_var = "foo";

// get our list of defined variables
$defined_vars = get_defined_vars();

// now try to change the value through the returned array
$defined_vars["my_var"] = "bar";

echo $my_var, "\n";

?>

will output "foo" (the original value). It'd be nice if get_defined_vars() had an optional argument to make them references, but I imagine its a rather specialized request. You can do it yourself (less conveniently) with something like:

<?php

$defined_vars = array();
$var_names = array_keys(get_defined_vars());

foreach ($var_names as $var_name)
{
    $defined_vars[$var_name] =& $$var_name;
}

?>
SyCo 21-Aug-2008 03:52
Here's a very simple function for debugging. It's far from perfect but I find it very handy. It outputs the var value and the var name on a new line. The problem is it'll echo any vars and their name if they share the same value. No big deal when debugging and saves the hassle of writing the HTML and var name when echoing a variable. (ev=echo variable). Using get_defined_vars() inside a function renames the var name to the functions variable so isn't as useful for debugging. Of course, you'll need access to the $GLOBALS array
<?
function ev($variable){
    foreach($GLOBALS as $key => $value){
        if($variable===$value){
            echo '<p>'.$key.' - '.$value.'</p>';
        }
    }
}

$a=0;
ev($a);
$b=0;
ev($b);
$c=0;
ev($c);
?>
Will output
a - 0

a - 0
b - 0

a - 0
b - 0
c - 0
zabmilenko at hotmail dot com 31-Aug-2006 07:32
A little gotcha to watch out for:

If you turn off RegisterGlobals and related, then use get_defined_vars(), you may see something like the following:

<?php
Array
(
    [GLOBALS] => Array
        (
            [GLOBALS] => Array
 *RECURSION*
            [_POST] => Array()
            [_GET] => Array()
            [_COOKIE] => Array()
            [_FILES] => Array()
        )

    [_POST] => Array()
    [_GET] => Array()
    [_COOKIE] => Array()
    [_FILES] => Array()

)
?>

Notice that $_SERVER isn't there.  It seems that php only loads the superglobal $_SERVER if it is used somewhere.  You could do this:

<?php
print '<pre>' . htmlspecialchars(print_r(get_defined_vars(), true)) . '</pre>';
print '<pre>' . htmlspecialchars(print_r($_SERVER, true)) . '</pre>';
?>

And then $_SERVER will appear in both lists.  I guess it's not really a gotcha, because nothing bad will happen either way, but it's an interesting curiosity nonetheless.
lbowerh at adelphia dot net 04-Jun-2004 08:19
Here is a function which generates a debug report for display or email
using get_defined_vars. Great for getting a detailed snapshot without
relying on user input.

<?php
function generateDebugReport($method,$defined_vars,$email="undefined"){
    // Function to create a debug report to display or email.
    // Usage: generateDebugReport(method,get_defined_vars(),email[optional]);
    // Where method is "browser" or "email".

    // Create an ignore list for keys returned by 'get_defined_vars'.
    // For example, HTTP_POST_VARS, HTTP_GET_VARS and others are
    // redundant (same as _POST, _GET)
    // Also include vars you want ignored for security reasons - i.e. PHPSESSID.
    $ignorelist=array("HTTP_POST_VARS","HTTP_GET_VARS",
    "HTTP_COOKIE_VARS","HTTP_SERVER_VARS",
    "HTTP_ENV_VARS","HTTP_SESSION_VARS",
    "_ENV","PHPSESSID","SESS_DBUSER",
    "SESS_DBPASS","HTTP_COOKIE");

    $timestamp=date("m/d/y h:m:s");
    $message="Debug report created $timestamp\n";

    // Get the last SQL error for good measure, where $link is the resource identifier
    // for mysql_connect. Comment out or modify for your database or abstraction setup.
    global $link;
    $sql_error=mysql_error($link);
    if($sql_error){
      $message.="\nMysql Messages:\n".mysql_error($link);
    }
    // End MySQL

    // Could use a recursive function here. You get the idea ;-)
    foreach($defined_vars as $key=>$val){
      if(is_array($val) && !in_array($key,$ignorelist) && count($val) > 0){
        $message.="\n$key array (key=value):\n";
        foreach($val as $subkey=>$subval){
          if(!in_array($subkey,$ignorelist) && !is_array($subval)){
            $message.=$subkey." = ".$subval."\n";
          }
          elseif(!in_array($subkey,$ignorelist) && is_array($subval)){
            foreach($subval as $subsubkey=>$subsubval){
              if(!in_array($subsubkey,$ignorelist)){
                $message.=$subsubkey." = ".$subsubval."\n";
              }
            }
          }
        }
      }
      elseif(!is_array($val) && !in_array($key,$ignorelist) && $val){
        $message.="\nVariable ".$key." = ".$val."\n";
      }
    }

    if($method=="browser"){
      echo nl2br($message);
    }
    elseif($method=="email"){
      if($email=="undefined"){
        $email=$_SERVER["SERVER_ADMIN"];
      }

      $mresult=mail($email,"Debug Report for ".$_ENV["HOSTNAME"]."",$message);
      if($mresult==1){
        echo "Debug Report sent successfully.\n";
      }
      else{
        echo "Failed to send Debug Report.\n";
      }
    }
}
?>
jgettys at gnuvox dot com 22-Feb-2002 07:09
Simple routine to convert a get_defined_vars object to XML.

<?php
function obj2xml($v, $indent='') {
  while (list($key, $val) = each($v)) {
    if ($key == '__attr') continue;
    // Check for __attr
    if (is_object($val->__attr)) {
      while (list($key2, $val2) = each($val->__attr)) {
        $attr .= " $key2=\"$val2\"";
      }
    }
    else $attr = '';
    if (is_array($val) || is_object($val)) {
      print("$indent<$key$attr>\n");
      obj2xml($val, $indent.'  ');
      print("$indent</$key>\n");
    }
    else print("$indent<$key$attr>$val</$key>\n");
  }
}

//Example object
$x->name->first = "John";
$x->name->last = "Smith";
$x->arr['Fruit'] = 'Bannana';
$x->arr['Veg'] = 'Carrot';
$y->customer = $x;
$y->customer->__attr->id='176C4';

$z = get_defined_vars();
obj2xml($z['y']);
?>

will output:
<customer id="176C4">
  <name>
    <first>John</first>
    <last>Smith</last>
  </name>
  <arr>
    <Fruit>Bannana</Fruit>
    <Veg>Carrot</Veg>
  </arr>
</customer>


指定されたリソースの、数値の識別子を返す

  • ≪ get_defined_vars
  • get_resource_type ≫
  • PHP Manual
  • 変数操作 関数
  • 指定されたリソースの、数値の識別子を返す

get_resource_id

(PHP 8)

get_resource_id — 指定されたリソースの、数値の識別子を返す

説明

get_resource_id(resource $resource): int

この関数は、リソースの数値の識別子を識別するための、 型安全な方法を提供します。

パラメータ

resource

評価されるリソースハンドル

戻り値

resource の識別子を数値で返します。

この関数は、本質的には resource をint にキャストしたものですが、 リソースID をより簡単に取得できるようにするものです。

例

例1 get_resource_id() が、リソースを数値にキャストした場合と同じ結果になる例

<?php
$handle = fopen("php://stdout", "w");

echo (int) $handle . "\n";

echo get_resource_id($handle);

?>

上の例の出力は、 たとえば以下のようになります。

698
698

参考

  • get_resource_type() - リソース型を返す

User Contributed Notes

There are no user contributed notes for this page.


リソース型を返す

  • ≪ get_resource_id
  • gettype ≫
  • PHP Manual
  • 変数操作 関数
  • リソース型を返す

get_resource_type

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

get_resource_type — リソース型を返す

説明

get_resource_type(resource $resource): string

この関数は、指定したリソースの型を取得します。

パラメータ

resource

評価されるリソースハンドル。

戻り値

指定された resource がリソースであった場合、 この関数はその型を表す文字列を返します。この関数で型が判別できなかった 場合は、戻り値は文字列 Unknown となります。

もし resource が resource でない場合、 この関数は null を返し、エラーを発生させます。

例

例1 get_resource_type() の例

<?php
$fp = fopen("foo", "w");
echo get_resource_type($fp) . "\n";

// PHP 8.0.0 以降は curl_init 関数がリソースの代わりに CurlHandle オブジェクトを返すようになったので、以下のコードは動作しません。
$c = curl_init();
echo get_resource_type($c) . "\n";
?>

上の例の PHP 7 での出力は、このようになります。

stream
curl

参考

  • get_resource_id() - 指定されたリソースの、数値の識別子を返す

User Contributed Notes

CertaiN 17-Jan-2014 05:04
Try this to know behavior:

<?php
function resource_test($resource, $name) {
    echo
        '[' . $name. ']',
        PHP_EOL,
        '(bool)$resource => ',
        $resource ? 'TRUE' : 'FALSE',
        PHP_EOL,
        'get_resource_type($resource) => ',
        get_resource_type($resource) ?: 'FALSE',
        PHP_EOL,
        'is_resoruce($resource) => ',
        is_resource($resource) ? 'TRUE' : 'FALSE',
        PHP_EOL,
        PHP_EOL
    ;
}

$resource = tmpfile();
resource_test($resource, 'Check Valid Resource');

fclose($resource);
resource_test($resource, 'Check Released Resource');

$resource = null;
resource_test($resource, 'Check NULL');
?>

It will be shown as...

[Check Valid Resource]
(bool)$resource => TRUE
get_resource_type($resource) => stream
is_resoruce($resource) => TRUE

[Check Released Resource]
(bool)$resource => TRUE
get_resource_type($resource) => Unknown
is_resoruce($resource) => FALSE

[Check NULL]
(bool)$resource => FALSE
get_resource_type($resource) => FALSE
Warning:  get_resource_type() expects parameter 1 to be resource, null given in ... on line 10
is_resoruce($resource) => FALSE


変数の型を取得する

  • ≪ get_resource_type
  • intval ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の型を取得する

gettype

(PHP 4, PHP 5, PHP 7, PHP 8)

gettype — 変数の型を取得する

説明

gettype(mixed $value): string

PHP 変数 value の型を返します。 型のチェックには、この関数ではなく is_* 関数を使います。

パラメータ

value

型を調べたい変数。

戻り値

返された文字列は、以下のいずれかの値を持ちます。

  • "boolean"
  • "integer"
  • "double" (歴史的な理由により float の場合は、"float" ではなく、 "double" が返されます)
  • "string"
  • "array"
  • "object"
  • "resource"
  • "resource (closed)" (PHP 7.2.0 以降)
  • "NULL"
  • "unknown type"

変更履歴

バージョン | 説明
7.2.0 | クローズ済みのリソースを渡すと 'resource (closed)'を返すようになりました。 以前は 'unknown type'を返していました。

例

例1 gettype() の例

<?php

$data = array(1, 1., NULL, new stdClass, 'foo');

foreach ($data as $value) {
echo gettype($value), "\n";
}

?>

上の例の出力は、 たとえば以下のようになります。

integer
double
NULL
object
string

参考

  • get_debug_type() - 変数の型名をデバッグしやすい形で取得する
  • settype() - 変数の型をセットする
  • get_class() - オブジェクトのクラス名を返す
  • is_array() - 変数が配列かどうかを検査する
  • is_bool() - 変数が boolean であるかを調べる
  • is_callable() - 引数が、現在のスコープから関数としてコール可能な値かどうかを調べる
  • is_float() - 変数の型が float かどうか調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_null() - 変数が null かどうか調べる
  • is_numeric() - 変数が数字または数値形式の文字列であるかを調べる
  • is_object() - 変数がオブジェクトかどうかを検査する
  • is_resource() - 変数がリソースかどうかを調べる
  • is_scalar() - 変数がスカラかどうかを調べる
  • is_string() - 変数の型が文字列かどうかを調べる
  • function_exists() - 指定した関数が定義されている場合に true を返す
  • method_exists() - クラスメソッドが存在するかどうかを確認する

User Contributed Notes

mohammad dot alavi1990 at gmail dot com 11-Jun-2023 12:37
Be careful comparing ReflectionParameter::getType() and gettype() as they will not return the same results for a given type.

string - string // OK
int - integer // Type mismatch
bool - boolean // Type mismatch
array - array // OK
Anonymous 20-Jan-2022 06:59
Same as for "boolean" below, happens with integers. gettype() return "integer" yet proper type hint is "int".

If your project is PHP8+ then you should consider using get_debug_type() instead which seems to return proper types that match used for type hints.


変数の整数としての値を取得する

  • ≪ gettype
  • is_array ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の整数としての値を取得する

intval

(PHP 4, PHP 5, PHP 7, PHP 8)

intval — 変数の整数としての値を取得する

説明

intval(mixed $value, int $base = 10): int

指定された値 base を基数（デフォルトは 10）とする、 value の int としての値を返します。 オブジェクトに intval() を使用することはできません。 その場合は E_WARNING レベルのエラーを発して 1 を返します。

パラメータ

value

整数に変換するスカラー値

base

変換のための基数

注意:

base が 0 の場合は、 value のフォーマットに基づいて利用する基数を決めます。

  • 文字列の先頭が "0x" (あるいは "0X") の場合は、基数を 16 (十六進数) とします。
  • 文字列の先頭が "0b" (あるいは "0B") の場合は、基数を 2 (二進数) とします。
  • 文字列の先頭が "0" の場合は、基数を 8 (八進数) とします。
  • それ以外の場合は、基数を 10 (十進数) とします。

戻り値

成功時は value の整数値、失敗時は 0。 空の配列の場合は 0、空でない配列の場合は 1 を返します。

最大値はシステムに依存します。32 ビットシステムでは、 最大の符号付き整数の範囲 -2147483648 ～ 2147483647 となります。 このため、そのようなシステムでは intval('1000000000000') は 2147483647 を返します。 64 ビットシステムにおける最大の符号付き整数は 9223372036854775807 となります。

文字列の場合、文字列の最左の文字に依存しますが、ほとんどの場合で 0 を返します。 整数への変換 の一般的なルールが適用されます。

変更履歴

バージョン | 説明
8.0.0 | オブジェクトを指定して変換しようとした場合のエラーレベルが、 E_NOTICE から E_WARNING に変更されました。

例

例1 intval() の例

以下の例は 64 ビットシステムに基づきます。

<?php
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('42'); // 42
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34
echo intval('042'); // 42
echo intval(1e10); // 10000000000
echo intval('1e10'); // 10000000000
echo intval(0x1A); // 26
echo intval('0x1A'); // 0
echo intval('0x1A', 0); // 26
echo intval(42000000); // 42000000
echo intval(420000000000000000000); // -4275113695319687168
echo intval('420000000000000000000'); // 9223372036854775807
echo intval(42, 8); // 42
echo intval('42', 8); // 34
echo intval(array()); // 0
echo intval(array('foo', 'bar')); // 1
echo intval(false); // 0
echo intval(true); // 1

?>

注意

注意:

パラメータ base はパラメータ value が文字列でない限り意味がありません。

参考

  • boolval() - 変数の boolean としての値を取得する
  • floatval() - 変数の float 値を取得する
  • strval() - 変数の文字列としての値を取得する
  • settype() - 変数の型をセットする
  • is_numeric() - 変数が数字または数値形式の文字列であるかを調べる
  • 型の相互変換
  • BCMath任意精度数学関数

User Contributed Notes

Denes Kellner 24-Jan-2024 09:28
Warning: intval() parses scientific notation, like "12.3e7".

This comes out of the blue when you use intval() to cut the first integer value from a string; at first glance there's nothing wrong with it, if you have "123.jeff" it will give you 123, but in the rare case of parsing something that has a second segment with a hex number, you can easily run into this. (Let's not start the "why would you parse a string like that" argument.)

So if you're not prepared, these results may surprise you:

    intval("123.ee-2") - gives you 123
    intval("123.e2-e") - gives you 12300
    intval("123.a2-e") - gives you 123
    intval("123.e-22") - gives you 0
    intval("123.e-a2") - gives you 123
    intval("123.e-2a") - gives you 1
    intval("123.2e2a") - gives you 12320
    intval("123.22e2") - gives you 12322
    intval("123.22ea") - gives you 123

Again, this is somewhat expected behaviour once you know that scientific notation is interpreted by it. But it looks like a less-than-widely known fact and I only faced this issue after 20+ years of php.
Anony Moose 15-May-2020 03:46
As a warning, do not use this function alone for input validation.

Vulnerable example:
<?php
if(isset($_GET['id']) && intval($_GET['id']) > 0){
    echo $id;
}
?>

The following requests would pass this filter:

/page.php?id=10
/page.php?id=10oops
/page.php?id=10<script>alert(1)</script>
/page.php?id=1' OR '1'='1
/page.php?id[]=<script>alert(1)</script>

Instead use the is_numeric() function for integer validation:

<?php
echo intval("10oops"); // 10
echo is_numeric("10oops");  // false
?>

Secure example:
<?php
if(isset($_GET['id']) && is_numeric($_GET['id']) && intval($_GET['id']) > 0){
    echo $id;
}
?>
Anonymous 12-Feb-2020 05:14
PHP 7.2

$test = intval(150.20*100); //15019
$test2 = intval(15020); //15020
$test3 = intval(15020.0); //15020
$test4 = 150.20*100; //15020.0
Anthony 21-Apr-2018 12:28
The binary notation is NOT supported until php7.2
<?php
                         // PHP <7.2 | PHP >=7.2
echo intval(0b11);       //    3     |     3
echo intval(-0b11);      //   -3     |    -3
echo intval('0b11');     //    0     |     0
echo intval('-0b11');    //    0     |     0
echo intval('0b11', 0);  //    0     |     3
echo intval('-0b11', 0); //    0     |    -3
?>
leon at leonidasjp dot nl 27-Jan-2017 03:35
It seems intval is interpreting valid numeric strings differently between PHP 5.6 and 7.0 on one hand, and PHP 7.1 on the other hand.

<?php
echo intval('1e5');
?>

will return 1 on PHP 5.6 and PHP 7.0,
but it will return 100000 on PHP 7.1.
taylorsarrafian at gmail dot com 11-Jul-2015 04:45
beware:

<?php

   // observe the following
   echo intval( strval( -0.0001 ) ); // 0
   echo intval( strval( -0.00001 ) ); // -1

   // this is because
   echo strval( -0.0001 ); // -.0001
   echo strval( -0.00001 ); // -1.0E-5

   // thus beware when using
   function trunc2_bad( $n ) {
      return intval( strval( $n * 100 ) / 100 );
   }

   // use this instead
   function trunc2_good( $n ) {
      return intval( floatval( strval( $n * 100 )  ) / 100 );
   }

?>
pfreet at gmail dot com 25-Apr-2013 05:27
Do not use intval() when you really want round(). This is due to how PHP handles precision.

echo number_format(8.20*100, 20), "<br />";
echo intval(8.20*100), "<br />";
echo floor(8.20*100), "<br />";
echo round(8.20*100), "<br />";

819.99999999999988631316
819
819
820
espertalhao04 at hotmail dot com 06-Mar-2013 09:58
if you want to take a number from a string, no matter what it may contain, here is a good solution:

<?php
function int($s){return(int)preg_replace('/[^\-\d]*(\-?\d*).*/','$1',$s);}

echo int('j18ugj9hu0gj5hg');
//output: 18
?>
this example returns an int, so it will follow the int rules, and has support for negative values.

<?php
function int($s){return($a=preg_replace('/[^\-\d]*(\-?\d*).*/','$1',$s))?$a:'0';}

echo int('j-1809809808908099878758765ugj9hu0gj5hg');
//output: -1809809808908099878758765
?>

this one returns a string with just the numeric value.
it also supports negative values.

the latter is better when you have a 32 bit system and you want a huge int that is higher than PHP_MAX_INT.
Ken 11-Nov-2011 11:50
Not mentioned elsewhere: intval(NULL) also returns 0.
yves 27-Dec-2010 08:53
The behaviour of intval() is interesting when supplying a base, and you better check your intval base-based expressions, as it is counter-intuitive.
As the example shows
<?php
  intval('42', 8); // => 34
  intval(42, 8);   // => 42 !
?>
PHP considers the 42 as being already an integer, and doesn't apply any conversion. And supplying
<?php
  intval(49, 8);  // => 49 !
?>
produces no error and no warning.
winbill at hotmail dot com 16-Dec-2010 08:31
Be careful :

<?php
$n="19.99";
print intval($n*100); // prints 1998
print intval(strval($n*100)); // prints 1999
?>
spoon_reloaded at gmail dot com 21-Jun-2009 10:35
Here is a really useful undocumented feature:

You can have it automatically deduce the base of the number from the prefix of the string using the same syntax as integer literals in PHP ("0x" for hexadecimal, "0" for octal, non-"0" for decimal) by passing a base of 0 to intval():

<?php
echo intval("0x1a", 0), "\n"; // hex; prints "26"
echo intval("057", 0), "\n"; // octal; prints "47"
echo intval("42", 0), "\n"; // decimal; prints "42"
?>
mkamerma at science dot uva dot nl 06-Mar-2006 11:48
As addendum, the "if ($int > 0)" check in the encode function is redundant. It doesn't do anything bad to keep it in since it will always be true when reaching that point, but it's a meaningless conditional this way. It's a remnant from when I tried to write the function in terms of bitshifts, which could lead to negative ints when shifting if the 32nd bit was set (instead of always padding with 0's when using >> it pads with 1's leading to negative ints).
Ben Laurienti 16-Jan-2006 01:21
You guys are going to love this.  I found something that I found quite disturbing.

$test1 = intVal(1999);

$amount = 19.99 * 100;
$test2 = intVal($amount);
$test3 = intVal("$amount");

echo $test1 . "<br />\n";
echo $test2 . "<br />\n";
echo $test3 . "<br />\n";

expected output:
1999
1999
1999

actual output
1999
1998
1999

Appears to be a floating point issue, but the number 1999 is the only number that I was able to get to do this.  19.99 is the price of many things, and for our purpose we must pass it as 1999 instead of 19.99.
tuxedobob at mac dot com 07-Feb-2004 04:56
Sometimes intval just won't cut it. For example if you want to use an unsigned 32-bit int and need all 32 bits. Recently, I wrote a little script that took and integer and converted it to an IP address. After realizing I couldn't just mod the whole thing, since the sign bit throws it off (and compensating for that), we ran into a problem where if it was entered into a form, the value somehow wasn't converted to an integer properly, at least not implicitly. The solution for this, and the way I recommend converting a string to an integer, is:

$num = $num + 0;

and PHP will leave your number alone; it'll just know it's a number. Such is the fun of a loosely-typed language. :)
zak at php dot net 12-Aug-2000 01:38
intval converts doubles to integers by truncating the fractional component of the number.

When dealing with some values, this can give odd results.  Consider the following:

print intval ((0.1 + 0.7) * 10);

This will most likely print out 7, instead of the expected value of 8.

For more information, see the section on floating point numbers in the PHP manual (http://www.php.net/manual/language.types.double.php)

Also note that if you try to convert a string to an integer, the result is often 0.

However, if the leftmost character of a string looks like a valid numeric value, then PHP will keep reading the string until a character that is not valid in a number is encountered.

For example:

"101 Dalmations" will convert to 101

"$1,000,000" will convert to 0 (the 1st character is not a valid start for a number

"80,000 leagues ..." will convert to 80

"1.4e98 microLenats were generated when..." will convert to 1.4e98

Also note that only decimal base numbers are recognized in strings.

"099" will convert to 99, while "0x99" will convert to 0.

One additional note on the behavior of intval.  If you specify the base argument, the var argument should be a string - otherwise the base will not be applied.

For Example:

print intval (77, 8);   // Prints 77
print intval ('77', 8); // Prints 63


変数が配列かどうかを検査する

  • ≪ intval
  • is_bool ≫
  • PHP Manual
  • 変数操作 関数
  • 変数が配列かどうかを検査する

is_array

(PHP 4, PHP 5, PHP 7, PHP 8)

is_array — 変数が配列かどうかを検査する

説明

is_array(mixed $value): bool

与えられた変数が配列かどうかを検査します。

パラメータ

value

評価する変数

戻り値

value が 配列型 の場合 true、 そうでない場合 false を返します。

例

例1 変数が配列かどうか検査する

<?php
$yes = array('this', 'is', 'an array');

echo is_array($yes) ? 'Array' : 'not an Array';
echo "\n";

$no = 'this is a string';

echo is_array($no) ? 'Array' : 'not an Array';
?>

上の例の出力は以下となります。

Array
not an Array

参考

  • array_is_list() - 指定された配列がリストかどうかをチェックする
  • is_float() - 変数の型が float かどうか調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_object() - 変数がオブジェクトかどうかを検査する

User Contributed Notes

Daniel 14-Jul-2019 06:54
The next post is not correct because has problems with blank array index:
https://www.php.net/manual/es/function.is-array.php#89332

The next code use the above link php code

<?php
function is_assoc($var)
{
        return is_array($var) && array_diff_key($var,array_keys(array_keys($var)));
}

function test($var)
{
        echo is_assoc($var) ? "I'm an assoc array.\n" : "I'm not an assoc array.\n";
}

// an assoc array
$a = array("a"=>"aaa","b"=>1,"c"=>true);
test($a);

// maybe assoc array?
$b = array(0 => "aaa", 1 => 1, 3 => true); // Index 2 not exist
test($b);
?>

# Output
I'm an assoc array.
I'm an assoc array.

"Associative arrays are arrays that use named keys that you assign to them."
https://www.w3schools.com/php/php_arrays.asp

Solution:

<?php
function is_assoc(array $array)
{
    return count(array_filter(array_keys($array), 'is_string')) > 0;
}
function test(array $array)
{
    echo is_assoc($array) ? "I'm an assoc array.\n" : "I'm not an assoc array.\n";
}
// an assoc array
$a = array("a"=>"aaa","b"=>1,"c"=>true);
test($a);
// an array
$b = array(0=>"aaa",1=>1,3=>true);
test($b);
?>

# Output
I'm an assoc array.
I'm not an assoc array.

If you want check pure assoc. array replace > 0 by === count($array)
lrgbx0 at gmail dot com 10-May-2018 08:48
is_assoc() Benchmark:

<?php

function is_assoc1($array) {
    if (!is_array($array)) return false;
    $i = count($array);
    while ($i > 0) unset($array[--$i]);
    return (bool)$array;
}

function is_assoc2(&$array) {
    if (!is_array($array)) return false;
    $i = count($array);
    while ($i > 0) {
        if (!isset($array[--$i])) return true;
    }
    return false;
}

function is_assoc3(&$array) {
    if (!is_array($array)) return false;
    $i = count($array);
    while ($i > 0) {
        if (!array_key_exists(--$i, $array)) return true;
    }
    return false;
}

function is_assoc4($array) {
    if (!is_array($array)) return false;
    ksort($array);
    foreach (array_keys($array) as $k => $v) {
        if ($k !== $v) return true;
    }
    return false;
}

function is_assoc5(&$array) {
    return is_array($array) && array_diff_key($array, array_keys($array));
}

$arr1 = array(); // not associative
$arr2 = $arr3 = array('foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo'); // not associative
asort($arr3); // not associative, shuffled keys
$arr4 = array('foo', 'bar', 'baz', 'foo', 'bar', null, 'foo', 'bar', 'baz', 'foo'); // not associative but is_assoc2() thinks it is
$arr5 = array(0 => 'foo', 1 => 'bar', 2 => 'baz', 3 => 'foo', 4 => 'bar', 5 => 'baz', 'foo3' => 'foo', 'bar3' => 'bar', 'baz3' => 'baz', 'foo4' => 'foo'); // associative

$i = $j = 0;
$time = array(0.0, 0.0, 0.0, 0.0, 0.0);

for ($j = 0; $j < 2000; $j++) {
    $time[0] -= microtime(true);
    for ($i = 0; $i < 1000; $i++) {
        if (is_assoc1($arr1) || is_assoc1($arr2) || is_assoc1($arr3) || is_assoc1($arr4) || !is_assoc1($arr5)) {
            echo 'error';
            break;
        }
    }
    $time[0] += microtime(true);
    $time[1] -= microtime(true);
    for ($i = 0; $i < 1000; $i++) {
        if (is_assoc2($arr1) || is_assoc2($arr2) || is_assoc2($arr3) || !is_assoc2($arr4) || !is_assoc2($arr5)) { // $arr4 tweaked
            echo 'error';
            break;
        }
    }
    $time[1] += microtime(true);
    $time[2] -= microtime(true);
    for ($i = 0; $i < 1000; $i++) {
        if (is_assoc3($arr1) || is_assoc3($arr2) || is_assoc3($arr3) || is_assoc3($arr4) || !is_assoc3($arr5)) {
            echo 'error';
            break;
        }
    }
    $time[2] += microtime(true);
    $time[3] -= microtime(true);
    for ($i = 0; $i < 1000; $i++) {
        if (is_assoc4($arr1) || is_assoc4($arr2) || is_assoc4($arr3) || is_assoc4($arr4) || !is_assoc4($arr5)) {
            echo 'error';
            break;
        }
    }
    $time[3] += microtime(true);
    $time[4] -= microtime(true);
    for ($i = 0; $i < 1000; $i++) {
        if (is_assoc5($arr1) || is_assoc5($arr2) || is_assoc5($arr3) || is_assoc5($arr4) || !is_assoc5($arr5)) {
            echo 'error';
            break;
        }
    }
    $time[4] += microtime(true);
}

echo 'is_assoc1(): ' . $time[0] . "\n";
echo 'is_assoc2(): ' . $time[1] . "\n";
echo 'is_assoc3(): ' . $time[2] . "\n";
echo 'is_assoc4(): ' . $time[3] . "\n";
echo 'is_assoc5(): ' . $time[4] . "\n";

?>

is_assoc1() - uses unset(), a bit slow, but mem friendly and no function calls
is_assoc2() - uses isset(), fastest one, but returns TRUE whenever array contains NULL
is_assoc3() - fixed is_assoc2(), uses array_key_exists(), fast and memory friendly, and much smarter than the following (no need to check all those keys)
is_assoc4() - alex' version with proper check and key sorting
is_assoc5() - fixed a bit JTS' version, really nice one, but uses too many functions and checks all keys

Results:

is_assoc1(): 2.1628699302673
is_assoc2(): 1.1079933643341
is_assoc3(): 1.7120850086212
is_assoc4(): 3.9194552898407
is_assoc5(): 1.9509885311127
rik at mmod dot co 12-Apr-2018 05:39
Using is_array prior to an in_array within an if clause will safely escape a check against a variable that could potentially be a non-array when using in_array.  For instance:

NOTE: A real use case might be that we have a list of possible flags which  in a database we have stored whether each of the flags are 0 or 1.  We want a list of the flags which have the value of 1 to be returned.

Our example here will not use so many technical artifacts, but will be based on similar logic just to get the point across.

<?php

// We have a list of known values
$knownVars = ['apple', 'orange'];

// A list of values to check
$listToCheck = ['pear', 'banana'];

// And a method that takes a list of values to check and returns a new list
// of the items from said list that are found to be valid...
public function getValidItemsList( $listToCheck /*['pear', 'banana']*/)
{
    $returnList = [];
    foreach($listToCheck as $key => $val)
    {
        if(in_array($val, $knownVars))
        {
            array_push($returnList, $val);
        }
    }

    if(empty($returnList))
    {
        // We have a special case if there were no valid items found, which is the case we are going over
        return  -1;
    }

    // Otherwise, normally returns a list of the items that were found to be valid
    return $returnList;
}

// Call the method and check for any valid items that can be used for some purpose
$validItemsList =  getValidItemsList($listToCheck);

// In this usage we could potentially get an exception because
// in_array() expects an array for argument #2, checking that the value != -1 does not escape the if statement:
if(isset($validItemsList) && $validItemsList != -1 && in_array('apple', $validItemsList))
{
    //...
}

// In this usage, we break free from the if statement safely:
if(isset($validItemsList) && $validItemsList != -1 && is_array($validItemsList) && in_array('apple', $validItemsList))
{
    //...
}

?>

Hope that can help someone, I know it helped me.
gwschnell at ewe dot net 22-Mar-2018 04:58
An error will be thrown If is_array() is applied to a nonexisting varble.
Rob Thomas 05-Oct-2016 10:40
Please note that the 'cast to array' check is horrendously out of date.

Running that code against PHP 5.6 results in this:

is_array  :  0.93975400924683
cast, === :  1.2425191402435

So, please use 'is_array', not the horrible casting hack.
ari at umbrella dot bz 05-Sep-2016 08:34
hperrin's results have indeed changed in PHP 7. The opposite is now true, is_array is faster than comparison:

is_array  :  0.52148389816284
cast, === :  0.84179711341858

Tested 1000000 iterations.
mbrodala at pagemachine dot de 24-Aug-2016 01:22
Notice that the benchmark results from hperrin at gmail dot com have changed in the meantime:

is_array  :  0.31888604164124
cast, === :  0.58448791503906

(Using PHP 5.6.24, I expect other results with PHP 7)
dmitry dot sushilov at gmail dot com 12-Oct-2014 12:49
function is_associate_array($array)
{
    return $array === array_values($array);
}

or you can add check is_array in functions
JTS 08-Jun-2010 04:22
I would change the order of the comparison, because if it is really an empty array, it is better to stop at that point before doing several 'cpu & memory intensive' function calls.

In the end on a ratio of 3 not empty arrays to 1 empty array computed for 1000000 iterations it needed 10% less time.
Or the other way round:
It needed approx 3% to 4% more time if the array is not empty, but was at least 4 times faster on empty arrays.

Additionally the memory consumption veritably lesser.

<?php
function is_assoc($array) {
    return (is_array($array) && (count($array)==0 || 0 !== count(array_diff_key($array, array_keys(array_keys($array))) )));
}
?>
hperrin at gmail dot com 28-May-2010 10:02
I've found a faster way of determining an array. If you use is_array() millions of times, you will notice a *huge* difference. On my machine, this method takes about 1/4 the time of using is_array().

Cast the value to an array, then check (using ===) if it is identical to the original.

<?php
if ( (array) $unknown !== $unknown ) {
    echo '$unknown is not an array';
} else {
    echo '$unknown is an array';
}
?>

You can use this script to test the speed of both methods.

<pre>
What's faster for determining arrays?

<?php

$count = 1000000;

$test = array('im', 'an', 'array');
$test2 = 'im not an array';
$test3 = (object) array('im' => 'not', 'going' => 'to be', 'an' => 'array');
$test4 = 42;
// Set this now so the first for loop doesn't do the extra work.
$i = $start_time = $end_time = 0;

$start_time = microtime(true);
for ($i = 0; $i < $count; $i++) {
    if (!is_array($test) || is_array($test2) || is_array($test3) || is_array($test4)) {
        echo 'error';
        break;
    }
}
$end_time = microtime(true);
echo 'is_array  :  '.($end_time - $start_time)."\n";

$start_time = microtime(true);
for ($i = 0; $i < $count; $i++) {
    if (!(array) $test === $test || (array) $test2 === $test2 || (array) $test3 === $test3 || (array) $test4 === $test4) {
        echo 'error';
        break;
    }
}
$end_time = microtime(true);
echo 'cast, === :  '.($end_time - $start_time)."\n";

echo "\nTested $count iterations."

?>
</pre>

Prints something like:

What's faster for determining arrays?

is_array  :  7.9920151233673
cast, === :  1.8978719711304

Tested 1000000 iterations.
Anonymous 16-May-2009 02:18
Using empty() in the previous example posted by Anonymous will result in a "Fatal error: Can't use function return value in write context".  I suggest using count() instead:

<?php
function is_assoc($array) {
    return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));
}
?>
skaimauve at yahoo dot ca 03-Mar-2009 12:12
Or you could make use of the array_diff_key and array_key function:

<?php

function is_assoc($var)
{
        return is_array($var) && array_diff_key($var,array_keys(array_keys($var)));
}

function test($var)
{
        echo is_assoc($var) ? "I'm an assoc array.\n" : "I'm not an assoc array.\n";
}

// an assoc array
$a = array("a"=>"aaa","b"=>1,"c"=>true);
test($a);

// an array
$b = array_values($a);
test($b);

// an object
$c = (object)$a;
test($c);

// other types
test($a->a);
test($a->b);
test($a->c);

?>

The above code outputs:
I'm an assoc array.
I'm not an assoc array.
I'm not an assoc array.
I'm not an assoc array.
I'm not an assoc array.
I'm not an assoc array.
jim at akubo dot net 28-Oct-2008 11:02
yousef's example was wrong because is_vector returned true instead of false if the key was found
here is the fixed version (only 2 lines differ)
<?php
function is_vector( &$array ) {
   if ( !is_array($array) || empty($array) ) {
      return -1;
   }
   $next = 0;
   foreach ( $array as $k => $v ) {
      if ( $k !== $next ) return false;
      $next++;
   }
   return true;
}
?>
yousuf at philipz dot com 16-Oct-2008 03:41
alex frase's example is fast but elanthis at awesomeplay dot com's example is faster and Ilgar's modification of alex's code is faulty (the part " || $_array[$k] !== $v"). Also, Ilgar's suggestion of giving a false return value when the variable isnt an array is not suitable in my opinion and i think checking if the array is empty would also be a suitable check before the rest of the code runs.

So here's the modified (is_vector) version

<?php
function is_vector( &$array ) {
   if ( !is_array($array) || empty($array) ) {
      return -1;
   }
   $next = 0;
   foreach ( $array as $k => $v ) {
      if ( $k !== $next ) return true;
      $next++;
   }
   return false;
}
?>

and the modified (alex's is_assoc) version

<?php
function is_assoc($_array) {
    if ( !is_array($_array) || empty($array) ) {
        return -1;
    }
    foreach (array_keys($_array) as $k => $v) {
        if ($k !== $v) {
            return true;
        }
    }
    return false;
}
?>
alex frase 16-Jul-2008 08:05
Yet another simpler, faster is_assoc():

<?php
function is_assoc($array) {
  foreach (array_keys($array) as $k => $v) {
    if ($k !== $v)
      return true;
  }
  return false;
}
?>

In my tests it runs about twice as fast as Michael/Gabriel's array_reduce() method.

(Speaking of which: Gabriel's version doesn't work as written; it reports associative arrays as numeric if only the first key is non-numeric, or if the keys are numeric but ordered backwards.  Michael solves this problem by comparing array_reduce() to count(), but that costs another function call; it also works to just compare to -1 instead of 0, and therefore return -1 as the ternary else from the callback).
Michael 11-Sep-2007 12:37
A slight modification of what's below:

<?php

function is_assoc($array)
{
    return is_array($array) && count($array) !== array_reduce(array_keys($array), 'is_assoc_callback', 0);
}

function is_assoc_callback($a, $b)
{
    return $a === $b ? $a + 1 : 0;
}

?>
angelo [at] mandato <dot> com 26-Feb-2007 01:32
The is_associative_array() and is_sequential_array() functions posted by 'rjg4013 at rit dot edu' are not accurate.

The functions fail to recognize indexes that are not in sequence or in order.  For example, array(0=>'a', 2=>'b', 1=>'c') and array(0=>'a', 3=>'b', 5=>'c') would be considered as sequential arrays. A true sequential array would be in consecutive order with no gaps in the indices.

The following solution utilizes the array_merge properties. If only one array is given and the array is numerically indexed, the keys get re-indexed in a continuous way.  The result must match the array passed to it in order to truly be a numerically indexed (sequential) array.  Otherwise it can be assumed to be an associative array (something unobtainable in languages such as C).

The following functions will work for PHP >= 4.

<?php
    function is_sequential_array($var)
    {
        return (array_merge($var) === $var && is_numeric( implode( array_keys( $var ) ) ) );
    }

    function is_assoc_array($var)
    {
        return (array_merge($var) !== $var || !is_numeric( implode( array_keys( $var ) ) ) );
    }
?>

If you are not concerned about the actual order of the indices, you can change the comparison to == and != respectively.
jupiter at nospam dot com 29-May-2006 11:42
Will check a Multi-Dimentional Array to any specified level.  This is a fix to 11/16/05 submission, which would break since you must supply a foreach with an array. Beware recursive functions shouldn't go over 100 deep or could break the memory stack on server.

<?php
// checks for multiarray to defined depth level recursively
// original $level must be 2 or more, else will instantly return true
function isDeepMultiArray($multiarray, $level = 2) {  // default is simple multiarray
    if (is_array($multiarray)) {  // confirms array
        if ($level == 1) {  // $level reaches 1 after specified # of recursions
            return true;  // returns true to recursive function conditional
        }  // end conditional
        foreach ($multiarray as $array) {  // goes one level deeper into array
            if (isDeepMultiArray($array, $level - 1)) {  // check subarray
                $message = "I'm a multiarray";  // optional message
                return $message;  // best if $message = true so function returns boolean
            }  // end recursive function
        }  // end loop
    } else {  // not an array at specified level
    return false;  // is also used recursively so can't change to message
    }
}

if (isDeepMultiArray(array(array()), 2)); // beware this returns true eventhough arrays are empty

?>
BTW my notation is consistent with the PEAR manual on coding standards, which is what php.net says to follow. I hope a function like this gets included in PHP6.
March 30-Mar-2006 06:28
And here is another variation for a function to test if an array is associative. Based on the idea by mot4h.

<?php
function is_associative($array)
{
  if (!is_array($array) || empty($array))
    return false;

  $keys = array_keys($array);
  return array_keys($keys) !== $keys;
}
?>


変数が boolean であるかを調べる

  • ≪ is_array
  • is_callable ≫
  • PHP Manual
  • 変数操作 関数
  • 変数が boolean であるかを調べる

is_bool

(PHP 4, PHP 5, PHP 7, PHP 8)

is_bool — 変数が boolean であるかを調べる

説明

is_bool(mixed $value): bool

指定した変数が boolean であるかどうかを調べます。

パラメータ

value

評価する変数。

戻り値

value が bool である場合に true 、それ以外の場合に false を返します。

例

例1 is_bool() の例

<?php
$a = false;
$b = 0;

// $a は boolean なので、これは true となります
if (is_bool($a) === true) {
echo "Yes, this is a boolean";
}

// $b は boolean ではないので、これは false となります
if (is_bool($b) === false) {
echo "No, this is not a boolean";
}
?>

参考

  • is_float() - 変数の型が float かどうか調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_object() - 変数がオブジェクトかどうかを検査する
  • is_array() - 変数が配列かどうかを検査する

User Contributed Notes

Julio Marchi 08-Sep-2019 12:32
To check if a variable is boolean is one thing, to evaluate if the value of a variable represents a boolean condition (true or false) is another.

Here is a simple function that checks the status of the received variable in regard to boolean equivalencies (case-insensitive).

<?php
/**
 * Check "Booleanic" Conditions :)
 *
 * @param  [mixed]  $variable  Can be anything (string, bol, integer, etc.)
 * @return [boolean]           Returns TRUE  for "1", "true", "on" and "yes"
 *                             Returns FALSE for "0", "false", "off" and "no"
 *                             Returns NULL otherwise.
 */
function is_enabled($variable)
{
    if (!isset($variable)) return null;
    return filter_var($variable, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
}
?>

Of course, it is a simplistic approach, but for the majority of cases it will do the job right.

And, just to put the thing from the right perspective, here's a real function that does what Phill disclosed:

<?php
/**
 * Convert $variable to boolean (adapted from Phill answer)
 *
 * @param  [mixed]  $variable  Can be anything
 * @return [boolean]           Returns the booelan equivalent to $variable based on Zend Enegine interpretation
 */
function to_bool($variable)
{
    return (bool)$variable;
}
?>

I hope it helps someone. Happy coding.
phil 10-Jan-2019 06:21
It should be stated that this function returns true if the _type_ of it's argument is boolean. It does not convert or coerce the value to a boolean type, not sure why so many comments focus on how to do this.
However, if you arrived here looking for a solution to convert a value to a boolean type, use this:

to_bool($x) { return (bool)$x; }


引数が、現在のスコープから関数としてコール可能な値かどうかを調べる

  • ≪ is_bool
  • is_countable ≫
  • PHP Manual
  • 変数操作 関数
  • 引数が、現在のスコープから関数としてコール可能な値かどうかを調べる

is_callable

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

is_callable — 引数が、現在のスコープから関数としてコール可能な値かどうかを調べる

説明

is_callable(mixed $value, bool $syntax_only = false, string &$callable_name = null): bool

引数の内容が、callable かどうかを調べます。

パラメータ

value

チェックする値。

syntax_only

true の場合、この関数は単に value が関数またはメソッドであるかどうかだけを調べます。 文字列以外の型の変数や不正な形式の配列は、 引数として受け付けられません。有効な配列の形式は、 最初のエントリがオブジェクトあるいは文字列で、2 番目のエントリが文字列である 2 つのエントリからなるものです。

callable_name

"呼び出し名" を受け取ります。下の例では "someClass::someMethod" です。これは someClass::SomeMethod() が static メソッドであるかのようにみえますが、 そうではないことに注意しましょう。

戻り値

value がコール可能な場合に true、 それ以外の場合に false を返します。

例

例1 is_callable() の例

<?php
// 変数が、関数としてコール可能かどうかを確かめます。

//
// 関数名を含む単純な配列
//

function someFunction()
{
}

$functionVariable = 'someFunction';

var_dump(is_callable($functionVariable, false, $callable_name)); // bool(true)

echo $callable_name, "\n"; // someFunction

//
// メソッドを含む配列
//

class someClass {

function someMethod()
{
}

}

$anObject = new someClass();

$methodVariable = array($anObject, 'someMethod');

var_dump(is_callable($methodVariable, true, $callable_name)); // bool(true)

echo $callable_name, "\n"; // someClass::someMethod

?>

例2 is_callable() とコンストラクタ

is_callable() はコンストラクタを callable だとはみなしません。

<?php

class Foo
{
public function __construct() {}
public function foo() {}
}

var_dump(
is_callable(array('Foo', '__construct')),
is_callable(array('Foo', 'foo'))
);

上の例の出力は以下となります。

bool(false)
bool(false)

注意

  • オブジェクトは、 __invoke() を実装していれば常にコール可能ですし、 そのメソッドは現在のスコープからアクセス可能です。
  • __callStatic() を実装したクラスの場合、そのクラス名はコール可能です。
  • __call() を実装しているオブジェクトが存在する場合、 この関数は、そのオブジェクトのあらゆるメソッドに対して true を返します。 たとえそのメソッドが定義されていなくてもです。
  • この関数を、クラス名を指定してコールすると、 オートローディングが行われる可能性があります。

参考

  • function_exists() - 指定した関数が定義されている場合に true を返す
  • method_exists() - クラスメソッドが存在するかどうかを確認する

User Contributed Notes

mohamed dot elidrissi at protonmail dot com 28-Jun-2021 12:26
Note that -- as mentioned in the migration guide-- starting from PHP 8.0, is_callable() will not work with non-static methods if you use a class name, instead an object of the class should be provided:

<?php

class Test
{
    public function method1() { }
    public static function method2() { }
}

// Pre PHP 8
var_dump(is_callable(array('Test', 'method1'))); // bool(true)
var_dump(is_callable(array('Test', 'method2'))); // bool(true)

// Post PHP 8
var_dump(is_callable(array('Test', 'method1'))); // bool(false)
var_dump(is_callable(array('Test', 'method2'))); // bool(true)
var_dump(is_callable(array(new Test, 'method1'))); // bool(true)

?>
izharaazmi at gmail dot com 11-Jan-2016 06:50
If the target class has __call() magic function implemented, then is_callable will ALWAYS return TRUE for whatever method you call it.
is_callable does not evaluate your internal logic inside __call() implementation (and this is for good).
Therefore every method name is callable for such classes.

Hence it is WRONG to say (as someone said):
...is_callable will correctly determine the existence of methods made with __call...

Example:
<?php
class TestCallable
{
    public function testing()
    {
          return "I am called.";
    }

    public function __call($name, $args)
    {
        if($name == 'testingOther')
        {
                return call_user_func_array(array($this, 'testing'), $args);
        }
    }
}

$t = new TestCallable();
echo $t->testing();      // Output: I am called.
echo $t->testingOther(); // Output: I am called.
echo $t->working();      // Output: (null)

echo is_callable(array($t, 'testing'));       // Output: TRUE
echo is_callable(array($t, 'testingOther'));  // Output: TRUE
echo is_callable(array($t, 'working'));       // Output: TRUE, expected: FALSE
?>


引数が、数えられる値かどうかを調べる

  • ≪ is_callable
  • is_double ≫
  • PHP Manual
  • 変数操作 関数
  • 引数が、数えられる値かどうかを調べる

is_countable

(PHP 7 >= 7.3.0, PHP 8)

is_countable — 引数が、数えられる値かどうかを調べる

説明

is_countable(mixed $value): bool

引数の内容が、array または Countable を実装したオブジェクトかどうかを調べます。

パラメータ

value

チェックする値

戻り値

value が数えられる場合に true、 それ以外の場合に false を返します。

変更履歴

バージョン | 説明
7.3.0 | is_countable() が追加されました。

例

例1 is_countable() の例

<?php
var_dump(is_countable([1, 2, 3])); // bool(true)
var_dump(is_countable(new ArrayIterator(['foo', 'bar', 'baz']))); // bool(true)
var_dump(is_countable(new ArrayIterator())); // bool(true)
var_dump(is_countable(new stdClass())); // bool(false)

参考

  • is_array() - 変数が配列かどうかを検査する
  • is_object() - 変数がオブジェクトかどうかを検査する
  • is_iterable() - 変数の内容が反復可能な値であることを確認する
  • is_bool() - 変数が boolean であるかを調べる

User Contributed Notes

renic 12-Jun-2019 08:33
be wary of using is_object($var) and assuming that the object has implemented Countable.  Not all objects are countable directly with count().
danmichaelo at gmail dot com 08-Apr-2019 08:33
Note that a polyfill for this method is also provided by the symfony/polyfill project.
info at arisendrake dot de 30-Aug-2018 11:10
If you are unable to upgrade to PHP 7.3 (not released at the time of writing), you can use this simple polyfill:

<?php
if (!function_exists('is_countable')) {
    function is_countable($var) {
        return (is_array($var) || $var instanceof Countable);
    }
}
?>


is_float のエイリアス

  • ≪ is_countable
  • is_float ≫
  • PHP Manual
  • 変数操作 関数
  • is_float のエイリアス

is_double

(PHP 4, PHP 5, PHP 7, PHP 8)

is_double — is_float() のエイリアス

説明

この関数は次の関数のエイリアスです。 is_float().

User Contributed Notes

There are no user contributed notes for this page.


変数の型が float かどうか調べる

  • ≪ is_double
  • is_int ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の型が float かどうか調べる

is_float

(PHP 4, PHP 5, PHP 7, PHP 8)

is_float — 変数の型が float かどうか調べる

説明

is_float(mixed $value): bool

与えられた変数の型が float かどうかを調べます。

注意:

変数が数値もしくは数値形式の文字列の場合 (フォームからの入力の場合は 常に文字列となります) 、is_numeric() を使用する必要があります。

パラメータ

value

評価する変数

戻り値

もし value が float 型 の場合 true、 そうでない場合は false を返します。

例

例1 is_float() の例

<?php

var_dump(is_float(27.25));
var_dump(is_float('abc'));
var_dump(is_float(23));
var_dump(is_float(23.5));
var_dump(is_float(1e7)); // 科学記法
var_dump(is_float(true));
?>

上の例の出力は以下となります。

bool(true)
bool(false)
bool(false)
bool(true)
bool(true)
bool(false)

参考

  • is_bool() - 変数が boolean であるかを調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_numeric() - 変数が数字または数値形式の文字列であるかを調べる
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_array() - 変数が配列かどうかを検査する
  • is_object() - 変数がオブジェクトかどうかを検査する

User Contributed Notes

Anonymous 28-Jan-2021 10:38
is_float() returns true for NAN, INF and -INF. You may want to test is_float($value) && is_finite($value), or alternatively filter_var($value, FILTER_VALIDATE_FLOAT) !== false.
Erutan409 at Hotmail dot com 19-May-2015 02:37
Boylett's solution is elegant (http://php.net/manual/en/function.is-float.php#85848), but won't work for long float's or variables that are not explicitly type of 'string' or for long floats that are encased in quotes, making it a string that will be truncated/rounded when cast to a float.  So, further logic must be completed to test for the case.  Take the following example:

<?php

if (!function_exists("test_float")) {

    function test_float($test) {

        if (!is_scalar($test)) {return false;}

        $type = gettype($test);

        if ($type === "float") {
            return true;
        } else {
            return preg_match("/^\\d+\\.\\d+$/", $test) === 1;
        }

    }

}

$test = "3.14159265358979323846264338g32795";

var_dump($test);
var_dump((float)$test);
var_dump($test == (string)(float)$test);
var_dump(test_float($test));

?>

Will produce (32-bit):

string(34) "3.14159265358979323846264338g32795"
float(3.1415926535898)
bool(false)
bool(false)

So far, so good, right?  Yeah, but it's misleading, because the string is so long, that when it's converted to a float, it won't be equivalent to the comparison of the value being cast back into a string .  So the aforementioned short function works.  Look at this next example:

<?php

$test = 3.1415926535897932384626433832795;

var_dump($test);
var_dump((float)$test);
var_dump($test == (string)(float)$test);
var_dump(test_float($test));

?>

Will produce (32-bit):

float(3.1415926535898)
float(3.1415926535898)
bool(false)
bool(true)

Why is it not working now, but the value is truly a float?  Same reasoning as mentioned before.  The float is so long that it's truncated/rounded and doesn't match the comparison being done with the short-hand function.

So, as you can see, more logic should be applied to the variable you're testing.
nonzer0value 26-Mar-2015 08:20
Coercing the value to float and back to string was a neat trick. You can also just add a literal 0 to whatever you're checking.

<?php
function isfloat($value) {
  // PHP automagically tries to coerce $value to a number
  return is_float($value + 0);
}
?>

Seems to work ok:

<?php
isfloat("5.0" + 0);  // true
isfloat("5.0");  // false
isfloat(5 + 0);  // false
isfloat(5.0 + 0);  // false
isfloat('a' + 0);  // false
?>

YMMV
KIVagant at gmail dot com 21-Aug-2012 12:04
Yet another regular expression for float in real life:

<?php
function isTrueFloat($val)
{
    $pattern = '/^[-+]?(((\\\\d+)\\\\.?(\\\\d+)?)|\\\\.\\\\d+)([eE]?[+-]?\\\\d+)?$/';

    return (!is_bool($val) && (is_float($val) || preg_match($pattern, trim($val))));
}
?>

// Matches:
1, -1, 1.0, -1.0, '1', '-1', '1.0', '-1.0', '2.1', '0', 0, ' 0 ', ' 0.1 ', ' -0.0 ', -0.0, 3., '-3.', '.27', .27, '-0', '+4', '1e2', '+1353.0316547', '13213.032468e-13465', '-8E+3', '-1354.98879e+37436'

// Non-matches:
false, true, '', '-', '.a', '-1.a', '.a', '.', '-.', '1+', '1.3+', 'a1', 'e.e', '-e-4', 'e2', '8e', '3,25'
Boylett 20-Sep-2008 09:29
If you want to test whether a string is containing a float, rather than if a variable is a float, you can use this simple little function:

function isfloat($f) return ($f == (string)(float)$f);
kshegunov at gmail dot com 31-Mar-2008 01:32
As celelibi at gmail dot com stated, is_float checks ONLY the type of the variable not the data it holds!

If you want to check if string represent a floating point value use the following regular expression and not is_float(),
or poorly written custom functions.

/^[+-]?(([0-9]+)|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*)|
(([0-9]+|([0-9]*\.[0-9]+|[0-9]+\.[0-9]*))[eE][+-]?[0-9]+))$/


変数が整数型かどうかを検査する

  • ≪ is_float
  • is_integer ≫
  • PHP Manual
  • 変数操作 関数
  • 変数が整数型かどうかを検査する

is_int

(PHP 4, PHP 5, PHP 7, PHP 8)

is_int — 変数が整数型かどうかを検査する

説明

is_int(mixed $value): bool

与えられた変数の型が整数型かどうかを検査します。

注意:

変数が数値か数値形式の文字列かを判断したい場合 (フォームからの入力の場合は 常に文字列となります) 、is_numeric() を使用する必要があります。

パラメータ

value

評価する変数

戻り値

もし value が 整数型(int)の場合 true、 そうでない場合は false を返します。

例

例1 is_int() の例

<?php
$values = array(23, "23", 23.5, "23.5", null, true, false);
foreach ($values as $value) {
echo "is_int(";
var_export($value);
echo ") = ";
var_dump(is_int($value));
}
?>

上の例の出力は以下となります。

is_int(23) = bool(true)
is_int('23') = bool(false)
is_int(23.5) = bool(false)
is_int('23.5') = bool(false)
is_int(NULL) = bool(false)
is_int(true) = bool(false)
is_int(false) = bool(false)

参考

  • is_bool() - 変数が boolean であるかを調べる
  • is_float() - 変数の型が float かどうか調べる
  • is_numeric() - 変数が数字または数値形式の文字列であるかを調べる
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_array() - 変数が配列かどうかを検査する
  • is_object() - 変数がオブジェクトかどうかを検査する

User Contributed Notes

Hector (hector-ordonez.com) 25-Jul-2016 12:00
Simon Neaves's answer is incomplete: negative integers will return false.

I recommend checking stackoverflow's answers:
http://stackoverflow.com/questions/6416763/checking-if-a-variable-is-an-integer-in-php
Vasiliy Makogon 08-Apr-2016 10:10
If you want detect integer of float values, which presents as pure int or float, and presents as string values, use this functions:

<?php
function isInteger($val)
{
    if (!is_scalar($val) || is_bool($val)) {
        return false;
    }
    if (is_float($val + 0) && ($val + 0) > PHP_INT_MAX) {
        return false;
    }
    return is_float($val) ? false : preg_match('~^((:?+|-)?[0-9]+)$~', $val);
}

function isFloat($val)
{
    if (!is_scalar($val)) {
        return false;
    }
    return is_float($val + 0);
}

foreach ([
    '11111111111111111', 11111111111111111, // > PHP_INT_MAX - presents in PHP as float
    1, '10', '+1', '1.1', 1.1, .2, 2., '.2', '2.',
    '-2.', '-.2', null, [], true, false, 'string'
] as $value) {
    echo $value . ':' . gettype($value) . ' is Integer? - '  . (isInteger($value) ? 'yes' : 'no') . PHP_EOL;
    echo $value . ':' . gettype($value) . ' is Float? - '  . (isFloat($value) ? 'yes' : 'no') . PHP_EOL;
}
?>
davide dot renzi at gmail dot com 16-Dec-2015 12:32
I've found a faster way of determining an integer.
On my env, this method takes about half the time of using is_int().

Cast the value then check if it is identical to the original.

<?php
if ( (int) $n !== $n ) {
    echo 'not is int';
} else {
    echo 'is int';
}
?>
petepostma at gmail dot spam dot com 17-Jul-2012 06:38
There is a versa to the vice of this int only type check.

is_int( $integer_type) will only return true, if the TYPE is int, not the value
ctype_digit( $string_type) will only return true if the TYPE is string, and its value is INT

therefore:
 return ( is_int($value) || ctype_digit($value) );
nicolas dot giraud at actiane dot com 27-Jun-2012 09:24
Just a shorter way to check if your variable is an int or a string containing a int without others digit than 0 to 9 :

<?php
$bool = ( !is_int($value) ? (ctype_digit($value)) : true );

$value = 42; //true
$value = '42'; //true
$value = '1e9'; //false
$value = '0155'; //true
$value = 0155; //true
$value = 0xFF; //true while it's just the same as 255
$value = '0xFF'; //false
$value = 'a'; //false
$value = array(); //false
$value = array('5'); //false
$value = array(5); false
$value = ''; //false
$value = NULL; //false

?>

Short & cool :)
andre dot roesti at 7flex dot net 27-Jul-2010 05:51
With this function you can check if every of multiple variables are int. This is a little more comfortable than writing 'is_int' for every variable you've got.

<?php
function are_int ( ) {
    $args = func_get_args ();
    foreach ( $args as $arg )
        if ( ! is_int ( $arg ) )
            return false;
    return true;
}

// Example:
are_int ( 4, 9 ); // true
are_int ( 22, 08, 'foo' ); // false
?>
Robin 27-Mar-2010 08:22
Keep in mind that is_int() operates in signed fashion, not unsigned, and is limited to the word size of the environment php is running in.

In a 32-bit environment:

<?php
is_int( 2147483647 );           // true
is_int( 2147483648 );           // false
is_int( 9223372036854775807 );  // false
is_int( 9223372036854775808 );  // false
?>

In a 64-bit environment:

<?php
is_int( 2147483647 );           // true
is_int( 2147483648 );           // true
is_int( 9223372036854775807 );  // true
is_int( 9223372036854775808 );  // false
?>

If you find yourself deployed in a 32-bit environment where you are required to deal with numeric confirmation of integers (and integers only) potentially breaching the 32-bit span, you can combine is_int() with is_float() to guarantee a cover of the full, signed 64-bit span:

<?php
$small = 2147483647;         // will always be true for is_int(), but never for is_float()
$big = 9223372036854775807;  // will only be true for is_int() in a 64-bit environment

if( is_int($small) || is_float($small) );  // passes in a 32-bit environment
if( is_int($big) || is_float($big) );      // passes in a 32-bit environment
?>
me at rexxars dot com 16-Sep-2009 05:23
I was looking for the fastest way to check for an unsigned integer which supported large numbers like 4318943448871348 or 0xFFFFFFFF.

Fastest I came up with is this:
<?php
function is_unsigned_int($val) {
    return ctype_digit((string) $value));
}
?>

Will return true on 1515, 0xFFFFFFFF, '3515' and '1365158185855141'.
Will return false on 0.1515, '415.4134' and '-616'.

Be aware though, before PHP 5.1.0 this will return true on an empty string.

According to my benchmarks this is about 30% faster than the regex ^\d+$.
e dot sand at elisand dot com 09-Apr-2009 08:27
Simon Neaves was close on explaining why his function is perfect choice for testing for an int (as possibly most people would need).  He made some errors on his ctype_digit() output though - possibly a typo, or maybe a bug in his version of PHP at the time.

The correct output for parts of his examples should be:

<?php
var_dump(ctype_digit(23)); //bool(false)
var_dump(ctype_digit("23")); //bool(true)
var_dump(ctype_digit(23.5)); //bool(false)
var_dump(ctype_digit(NULL)); //bool(false)
var_dump(ctype_digit("")); //bool(false)
?>

As you can see, the reason why using *just* ctype_digit() may not always work is because it only returns TRUE when given a string as input - given a number value and it returns FALSE (which may be unexpected).
Simon Neaves 29-Apr-2008 11:14
I've found that both that is_int and ctype_digit don't behave quite as I'd expect, so I made a simple function called isInteger which does. I hope somebody finds it useful.

<?php
function isInteger($input){
    return(ctype_digit(strval($input)));
}

var_dump(is_int(23)); //bool(true)
var_dump(is_int("23")); //bool(false)
var_dump(is_int(23.5)); //bool(false)
var_dump(is_int(NULL)); //bool(false)
var_dump(is_int("")); //bool(false)

var_dump(ctype_digit(23)); //bool(true)
var_dump(ctype_digit("23")); //bool(false)
var_dump(ctype_digit(23.5)); //bool(false)
var_dump(ctype_digit(NULL)); //bool(false)
var_dump(ctype_digit("")); //bool(true)

var_dump(isInteger(23)); //bool(true)
var_dump(isInteger("23")); //bool(true)
var_dump(isInteger(23.5)); //bool(false)
var_dump(isInteger(NULL)); //bool(false)
var_dump(isInteger("")); //bool(false)
?>
gabe at websaviour dot com 14-Jul-2003 11:08
Although this can be inferred from the documentation, beware of numeric strings.  I ran into the problem in a MySQL app where I would either SELECT an INT PRIMARY KEY or INSERT a new record and use mysql_insert_id() to get the KEY before continuing onto the new section.

I used is_int() to make sure the subsequent queries wouldn't break when using the key variable.  Unfortunately I failed to realize that while mysql_insert_id() returns an int, mysql_result() always returns a string even if you are SELECTing from an INT field.

Spent at least 30 minutes trying to figure out why existing records weren't getting linked, but new records would link fine.  I ended up using intval() on mysql_result() to make sure subsequent queries still always work.


is_int のエイリアス

  • ≪ is_int
  • is_iterable ≫
  • PHP Manual
  • 変数操作 関数
  • is_int のエイリアス

is_integer

(PHP 4, PHP 5, PHP 7, PHP 8)

is_integer — is_int() のエイリアス

説明

この関数は次の関数のエイリアスです。 is_int().

User Contributed Notes

There are no user contributed notes for this page.


変数の内容が反復可能な値であることを確認する

  • ≪ is_integer
  • is_long ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の内容が反復可能な値であることを確認する

is_iterable

(PHP 7 >= 7.1.0, PHP 8)

is_iterable — 変数の内容が反復可能な値であることを確認する

説明

is_iterable(mixed $value): bool

変数の内容が iterable 疑似型で許容されること、すなわち array、あるいは Traversable のどちらかを実装したオブジェクトであることを確認する。

パラメータ

value

チェックする値

戻り値

value が反復可能であれば true を、そうでなければ false を返す。

例

例1 is_iterable() の例

<?php

var_dump(is_iterable([1, 2, 3])); // bool(true)
var_dump(is_iterable(new ArrayIterator([1, 2, 3]))); // bool(true)
var_dump(is_iterable((function () { yield 1; })())); // bool(true)
var_dump(is_iterable(1)); // bool(false)
var_dump(is_iterable(new stdClass())); // bool(false)

?>

参考

  • is_array() - 変数が配列かどうかを検査する

User Contributed Notes

mopsyd at me dot com 01-Apr-2018 04:24
A slight correction to brcontainer's polyfill, which prevents errors on a non-object in a non-blocking way, and also corrects the issue of  the conditional checking "file_exists" instead of the correct "function_exists":

if ( !function_exists(  'is_iterable' ) )
{

    function is_iterable( $obj )
    {
        return is_array( $obj ) || ( is_object( $obj ) && ( $obj instanceof \Traversable ) );
    }

}

The original answer would not have resolved correctly, because it was looking for a file instead of a function, and the provided method would error if given a non-iterable non-object value such as false.
brcontainer at yahoo dot com dot br 09-Mar-2018 08:35
Polyfill for PHP5.6 and PHP7.0

    if (!file_exists('is_iterable')) {
        function is_iterable($obj)
        {
            return is_array($obj) || $obj instanceof \Traversable;
        }
    }
anatoly dot pashin at gmail dot com 01-Feb-2018 07:02
Here is more details on iterable type: http://php.net/manual/en/language.types.iterable.php


is_int のエイリアス

  • ≪ is_iterable
  • is_null ≫
  • PHP Manual
  • 変数操作 関数
  • is_int のエイリアス

is_long

(PHP 4, PHP 5, PHP 7, PHP 8)

is_long — is_int() のエイリアス

説明

この関数は次の関数のエイリアスです。 is_int().

User Contributed Notes

There are no user contributed notes for this page.


変数が null かどうか調べる

  • ≪ is_long
  • is_numeric ≫
  • PHP Manual
  • 変数操作 関数
  • 変数が null かどうか調べる

is_null

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

is_null — 変数が null かどうか調べる

説明

is_null(mixed $value): bool

指定した変数が null かどうかを調べます。

パラメータ

value

評価する変数。

戻り値

value が null の場合に true、 それ以外の場合に false を返します。

例

例1 is_null() の例

<?php

error_reporting(E_ALL);

$foo = NULL;
var_dump(is_null($inexistent), is_null($foo));

?>
Notice: Undefined variable: inexistent in ...
bool(true)
bool(true)

参考

  • null 型
  • isset() - 変数が宣言されていること、そして null とは異なることを検査する
  • is_bool() - 変数が boolean であるかを調べる
  • is_numeric() - 変数が数字または数値形式の文字列であるかを調べる
  • is_float() - 変数の型が float かどうか調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_object() - 変数がオブジェクトかどうかを検査する
  • is_array() - 変数が配列かどうかを検査する

User Contributed Notes

ahamilton9 19-Apr-2022 08:28
A quick test in 2022 on PHP 8.1 confirms there is still no need to micro-optimize NULL checks:

<?php

// Comparison Operator
$before = microtime(true);
$var = null;
for ($i=0 ; $i<1000000000 ; $i++) {
    if($var === null) {}
}
$after = microtime(true);
echo '    ===: ' . ($after - $before) . " seconds\n";

// Function
$before = microtime(true);
$var = null;
for ($i=0 ; $i<1000000000 ; $i++) {
    if(is_null($var)) {}
}
$after = microtime(true);
echo 'is_null: ' . ($after - $before) . " seconds\n";

//     ===: 4.1487579345703 seconds
// is_null: 4.1316878795624 seconds
etimjoshua4 at gmail dot com 20-Jan-2021 05:09
I've found that for HTTP requests such as POST, is_null isn't the most reliable choice for checking if empty.

Try using

if(trim($var) == ""){
    // do something
}

instead.

I think the request does something to the input that makes it definitely not NULL.
contact dot 01834e2c at renegade334 dot me dot uk 25-May-2015 06:57
In PHP 7 (phpng), is_null is actually marginally faster than ===, although the performance difference between the two is far smaller.

PHP 5.5.9
is_null - float(2.2381200790405)
===     - float(1.0024659633636)
=== faster by ~100ns per call

PHP 7.0.0-dev (built: May 19 2015 10:16:06)
is_null - float(1.4121870994568)
===     - float(1.4577329158783)
is_null faster by ~5ns per call
normadize (a) gmail (d) com 07-Jul-2012 10:08
Using === NULL instead of is_null(), is actually useful in loaded server scenarios where you have hundreds or thousands of requests per second. Saving microseconds on a lot of "simple" operations in the entire PHP execution chain usually results in being able to serve more pages per second at the same speed, or lowering your cpu usage. People usually write very bad and slow code.
george at fauxpanels dot com 01-Dec-2008 01:58
See how php parses different values. $var is the variable.

$var        =    NULL    ""    0    "0"    1

strlen($var)    =    0    0    1    1    1
is_null($var)    =    TRUE    FALSE    FALSE    FALSE    FALSE
$var == ""    =    TRUE    TRUE    TRUE    FALSE    FALSE
!$var        =    TRUE    TRUE    TRUE    TRUE    FALSE
!is_null($var)    =    FALSE    TRUE    TRUE    TRUE    TRUE
$var != ""    =    FALSE    FALSE    FALSE    TRUE    TRUE
$var        =    FALSE    FALSE    FALSE    FALSE    TRUE

Peace!
Malfist 01-Jul-2008 07:54
Micro optimization isn't worth it.

You had to do it ten million times to notice a difference, a little more than 2 seconds

$a===NULL; Took: 1.2424390316s
 is_null($a); Took: 3.70693397522s

difference = 2.46449494362
difference/10,000,000 = 0.000000246449494362

The execution time difference between ===NULL and is_null is less than 250 nanoseconds. Go optimize something that matters.
strrev xc.noxeh@ellij 03-Jun-2008 05:42
$var===NULL is much faster than is_null($var) (with the same result)

I did some benchmarking with 10 million iterations:

$a=null;
 isset($a); Took: 1.71841216087s
 $a==NULL; Took: 1.27205181122s
 $a===NULL; Took: 1.2424390316s
 is_null($a); Took: 3.70693397522s
$a=5;
 isset($a); Took: 1.15165400505s
 $a==NULL; Took: 1.41901302338s
 $a===NULL; Took: 1.21655392647s
 is_null($a); Took: 3.78501200676s
error_reporting(E_ALL&~E_NOTICE);
unset($a);
 isset($a); Took: 1.51441502571s
 $a==NULL; Took: 16.5414860249s
 $a===NULL; Took: 16.1273870468s
 is_null($a); Took: 23.1918480396s

Please note, that isset is only included because it gives a good performance in any case; HOWEVER isset is NOT the same, or the opposite.
But you might be able to use isset() instead of null-checking.

You should not use is_null, except when you need a callback-function, or for conformity with is_int, is_float, etc.
ai dot unstmann at combase dot de 14-Jan-2008 12:17
For what I realized is that  is_null($var)  returns exactly the opposite of  isset($var) , except that is_null($var) throws a notice if $var hasn't been set yet.

the following will prove that:

<?php

$quirks = array(null, true, false, 0, 1, '', "\0", "unset");

foreach($quirks as $var) {
    if ($var === "unset") unset($var);

    echo is_null($var) ? 1 : 0;
    echo isset($var) ? 1 : 0;
    echo "\n";
}

?>

this will print out something like:

10    // null
01    // true
01    // false
01    // 0
01    // 1
01    // ''
01    // "\0"
Notice:  Undefined variable: var in /srv/www/htdocs/sandbox/null/nulltest.php on line 8
10    // (unset)

For the major quirky types/values is_null($var) obviously always returns the opposite of isset($var), and the notice clearly points out the faulty line with the is_null() statement. You might want to examine the return value of those functions in detail, but since both are specified to return boolean types there should be no doubt.

A second look into the PHP specs tells that is_null() checks whether a value is null or not. So, you may pass any VALUE to it, eg. the result of a function.
isset() on the other hand is supposed to check for a VARIABLE's existence, which makes it a language construct rather than a function. Its sole porpuse lies in that checking. Passing anything else will result in an error.

Knowing that, allows us to draw the following unlikely conclusion:

isset() as a language construct is way faster, more reliable and powerful than is_null() and should be prefered over is_null(), except for when you're directly passing a function's result, which is considered bad programming practice anyways.
michael at cannonbose dot com 30-Dec-2003 09:42
Regarding avoidance of NULLs in your MySQL queries, why not use  IS NULL and IS NOT NULL in your WHERE clauses.

SELECT *
FROM someDatabase
WHERE someAttribute IS NOT NULL

Cheers,

Michael


変数が数字または数値形式の文字列であるかを調べる

  • ≪ is_null
  • is_object ≫
  • PHP Manual
  • 変数操作 関数
  • 変数が数字または数値形式の文字列であるかを調べる

is_numeric

(PHP 4, PHP 5, PHP 7, PHP 8)

is_numeric — 変数が数字または数値形式の文字列であるかを調べる

説明

is_numeric(mixed $value): bool

指定した変数が数値または 数値形式の文字列であるかどうかを調べます。

パラメータ

value

評価する変数。

戻り値

value が数値または 数値形式の文字列 である場合に true、それ以外の場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 空白文字で終わる数値形式の文字列 ("42 ") に対して、この関数は true を返すようになりました。 これより前のバージョンでは、false を返していました。

例

例1 is_numeric() の例

<?php
$tests = array(
"42",
1337,
0x539,
02471,
0b10100111001,
1337e0,
"0x539",
"02471",
"0b10100111001",
"1337e0",
"not numeric",
array(),
9.1,
null,
'',
);

foreach ($tests as $element) {
if (is_numeric($element)) {
echo var_export($element, true) . " is numeric", PHP_EOL;
} else {
echo var_export($element, true) . " is NOT numeric", PHP_EOL;
}
}
?>

上の例の出力は以下となります。

'42' is numeric
1337 is numeric
1337 is numeric
1337 is numeric
1337 is numeric
1337.0 is numeric
'0x539' is NOT numeric
'02471' is numeric
'0b10100111001' is NOT numeric
'1337e0' is numeric
'not numeric' is NOT numeric
array (
) is NOT numeric
9.1 is numeric
NULL is NOT numeric
'' is NOT numeric

例2 空白文字と is_numeric() 関数

<?php
$tests = [
" 42",
"42 ",
"\u{A0}9001", // non-breaking space
"9001\u{A0}", // non-breaking space
];

foreach ($tests as $element) {
if (is_numeric($element)) {
echo var_export($element, true) . " is numeric", PHP_EOL;
} else {
echo var_export($element, true) . " is NOT numeric", PHP_EOL;
}
}
?>

上の例の PHP 8 での出力は、このようになります。:

' 42' is numeric
'42 ' is numeric
' 9001' is NOT numeric
'9001 ' is NOT numeric

上の例の PHP 7 での出力は、このようになります。

' 42' is numeric
'42 ' is NOT numeric
' 9001' is NOT numeric
'9001 ' is NOT numeric

参考

  • 数値形式の文字列
  • ctype_digit() - 数字かどうかを調べる
  • is_bool() - 変数が boolean であるかを調べる
  • is_null() - 変数が null かどうか調べる
  • is_float() - 変数の型が float かどうか調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_object() - 変数がオブジェクトかどうかを検査する
  • is_array() - 変数が配列かどうかを検査する
  • filter_var() - 指定したフィルタでデータをフィルタリングする

User Contributed Notes

Katrina Kizenbach 07-Dec-2022 08:44
Note that is_numeric() will evaluate to false for number strings using decimal commas.

is_numeric('0.11');
Output: true

is_numeric('0,11');
Output: false
anantkumarsingh03101988 at gmail dot com 22-Aug-2022 05:16
Example #2

Output:

'9001 ' is NOT numeric

is incorrect for PHP8, it's numeric.

So please correct this.
tanguy_barsik at hotmail dot com 03-Feb-2017 03:22
for strings, it return true only if float number has a dot

is_numeric( '42.1' )//true
is_numeric( '42,1' )//false
ben at chico dot com 07-Jan-2014 11:20
Apparently NAN (Not A Number) is a number for the sake of is_numeric().

<?php
echo "is ";
if (!is_numeric(NAN))
 echo "not ";
 echo "a number";
?>

Outputs "is a number". So something that is NOT a number (by defintion) is a number...
sobolanx at gmail dot com 22-Jan-2011 03:55
Note that the function accepts extremely big numbers and correctly evaluates them.

For example:

<?php
    $v = is_numeric ('58635272821786587286382824657568871098287278276543219876543') ? true : false;

    var_dump ($v);
?>

The above script will output:

bool(true)

So this function is not intimidated by super-big numbers. I hope this helps someone.

PS: Also note that if you write is_numeric (45thg), this will generate a parse error (since the parameter is not enclosed between apostrophes or double quotes). Keep this in mind when you use this function.
Magnus Deininger, dma05 at web dot de 07-Jan-2009 06:01
regarding the global vs. american numeral notations, it should be noted that at least in japanese, numbers aren't grouped with an extra symbol every three digits, but rather every four digits (for example 1,0000 instead of 10.000). also nadim's regexen are slightly suboptimal at one point having an unescaped '.' operator, and the whole thing could easily be combined into a single regex (speed and all).

adjustments:

<?php
$eng_or_world = preg_match
  ('/^[+-]?'. // start marker and sign prefix
  '(((([0-9]+)|([0-9]{1,4}(,[0-9]{3,4})+)))?(\\.[0-9])?([0-9]*)|'. // american
  '((([0-9]+)|([0-9]{1,4}(\\.[0-9]{3,4})+)))?(,[0-9])?([0-9]*))'. // world
  '(e[0-9]+)?'. // exponent
  '$/', // end marker
  $str) == 1;
?>

i'm sure this still isn't optimal, but it should also cover japanese-style numerals and it fixed a couple of other issues with the other regexen. it also allows for an exponent suffix, the pre-decimal digits are optional and it enforces using either grouped or ungrouped integer parts. should be easier to trim to your liking too.
moskalyuk at gmail dot com 21-Aug-2006 10:18
is_numeric fails on the hex values greater than LONG_MAX, so having a large hex value parsed through is_numeric would result in FALSE being returned even though the value is a valid hex number
kouber at saparev dot com 24-Nov-2003 03:05
Note that this function is not appropriate to check if "is_numeric" for very long strings. In fact, everything passed to this function is converted to long and then to a double. Anything greater than approximately 1.8e308 is too large for a double, so it becomes infinity, i.e. FALSE. What that means is that, for each string with more than 308 characters, is_numeric() will return FALSE, even if all chars are digits.

However, this behaviour is platform-specific.

http://www.php.net/manual/en/language.types.float.php

In such a case, it is suitable to use regular expressions:

function is_numeric_big($s=0) {
  return preg_match('/^-?\d+$/', $s);
}


変数がオブジェクトかどうかを検査する

  • ≪ is_numeric
  • is_real ≫
  • PHP Manual
  • 変数操作 関数
  • 変数がオブジェクトかどうかを検査する

is_object

(PHP 4, PHP 5, PHP 7, PHP 8)

is_object — 変数がオブジェクトかどうかを検査する

説明

is_object(mixed $value): bool

与えられた変数がオブジェクトかどうかを調べます。

パラメータ

value

評価する変数。

戻り値

もし value が object型 の場合 true、 そうでない場合は false を返します。

変更履歴

バージョン | 説明
7.2.0 | クラス定義が存在せず (__PHP_Incomplete_Class クラス)、 かつシリアライズされていないオブジェクトに対して、 is_object() 関数は true を返すようになりました。 これより前のバージョンでは、false を返していました。

例

例1 is_object() の例

<?php
// オブジェクトから配列を返す
// シンプルな関数を宣言します
function get_students($obj)
{
if (!is_object($obj)) {
return false;
}

return $obj->students;
}

// 新しいクラスのインスタンスを宣言し、
// 値を設定します
$obj = new stdClass();
$obj->students = array('Kalle', 'Ross', 'Felipe');

var_dump(get_students(null));
var_dump(get_students($obj));
?>

参考

  • is_bool() - 変数が boolean であるかを調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_float() - 変数の型が float かどうか調べる
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_array() - 変数が配列かどうかを検査する

User Contributed Notes

mark at not4you dot com 21-Sep-2011 12:23
Unserializes data as returned by the standard PHP serialize() function. If the unserialized object is not an array, it will be converted to one, particularily useful if it returns a __PHP_Incomplete_Class.

<?php
/**
 *
 * @param string $data Serialized data
 *
 * @return array    Unserialized array
 */
function unserialize2array($data) {
    $obj = unserialize($data);
    if(is_array($obj)) return $obj;
    $arr = array();
    foreach($obj as $k=>$v) {
        $arr[$k] = $v;
    }
    unset($arr['__PHP_Incomplete_Class_Name']);
    return $arr;
}
?>
peter dot nagel at portavita dot nl 22-Mar-2011 01:46
Note: is_object(null) returns false

This should actually be part of the input/output specification at the top of this page.


is_float のエイリアス

  • ≪ is_object
  • is_resource ≫
  • PHP Manual
  • 変数操作 関数
  • is_float のエイリアス

is_real

(PHP 4, PHP 5, PHP 7, PHP 8)

is_real — is_float() のエイリアス

説明

この関数は次の関数のエイリアスです。 is_float().

警告

このエイリアスは PHP 7.4.0 で 非推奨 となり、PHP 8.0.0 で 削除 されました。

User Contributed Notes

There are no user contributed notes for this page.


変数がリソースかどうかを調べる

  • ≪ is_real
  • is_scalar ≫
  • PHP Manual
  • 変数操作 関数
  • 変数がリソースかどうかを調べる

is_resource

(PHP 4, PHP 5, PHP 7, PHP 8)

is_resource — 変数がリソースかどうかを調べる

説明

is_resource(mixed $value): bool

指定した変数が resource かどうかを調べます。

パラメータ

value

評価する変数。

戻り値

value が resource の場合に true、 それ以外の場合に false を返します。

例

例1 is_resource() の例

<?php

$handle = fopen("php://stdout", "w");
if (is_resource($handle)) {
echo '$handle is a resource';
}

?>

上の例の出力は以下となります。

$handle is a resource

注意

注意:

is_resource() は、厳格な型チェックを行うわけではありません。 value がすでに閉じられたリソース変数である場合は、false を返します。

参考

  • リソース型のドキュメント
  • get_resource_type() - リソース型を返す

User Contributed Notes

Anonymous 29-Sep-2017 11:16
Note that is_resource() is unreliable. It considers closed resources as false:

<?php

$a = fopen('http://www.google.com', 'r');
var_dump(is_resource($a)); var_dump(is_scalar($a));
//bool(true)
//bool(false)

fclose($a);
var_dump(is_resource($a)); var_dump(is_scalar($a));
//bool(false)
//bool(false)

?>

That's the reason why some other people here have been confused and devised some complex (bad) "solutions" to detect resources...

There's a much better solution... In fact, I just showed it above, but here it is again with a more complete example:

<?php

$a = fopen('http://www.google.com', 'r');
var_dump(is_resource($a)); var_dump(is_scalar($a)); var_dump(is_object($a)); var_dump(is_array($a)); var_dump(is_null($a));
//bool(true)
//bool(false)
//bool(false)
//bool(false)
//bool(false)

?>

So how do you check if something is a resource?

Like this!

<?php

$a = fopen('http://www.google.com', 'r');
$isResource = is_resource($a) || ($a !== null && !is_scalar($a) && !is_array($a) && !is_object($a));
var_dump($isResource);
//bool(true)

fclose($a);

var_dump(is_resource($a));
//bool(false)

$isResource = is_resource($a) || ($a !== null && !is_scalar($a) && !is_array($a) && !is_object($a));
var_dump($isResource);
//bool(true)

?>

How it works:

- An active resource is a resource, so check that first for efficiency.
- Then branch to check what the variable is NOT:
- A resource is never NULL. (We do that check via `!== null` for efficiency).
- A resource is never Scalar (int, float, string, bool).
- A resource is never an array.
- A resource is never an object.
- Only one variable type remains if all of the above checks succeeded: IF it's NOT any of the above, then it's a closed resource!

Just surfed by and saw the bad and hacky methods other people had left, and wanted to help out with this proper technique. Good luck, everyone!

PS: The core problem is that is_resource() does a "loose" check for "living resource". I wish that it had a $strict parameter for "any resource" instead of these user-workarounds being necessary.
CertaiN 17-Jan-2014 05:05
Try this to know behavior:

<?php
function resource_test($resource, $name) {
    echo
        '[' . $name. ']',
        PHP_EOL,
        '(bool)$resource => ',
        $resource ? 'TRUE' : 'FALSE',
        PHP_EOL,
        'get_resource_type($resource) => ',
        get_resource_type($resource) ?: 'FALSE',
        PHP_EOL,
        'is_resource($resource) => ',
        is_resource($resource) ? 'TRUE' : 'FALSE',
        PHP_EOL,
        PHP_EOL
    ;
}

$resource = tmpfile();
resource_test($resource, 'Check Valid Resource');

fclose($resource);
resource_test($resource, 'Check Released Resource');

$resource = null;
resource_test($resource, 'Check NULL');
?>

It will be shown as...

[Check Valid Resource]
(bool)$resource => TRUE
get_resource_type($resource) => stream
is_resource($resource) => TRUE

[Check Released Resource]
(bool)$resource => TRUE
get_resource_type($resource) => Unknown
is_resource($resource) => FALSE

[Check NULL]
(bool)$resource => FALSE
get_resource_type($resource) => FALSE
Warning:  get_resource_type() expects parameter 1 to be resource, null given in ... on line 10
is_resource($resource) => FALSE
btleffler [AT] gmail [DOT] com 12-May-2011 01:55
I was recently trying to loop through some objects and convert them to arrays so that I could encode them to json strings.

I was running into issues when an element of one of my objects was a SoapClient. As it turns out, json_encode() doesn't like any resources to be passed to it. My simple fix was to use is_resource() to determine whether or not the variable I was looking at was a resource.

I quickly realized that is_resource() returns false for two out of the 3 resources that are typically in a SoapClient object. If the resource type is 'Unknown' according to var_dump() and get_resource_type(), is_resource() doesn't think that the variable is a resource!

My work around for this was to use get_resource_type() instead of is_resource(), but that function throws an error if the variable you're checking isn't a resource.

So how are you supposed to know when a variable is a resource if is_resource() is unreliable, and get_resource_type() gives errors if you don't pass it a resource?

I ended up doing something like this:

<?php

function isResource ($possibleResource) { return !is_null(@get_resource_type($possibleResource)); }

?>

The @ operator suppresses the errors thrown by get_resource_type() so it returns null if $possibleResource isn't a resource.

I spent way too long trying to figure this stuff out, so I hope this comment helps someone out if they run into the same problem I did.


変数がスカラかどうかを調べる

  • ≪ is_resource
  • is_string ≫
  • PHP Manual
  • 変数操作 関数
  • 変数がスカラかどうかを調べる

is_scalar

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

is_scalar — 変数がスカラかどうかを調べる

説明

is_scalar(mixed $value): bool

指定した変数がスカラかどうかを調べます。

スカラ変数には int、float、string あるいは bool が含まれます。 array、object、 resource、null はスカラではありません。

注意:

リソース型は現在整数に基づく抽象型であるため、 is_scalar() は resource 型の値を スカラ値と判定しません。この実装の詳細は変更される可能性があるため、 前堤にするべきではありません。

注意:

is_scalar() は、NULL をスカラとは見なしません。

パラメータ

value

評価する変数。

戻り値

value がスカラの場合に true、 それ以外の場合に false を返します。

例

例1 is_scalar() の例

<?php
function show_var($var)
{
if (is_scalar($var)) {
echo $var;
} else {
var_dump($var);
}
}
$pi = 3.1416;
$proteins = array("hemoglobin", "cytochrome c oxidase", "ferredoxin");

show_var($pi);
show_var($proteins)

?>

上の例の出力は以下となります。

3.1416
array(3) {
  [0]=>
  string(10) "hemoglobin"
  [1]=>
  string(20) "cytochrome c oxidase"
  [2]=>
  string(10) "ferredoxin"
}

参考

  • is_float() - 変数の型が float かどうか調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_numeric() - 変数が数字または数値形式の文字列であるかを調べる
  • is_real() - is_float のエイリアス
  • is_string() - 変数の型が文字列かどうかを調べる
  • is_bool() - 変数が boolean であるかを調べる
  • is_object() - 変数がオブジェクトかどうかを検査する
  • is_array() - 変数が配列かどうかを検査する

User Contributed Notes

31-Jul-2006 08:59
Another warning in response to the previous note:
> just a warning as it appears that an empty value is not a scalar.

That statement is wrong--or, at least, has been fixed with a later revision than the one tested.  The following code generated the following output on PHP 4.3.9.

CODE:
<?php
    echo('is_scalar() test:'.EOL);
    echo("NULL: "      . print_R(is_scalar(NULL),     true) . EOL);
    echo("false: "    . print_R(is_scalar(false),   true) . EOL);
    echo("(empty): "  . print_R(is_scalar(''),      true) . EOL);
    echo("0: "         . print_R(is_scalar(0),       true) . EOL);
    echo("'0': "      . print_R(is_scalar('0'),     true) . EOL);
?>

OUTPUT:
is_scalar() test:
NULL:
false: 1
(empty): 1
0: 1
'0': 1

THUS:
   * NULL is NOT a scalar
   * false, (empty string), 0, and "0" ARE scalars
efelch at gmail dot com 17-Aug-2005 02:31
A scalar is a single item or value, compared to things like arrays and objects which have multiple values. This tends to be the standard definition of the word in terms of programming. An integer, character, etc are scalars. Strings are probably considered scalars since they only hold "one" value (the value represented by the characters represented) and nothing else.
Dr K 14-Aug-2005 03:48
Having hunted around the manual, I've not found a clear statement of what makes a type "scalar" (e.g. if some future version of the language introduces a new kind of type, what criterion will decide if it's "scalar"? - that goes beyond just listing what's scalar in the current version.)

In other lanuages, it means "has ordering operators" - i.e. "less than" and friends.

It (-:currently:-) appears to have the same meaning in PHP.
popanowel HAT hotmailZ DOT cum 14-May-2004 12:31
Hi ... for newbees here, I just want to mention that reference and scalar variable aren't the same. A reference is a pointer to a scalar, just like in C or C++.

<? php  // simple reference to scalar

  $a = 2;
  $ref = & $a;

  echo "$a <br> $ref";

?>
this should print out: "2 <br> 2".

Scalar class also exists. Look below:
<? php

  class Object_t {

     var $a;

     function Object_t ()  // constructor
     {
        $this->a = 1;
     }

  }

  $a = new Object_t; // we define a scalar object

  $ref_a = &a;

  echo "$a->a <br> $ref->a";

?>
again, this should echo: "1 <br> 1";

Here is another method isued in OOP to acheive on working only over reference to scalar object. Using this, you won't ever have to  ask yourself if you work on a copy of the scalar or its reference. You will only possess reference to the scalar object. If you want to duplicate the scalar object, you will have to create a function for that purpose that would read by the reference the values and assign them to another scalar of the same type... or an other type, it is as you wish at that moment.
<?php

  class objet_t {
     var $a;

     function object_t
     {
        $this->a = "patate_poil";
     }
  }

   function &get_ref($object_type)
   {
      // here we create a scalar object in memory
      // and we return it by reference to the calling
      // control scope.
      return &new $object_type;
   }

   $ref_object_t = get_ref(object_t);

   echo "$ref_object_t->a <br>";

?>
this should echo: "patate_poit <br>".

The only thing that I try to demonstrate is that scalar variable ARE object in memory while a reference is usualy a variable (scalar object) that contain the address of another scalar object, which contain the informations you want by using the reference.

Good Luck!

otek is popanowel HAT hotmailZ DOT cum


変数の型が文字列かどうかを調べる

  • ≪ is_scalar
  • isset ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の型が文字列かどうかを調べる

is_string

(PHP 4, PHP 5, PHP 7, PHP 8)

is_string — 変数の型が文字列かどうかを調べる

説明

is_string(mixed $value): bool

指定した変数の型が文字列かどうかを調べます。

パラメータ

value

評価する変数。

戻り値

value の型が string である場合に true、それ以外の場合に false を返します。

例

例1 is_string() の例

<?php
$values = array(false, true, null, 'abc', '23', 23, '23.5', 23.5, '', ' ', '0', 0);
foreach ($values as $value) {
echo "is_string(";
var_export($value);
echo ") = ";
echo var_dump(is_string($value));
}
?>

上の例の出力は以下となります。

is_string(false) = bool(false)
is_string(true) = bool(false)
is_string(NULL) = bool(false)
is_string('abc') = bool(true)
is_string('23') = bool(true)
is_string(23) = bool(false)
is_string('23.5') = bool(true)
is_string(23.5) = bool(false)
is_string('') = bool(true)
is_string(' ') = bool(true)
is_string('0') = bool(true)
is_string(0) = bool(false)

参考

  • is_float() - 変数の型が float かどうか調べる
  • is_int() - 変数が整数型かどうかを検査する
  • is_bool() - 変数が boolean であるかを調べる
  • is_object() - 変数がオブジェクトかどうかを検査する
  • is_array() - 変数が配列かどうかを検査する

User Contributed Notes

Peter Barney 13-Sep-2017 10:47
As noted earlier, is_string() returns false on an object that has a __toString() method. Here is a simple way to do a check that will work:

<?php
// determine if the passed argument can be treated like a string.
function is_stringy($text) {
    return (is_string($text) || (is_object($text) && method_exists($text, '__toString' ));
}
laszlo dot heredy shift-two gmail etc 27-Feb-2014 09:22
Using is_string() on an object will always return false (even with __toString()).

<?php
class B {
  public function __toString() {
    return "Instances of B() can be treated as a strings!\n";
  }
}

$b = new B();
print($b); //Instances of B() can be treated as a strings!
print(is_string($b) ? 'true' : 'false'); //false
?>


変数が宣言されていること、そして null とは異なることを検査する

  • ≪ is_string
  • print_r ≫
  • PHP Manual
  • 変数操作 関数
  • 変数が宣言されていること、そして null とは異なることを検査する

isset

(PHP 4, PHP 5, PHP 7, PHP 8)

isset — 変数が宣言されていること、そして null とは異なることを検査する

説明

isset(mixed $var, mixed ...$vars): bool

変数がセットされているかを調べます。 これは変数が宣言されており、 null とは異なる値だということです。

変数が、unset() により割当を解除された場合、 もはやセットされているとは見做されません。

null が代入されている変数をチェックしたときは、 isset() は false を返します。 null文字 ("\0") は PHP の null 定数とは異なることにも注意してください。

複数のパラメータが渡された場合は、 isset() は全てのパラメータがセットされている場合にだけ true を返します。 評価は左から右へと行われ、セットされていない値に出会うとすぐに評価が止まります。

パラメータ

var

調べたい変数。

vars

別の変数。

戻り値

var が存在して null 以外の値をとれば true、 そうでなければ false を返します。

例

例1 isset() の例

<?php

$var = '';

// これは TRUE と評価されるので、テキストが出力される
if (isset($var)) {
echo "This var is set so I will print.";
}

// 次の例では、isset() の戻り値を出力するため var_dump を
// 使用している

$a = "test";
$b = "anothertest";

var_dump(isset($a)); // TRUE
var_dump(isset($a, $b)); // TRUE

unset ($a);

var_dump(isset($a)); // FALSE
var_dump(isset($a, $b)); // FALSE

$foo = NULL;
var_dump(isset($foo)); // FALSE

?>

この関数は配列の要素に対しても動作します:

<?php

$a = array ('test' => 1, 'hello' => NULL, 'pie' => array('a' => 'apple'));

var_dump(isset($a['test'])); // TRUE
var_dump(isset($a['foo'])); // FALSE
var_dump(isset($a['hello'])); // FALSE

// キー 'hello' は NULL と等しいのでセットされていないと見なされる。
// もし NULL なキー値に対してチェックを行いたい場合、次を試してみること:
var_dump(array_key_exists('hello', $a)); // TRUE

// 配列の深い要素の値のチェック
var_dump(isset($a['pie']['a'])); // TRUE
var_dump(isset($a['pie']['b'])); // FALSE
var_dump(isset($a['cake']['a']['b'])); // FALSE

?>

例2 文字列のオフセットに対する isset()

<?php
$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));
?>

上の例の出力は以下となります。

bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)

注意

警告

isset() は何らかの値が渡された 変数の場合のみ動作します。そうでない場合、パースエラーとなります。 もし 定数 が設定されているかどうかをチェックする場合は、 defined() を使用してください。

注意: これは、関数ではなく 言語構造のため、可変関数 や 名前付き引数 を用いてコールすることはできません。

注意:

オブジェクトのアクセス不能なプロパティに対して isset() を使用した場合は、もしオーバーロードメソッド __isset() が宣言されていればそれをコールします。

参考

  • empty() - 変数が空であるかどうかを検査する
  • __isset()
  • unset() - 指定した変数の割当を解除する
  • defined() - 指定した名前の定数が存在するかどうかを調べる
  • PHP 型の比較表
  • array_key_exists() - 指定したキーまたは添字が配列にあるかどうかを調べる
  • is_null() - 変数が null かどうか調べる
  • エラー制御演算子 @

User Contributed Notes

eckoson at gmail dot com 01-Aug-2023 02:41
If you are annoyed by the behavior of isset() concerning null values, here is a handy function for you. its similar to array_key_exists but, its a lot more flexible and can check for multiple array keys across multiple arrays.
Not recursive!
Tested on php 8.1.6, linux
<?php
/**
* is_set
* @author DJ Eckoson
* @link @eckosongh Facebook Page
* checks whether variable names are set within the global space or they exists as an key and return if they are set (even if their values are null)
* @param string $var_name
*   name of the first variable to check
* @param array|null|string
*   optional array to check for key (if null, checks from $GLOBALS) OR
*   other variable names to check OR
*   other variable names and their associated arrays to their right (use null for global variables, optional if its the last parameter)
* check examples below
*/
function is_set(string $var_name, array|null|string ... $args): bool {
  $vars[$var_name] = null;
  if (array_key_exists(0, $args)) {
    if (is_array($args[0])) {
      $vars[$var_name] = $args[0];
    } elseif (is_string($args[0])) {
      goto main;
    }
    unset($args[0]);
  }
  main:
  if ($args) {
    $args = array_reverse($args);
    $cur_array = null;
    array_walk($args, function ($value) use (&$cur_array, &$vars): void {
      if (!is_string($value)) {
        $cur_array = $value;
      } else {
        $vars[$value] = $cur_array;
      }
    });
  }
  foreach ($vars as $name => $array) {
    if (!array_key_exists($name, $array??$GLOBALS)) return false;
  }
  return true;
}

// Examples
$arr1 = range(0, 5);
$arr2 = [
  'a' => 1,
  'b' => 2,
  'c' => 'hELLO wORLD!'
];
$gender = 'male';
$age = 12;
var_dump(is_set('age')); // true
var_dump(is_set('age', null)); // true
var_dump(is_set('age', $arr1)); // false
var_dump(is_set('age', array())); // false
var_dump(is_set('age', array('age' => 48))); // true
var_dump(is_set('age', 'arr1', null, 'b', $arr2, 0, 3, 4, $arr1, 'gender')); // true
var_dump(is_set('age', 'arr1', null, 'b', $arr2, 0, 3, 4, $arr1, 'gender', null)); // true

$c=$d=$e=$a=2;
$arr = [1,4];
var_dump(is_set('a', 'c', null, 0, 1, $arr)); // true
var_dump(is_set('a', 'c', null, 0, 4, $arr)); // false
?>
 Note:
 it won't work for variables declared locally inside a function;
 however you can use it for checking if array keys exists inside a function
Hayley Watson 30-Jul-2017 01:12
If you regard isset() as indicating whether the given variable has a value or not, and recall that NULL is intended to indicate that a value is _absent_ (as said, somewhat awkwardly, on its manual page), then its behaviour is not at all inconsistent or confusing.

It's not just to check for uninitialised variables - a lot of the time those are just due to sloppy coding. There are other ways a variable could fail to have a value (e.g., it's meant to hold the value returned from a function call but the function didn't have a value to return) where uninitialising the variable would not be an option nor even make sense (e.g., depending on what was to be done with the returned value).
kurdtpage at gmail dot com 21-Dec-2016 01:03
The new (as of PHP7) 'null coalesce operator' allows shorthand isset. You can use it like so:

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

Quoted from http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
p_ignorethis_lbowers at gmail dot com 06-Oct-2016 07:26
I, too, was dismayed to find that isset($foo) returns false if ($foo == null). Here's an (awkward) way around it.

unset($foo);
if (compact('foo') != array()) {
  do_your_thing();
}

Of course, that is very non-intuitive, long, hard-to-understand, and kludgy. Better to design your code so you don't depend on the difference between an unset variable and a variable with the value null. But "better" only because PHP has made this weird development choice.

In my thinking this was a mistake in the development of PHP. The name ("isset") should describe the function and not have the desciption be "is set AND is not null". If it was done properly a programmer could very easily do (isset($var) || is_null($var)) if they wanted to check for this!

A variable set to null is a different state than a variable not set - there should be some easy way to differentiate. Just my (pointless) $0.02.
ayyappan dot ashok at gmail dot com 24-Mar-2016 07:23
Return Values :
Returns TRUE if var exists and has value other than NULL, FALSE otherwise.

<?php
$a=NULL;
$b=FALSE; //The out put was TRUE.
$c=TRUE;
$d='';
$e="";
if(isset($b)):
echo "TRUE";
else:
echo "FALSE";
endif;
?>
Could any one explain me in clarity.
andreasonny83 at gmail dot com 12-May-2015 11:26
Here is an example with multiple parameters supplied

<?php
$var = array();
$var['val1'] = 'test';
$var['val2'] = 'on';

if ( isset( $var['val1'], $var['val2'] ) && $var['val2'] === 'on' ) {
    unset( $var['val1'] );
}
print_r( $var );
?>

This will output:
Array
(
    [val2] => on
)

The following code does the same calling "isset" 2 times:

<?php
$var = array();
$var['val1'] = 'test';
$var['val2'] = 'on';

if ( isset( $var['val1'] ) && isset( $var['val2'] ) && $var['val2'] === 'on' ) {
    unset( $var['val1'] );
}
print_r( $var );
?>
Cuong Huy To 23-Mar-2011 05:08
1) Note that isset($var) doesn't distinguish the two cases when $var is undefined, or is null. Evidence is in the following code.

<?php
unset($undefined);
$null = null;
if (true === isset($undefined)){echo 'isset($undefined) === true'} else {echo 'isset($undefined) === false'); // 'isset($undefined) === false'
if (true === isset($null)){echo 'isset($null) === true'} else {echo 'isset($null) === false');              // 'isset($null)      === false'
?>

2) If you want to distinguish undefined variable with a defined variable with a null value, then use array_key_exist

<?php
unset($undefined);
$null = null;

if (true !== array_key_exists('undefined', get_defined_vars())) {echo '$undefined does not exist';} else {echo '$undefined exists';} // '$undefined does not exist'
if (true === array_key_exists('null', get_defined_vars())) {echo '$null exists';} else {echo '$null does not exist';}                // '$null exists'
?>
francois vespa 22-Dec-2010 07:21
Now this is how to achieve the same effect (ie, having isset() returning true even if variable has been set to null) for objects and arrays

<?php

// array

$array=array('foo'=>null);

return isset($array['foo']) || array_key_exists('foo',$array)
  ? true : false ; // return true

return isset($array['inexistent']) || array_key_exists('inexistent',$array)
  ? true : false ; // return false

// static class

class bar

{
  static $foo=null;
}

return isset(bar::$foo) || array_key_exists('foo',get_class_vars('bar'))
  ? true : false ; // return true

return isset(bar::$inexistent) || array_key_exists('inexistent',get_class_vars('bar'))
  ? true : false ; // return false

// object

class bar
{
    public $foo=null;
}

$bar=new bar();

return isset($bar->foo) || array_key_exists('foo',get_object_vars($bar))
  ? true : false ; // return true

return isset($bar->inexistent) || array_key_exists('inexistent',get_object_vars($bar))
  ? true : false ; // return true

// stdClass

$bar=new stdClass;
$bar->foo=null;

return isset($bar->foo) || array_key_exists('foo',get_object_vars($bar))
  ? true : false ; // return true

return isset($bar->inexistent) || array_key_exists('inexistent',get_object_vars($bar))
  ? true : false ; // return true

?>
Anl zselgin 14-Aug-2009 03:30
Note: Because this is a language construct and not a function, it cannot be called using variable functions.

So why it is under "Variable handling Functions". Maybe there should be some good documentation field for language constructs.
Ashus 08-Dec-2008 01:05
Note that array keys are case sensitive.

<?php
$ar['w'] = true;

var_dump(isset($ar['w']),
      isset($ar['W']));
?>

will report:
bool(true) bool(false)
a dot schaffhirt at sedna-soft dot de 12-Oct-2008 08:01
You can safely use isset to check properties and subproperties of objects directly. So instead of writing

    isset($abc) && isset($abc->def) && isset($abc->def->ghi)

or in a shorter form

    isset($abc, $abc->def, $abc->def->ghi)

you can just write

    isset ($abc->def->ghi)

without raising any errors, warnings or notices.

Examples
<?php
    $abc = (object) array("def" => 123);
    var_dump(isset($abc));                // bool(true)
    var_dump(isset($abc->def));           // bool(true)
    var_dump(isset($abc->def->ghi));      // bool(false)
    var_dump(isset($abc->def->ghi->jkl)); // bool(false)
    var_dump(isset($def));                // bool(false)
    var_dump(isset($def->ghi));           // bool(false)
    var_dump(isset($def->ghi->jkl));      // bool(false)

    var_dump($abc);                       // object(stdClass)#1 (1) { ["def"] => int(123) }
    var_dump($abc->def);                  // int(123)
    var_dump($abc->def->ghi);             // null / E_NOTICE: Trying to get property of non-object
    var_dump($abc->def->ghi->jkl);        // null / E_NOTICE: Trying to get property of non-object
    var_dump($def);                       // null / E_NOTICE: Trying to get property of non-object
    var_dump($def->ghi);                  // null / E_NOTICE: Trying to get property of non-object
    var_dump($def->ghi->jkl);             // null / E_NOTICE: Trying to get property of non-object
?>
mandos78 AT mail from google 29-Jul-2008 02:40
Careful with this function "ifsetfor" by soapergem, passing by reference means that if, like the example $_GET['id'], the argument is an array index, it will be created in the original array (with a null value), thus causing posible trouble with the following code. At least in PHP 5.

For example:

<?php
$a = array();
print_r($a);
ifsetor($a["unsetindex"], 'default');
print_r($a);
?>

will print

Array
(
)
Array
(
    [unsetindex] =>
)

Any foreach or similar will be different before and after the call.
packard_bell_nec at hotmail dot com 25-Dec-2007 11:18
Note: isset() only checks variables as anything else will result in a parse error. In other words, the following will not work: isset(trim($name)).

isset() is the opposite of is_null($var) , except that no warning is generated when the variable is not set.
beuc at beuc dot net 16-Dec-2006 12:35
"empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set."

So essentially
<?php
if (isset($var) && $var)
?>
is the same as
<?php
if (!empty($var))
?>
doesn't it? :)

!empty() mimics the chk() function posted before.
randallgirard at hotmail dot com 27-Sep-2006 11:51
The unexpected results of isset has been really frustrating to me. Hence, it doesn't work how you'd think it would, (as documented) a var currently in the scope with a null value will return false.

Heres a quick solution, perhaps there are better ways of going about this, but heres my solution...

<?php
function is_set( $varname, $parent=null ) {
  if ( !is_array( $parent ) && !is_object($parent) ) {
    $parent = $GLOBALS;
  }
  return array_key_exists( $varname, $parent );
}
?>

Hence, $varname should be a mixed value of var's to check for, and $parent can be an array or object, which will default to the GLOBAL scope. See the documentation of array_key_exists for further information.

This will allow to check if a var is in the current scope, object, or array... Whether it's a null, false, true, or any value. It depends on ARRAY_KEY_EXISTS for it's functionality which also works with Objects. Feel free to improve on this anyone ;D
Tee Cee 20-Aug-2006 05:20
In response to 10-Feb-2006 06:02, isset($v) is in all (except possibly buggy) cases equivalent to !is_null($v). And no, it doesn't actually test if a variable is set or not by my definition "$v is set if unset($v) has no effect".

<?php
unset($c); //force $c to be unset
var_dump($a=&$c); // NULL, but this actually sets $a and $c to the 'same' NULL.
var_dump(isset($c)); // bool(false)
var_dump($a = 5); // int(5)
var_dump($c); // int(5)

unset($c);
var_dump($a=&$c); // NULL
var_dump(isset($c)); // bool(false)
unset($c);
var_dump($a = 5); // int(5)
var_dump($c); // NULL
?>

In the following example, we see an alternate method of testing if a variable is actually set or not:
<?php
var_dump(array_key_exists('c',get_defined_vars())); // false
var_dump(isset($c));                                // also false
var_dump($c);                                       // manipulate $c a bit...
var_dump((string)$c);
var_dump(print_r($c,true));
var_dump($a=$c);
var_dump(array_key_exists('c',get_defined_vars())); // ... still false
var_dump($c = NULL);                                // this sets $c
var_dump(array_key_exists('c',get_defined_vars())); // true!
var_dump(isset($c));                                // false; isset() still says it's unset
unset($c);                                          // actually unset it
var_dump(array_key_exists('c',get_defined_vars())); // false
var_dump($a=&$c);
var_dump(array_key_exists('c',get_defined_vars())); // true!
unset($c);                                          // unset it again
var_dump(&$c);                                      // &NULL
var_dump(array_key_exists('c',get_defined_vars())); // true!
?>

Obviously, null values take up space (or they wouldn't show up in get_defined_vars). Also, note that &$v sets $v to NULL if it is unset.
soywiz at php dot net 14-Apr-2006 06:12
Sometimes you have to check if an array has some keys. To achieve it you can use "isset" like this: isset($array['key1'], $array['key2'], $array['key3'], $array['key4'])
You have to write $array all times and it is reiterative if you use same array each time.

With this simple function you can check if an array has some keys:

<?php
function isset_array() {
    if (func_num_args() < 2) return true;
    $args = func_get_args();
    $array = array_shift($args);
    if (!is_array($array)) return false;
    foreach ($args as $n) if (!isset($array[$n])) return false;
    return true;
}
?>

Use: isset_array($array, 'key1', 'key2', 'key3', 'key4')
First parameter has the array; following parameters has the keys you want to check.
Andrew Penry 11-May-2005 08:17
The following is an example of how to test if a variable is set, whether or not it is NULL. It makes use of the fact that an unset variable will throw an E_NOTICE error, but one initialized as NULL will not.

<?php

function var_exists($var){
    if (empty($GLOBALS['var_exists_err'])) {
        return true;
    } else {
        unset($GLOBALS['var_exists_err']);
        return false;
    }
}

function var_existsHandler($errno, $errstr, $errfile, $errline) {
   $GLOBALS['var_exists_err'] = true;
}

$l = NULL;
set_error_handler("var_existsHandler", E_NOTICE);
echo (var_exists($l)) ? "True " : "False ";
echo (var_exists($k)) ? "True " : "False ";
restore_error_handler();

?>

Outputs:
True False

The problem is, the set_error_handler and restore_error_handler calls can not be inside the function, which means you need 2 extra lines of code every time you are testing. And if you have any E_NOTICE errors caused by other code between the set_error_handler and restore_error_handler they will not be dealt with properly. One solution:

<?php

function var_exists($var){
   if (empty($GLOBALS['var_exists_err'])) {
       return true;
   } else {
       unset($GLOBALS['var_exists_err']);
       return false;
   }
}

function var_existsHandler($errno, $errstr, $errfile, $errline) {
    $filearr = file($errfile);
    if (strpos($filearr[$errline-1], 'var_exists') !== false) {
        $GLOBALS['var_exists_err'] = true;
        return true;
    } else {
        return false;
    }
}

$l = NULL;
set_error_handler("var_existsHandler", E_NOTICE);
echo (var_exists($l)) ? "True " : "False ";
echo (var_exists($k)) ? "True " : "False ";
is_null($j);
restore_error_handler();

?>

Outputs:
True False
Notice: Undefined variable: j in filename.php on line 26

This will make the handler only handle var_exists, but it adds a lot of overhead. Everytime an E_NOTICE error happens, the file it originated from will be loaded into an array.
yaogzhan at gmail dot com 20-Mar-2005 04:52
If you have

<?PHP
class Foo
{
    protected $data = array('bar' => null);

    function __get($p)
    {
        if( isset($this->data[$p]) ) return $this->data[$p];
    }
}
?>

and
<?PHP
$foo = new Foo;
echo isset($foo->bar);
?>
will always echo 'false'. because the isset() accepts VARIABLES as it parameters, but in this case, $foo->bar is NOT a VARIABLE. it is a VALUE returned from the __get() method of the class Foo. thus the isset($foo->bar) expreesion will always equal 'false'.


指定した変数に関する情報を解りやすく出力する

  • ≪ isset
  • serialize ≫
  • PHP Manual
  • 変数操作 関数
  • 指定した変数に関する情報を解りやすく出力する

print_r

(PHP 4, PHP 5, PHP 7, PHP 8)

print_r — 指定した変数に関する情報を解りやすく出力する

説明

print_r(mixed $value, bool $return = false): string|bool

print_r() は、 変数の値に関する情報を解り易い形式で表示します。

print_r()、var_dump() および var_export() は、オブジェクトの protected および private のプロパティも表示します。 static が付いたクラスメンバーは表示されません。

パラメータ

value

表示したい式。

return

print_r() の結果を取得したい場合には return 引数を使います。 この引数が true の場合には、 print_r() は情報を表示するかわりに情報を返します。

戻り値

string、int, float を指定した場合はその値が出力されます。 array を指定した場合、キーと要素を表す形式で値が 表示されます。object に関しても同様の表示形式となります。

return パラメータが true の場合は、 この関数は string を返します。それ以外の場合の戻り値は true です。

例

例1 print_r() の例

<pre>
<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);
?>
</pre>

上の例の出力は以下となります。

<pre>
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)
</pre>

例2 return 引数の例

<?php
$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // print_r の結果が $results に格納されます
?>

注意

注意:

return パラメータを使う場合、かつ PHP 7.1.0 より前のバージョンでは、この関数は内部的な出力バッファリングを使っていました。この場合、ob_start() のコールバック関数の中では使えません。

参考

  • ob_start() - 出力のバッファリングを有効にする
  • var_dump() - 変数に関する情報をダンプする
  • var_export() - 変数の文字列表現を出力または返す

User Contributed Notes

ajaykwatra at gmail dot com 12-Mar-2018 08:33
easier and better readability with print_r and vardump for php developers

https://gist.github.com/akwatra/b6a2f21b33e7a86d148618d8a83276b0
Soaku 28-Sep-2017 04:47
liamtoh6@hotmail.com posted a function that will echo print_r output with proper new lines in HTML files. He used <pre> for it to work, but that might not be always the best method to go. For example, it is not valid to place <pre> inside <p>.

Here is my way to do this:

<?php

function print_rbr ($var, $return = false) {
  $r = nl2br(htmlspecialchars(print_r($var, true)));
  if ($return) return $r;
  else echo $r;
}

?>

This function will:

- Place <br> where newlines are,
- Escape unsecure characters with HTML entities.
Soaku 28-Jul-2017 10:24
Remember to always htmlspecialchars print_r output, if it can contain html characters.

<?php

$array = array("<some>html<tags>");

print_r($array); // Invalid output, HTML breaks.
echo htmlspecialchars(print_r($array, true)); // Works and doesn't break the output.
?>
simivar at gmail dot com 21-Jun-2017 01:31
I've fixed function wrote by Matt to reverse print_r - it had problems with null values. Created a GIST for that too so please add any future fixes in there instead of this comment section:
https://gist.github.com/simivar/037b13a9bbd53ae5a092d8f6d9828bc3

<?php
/**
  * Matt: core
  * Trixor: object handling
  * lech: Windows suppport
  * simivar: null support
  *
  * @see http://php.net/manual/en/function.print-r.php
  **/
function print_r_reverse($input) {
        $lines = preg_split('#\r?\n#', trim($input));
        if (trim($lines[ 0 ]) != 'Array' && trim($lines[ 0 ] != 'stdClass Object')) {
            // bottomed out to something that isn't an array or object
            if ($input === '') {
                return null;
            }

            return $input;
        } else {
            // this is an array or object, lets parse it
            $match = array();
            if (preg_match("/(\s{5,})\(/", $lines[ 1 ], $match)) {
                // this is a tested array/recursive call to this function
                // take a set of spaces off the beginning
                $spaces = $match[ 1 ];
                $spaces_length = strlen($spaces);
                $lines_total = count($lines);
                for ($i = 0; $i < $lines_total; $i++) {
                    if (substr($lines[ $i ], 0, $spaces_length) == $spaces) {
                        $lines[ $i ] = substr($lines[ $i ], $spaces_length);
                    }
                }
            }
            $is_object = trim($lines[ 0 ]) == 'stdClass Object';
            array_shift($lines); // Array
            array_shift($lines); // (
            array_pop($lines); // )
            $input = implode("\n", $lines);
            $matches = array();
            // make sure we only match stuff with 4 preceding spaces (stuff for this array and not a nested one)
            preg_match_all("/^\s{4}\[(.+?)\] \=\> /m", $input, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
            $pos = array();
            $previous_key = '';
            $in_length = strlen($input);
            // store the following in $pos:
            // array with key = key of the parsed array's item
            // value = array(start position in $in, $end position in $in)
            foreach ($matches as $match) {
                $key = $match[ 1 ][ 0 ];
                $start = $match[ 0 ][ 1 ] + strlen($match[ 0 ][ 0 ]);
                $pos[ $key ] = array($start, $in_length);
                if ($previous_key != '') {
                    $pos[ $previous_key ][ 1 ] = $match[ 0 ][ 1 ] - 1;
                }
                $previous_key = $key;
            }
            $ret = array();
            foreach ($pos as $key => $where) {
                // recursively see if the parsed out value is an array too
                $ret[ $key ] = print_r_reverse(substr($input, $where[ 0 ], $where[ 1 ] - $where[ 0 ]));
            }

            return $is_object ? (object)$ret : $ret;
        }
    }
?>
anymix dot services at gmail dot com 28-May-2017 04:31
// New var export option

function varExp($E,$vE){
    $vE.="=array(";$sep="";
    foreach ($E as $veK => $veV) {
        $vE.=$sep."'$veK'=>'$veV'";$sep=",";
    }
    $vE.=");";
    return $vE;
}

print varExp($I,"\$I");
lech 02-May-2017 08:30
A slight amendment to Matt's awesome print_r_reverse function (Thank You, a life-saver - data recovery :-) . If the output is copied from a Windows system, the end of lines may include the return character "\r" and so the scalar (string) elements will include a trailing "\r" character that isn't suppose to be there. To resolve, replace the first line in the function with...

<?php $lines = preg_split('#\r?\n#', trim($in)); ?>

This will work for both cases (Linux and Windows).

I include the entire function below for completeness, but all credit to Matt, the original author, Thank You.

<?php
//Author: Matt (http://us3.php.net/print_r)
function print_r_reverse($in) {
    $lines = preg_split('#\r?\n#', trim($in));
    if (trim($lines[0]) != 'Array') {
        // bottomed out to something that isn't an array
        return $in;
    } else {
        // this is an array, lets parse it
        if (preg_match("/(\s{5,})\(/", $lines[1], $match)) {
            // this is a tested array/recursive call to this function
            // take a set of spaces off the beginning
            $spaces = $match[1];
            $spaces_length = strlen($spaces);
            $lines_total = count($lines);
            for ($i = 0; $i < $lines_total; $i++) {
                if (substr($lines[$i], 0, $spaces_length) == $spaces) {
                    $lines[$i] = substr($lines[$i], $spaces_length);
                }
            }
        }
        array_shift($lines); // Array
        array_shift($lines); // (
        array_pop($lines); // )
        $in = implode("\n", $lines);
        // make sure we only match stuff with 4 preceding spaces (stuff for this array and not a nested one)
        preg_match_all("/^\s{4}\[(.+?)\] \=\> /m", $in, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
        $pos = array();
        $previous_key = '';
        $in_length = strlen($in);
        // store the following in $pos:
        // array with key = key of the parsed array's item
        // value = array(start position in $in, $end position in $in)
        foreach ($matches as $match) {
            $key = $match[1][0];
            $start = $match[0][1] + strlen($match[0][0]);
            $pos[$key] = array($start, $in_length);
            if ($previous_key != '') $pos[$previous_key][1] = $match[0][1] - 1;
            $previous_key = $key;
        }
        $ret = array();
        foreach ($pos as $key => $where) {
            // recursively see if the parsed out value is an array too
            $ret[$key] = print_r_reverse(substr($in, $where[0], $where[1] - $where[0]));
        }
        return $ret;
    }
}
?>
Trixor 01-Feb-2017 07:12
I've made a small improvement to the print_r_reverse function to also handle objects. Thanks to Matt for making the original.

<?php
function print_r_reverse($in) {
  $lines = explode("\n", trim($in));
  if (trim($lines[0]) != 'Array' && trim($lines[0] != 'stdClass Object')) {
// bottomed out to something that isn't an array or object
    return $in;
  } else {
// this is an array or object, lets parse it
    $match = array();
    if (preg_match("/(\s{5,})\(/", $lines[1], $match)) {
// this is a tested array/recursive call to this function
// take a set of spaces off the beginning
      $spaces = $match[1];
      $spaces_length = strlen($spaces);
      $lines_total = count($lines);
      for ($i = 0; $i < $lines_total; $i++) {
        if (substr($lines[$i], 0, $spaces_length) == $spaces) {
          $lines[$i] = substr($lines[$i], $spaces_length);
        }
      }
    }
    $is_object = trim($lines[0]) == 'stdClass Object';
    array_shift($lines); // Array
    array_shift($lines); // (
    array_pop($lines); // )
    $in = implode("\n", $lines);
    $matches = array();
// make sure we only match stuff with 4 preceding spaces (stuff for this array and not a nested one)
    preg_match_all("/^\s{4}\[(.+?)\] \=\> /m", $in, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
    $pos = array();
    $previous_key = '';
    $in_length = strlen($in);
// store the following in $pos:
// array with key = key of the parsed array's item
// value = array(start position in $in, $end position in $in)
    foreach ($matches as $match) {
      $key = $match[1][0];
      $start = $match[0][1] + strlen($match[0][0]);
      $pos[$key] = array($start, $in_length);
      if ($previous_key != '') {
        $pos[$previous_key][1] = $match[0][1] - 1;
      }
      $previous_key = $key;
    }
    $ret = array();
    foreach ($pos as $key => $where) {
// recursively see if the parsed out value is an array too
      $ret[$key] = print_r_reverse(substr($in, $where[0], $where[1] - $where[0]));
    }
    return $is_object ? (object) $ret : $ret;
  }
}
?>
ntd at entidi dot it 31-Jul-2015 05:43
Another attempt that tries to overcome the memory blowout when the passed in data has mutual recursion.

<?php
function safe_print_r($data, $nesting = 5, $indent = '') {
    if (! is_object($data) && ! is_array($data)) {
        var_dump($data);
    } elseif ($nesting < 0) {
        echo "** MORE **\n";
    } else {
        echo ucfirst(gettype($data)) . " (\n";
        foreach ((array) $data as $k => $v) {
            echo $indent . "\t[$k] => ";
            safe_print_r($v, $nesting - 1, "$indent\t");
        }
        echo "$indent)\n";
    }
}
?>
Sumit 27-May-2015 01:20
I prefer to use
<?php
printf("<pre>%s</pre>",print_r($_POST, true));
?>
Simon Asika 06-Nov-2013 04:06
Here is a print_r() clone but support max level limit.

When we want to print a big object, this will help us get a clean dumping data.

<?php

/**
 * Recrusive print variables and limit by level.
 *
 * @param   mixed  $data   The variable you want to dump.
 * @param   int    $level  The level number to limit recrusive loop.
 *
 * @return  string  Dumped data.
 *
 * @author  Simon Asika (asika32764[at]gmail com)
 * @date    2013-11-06
 */
function print_r_level($data, $level = 5)
{
    static $innerLevel = 1;

    static $tabLevel = 1;

    static $cache = array();

    $self = __FUNCTION__;

    $type       = gettype($data);
    $tabs       = str_repeat('    ', $tabLevel);
    $quoteTabes = str_repeat('    ', $tabLevel - 1);

    $recrusiveType = array('object', 'array');

    // Recrusive
    if (in_array($type, $recrusiveType))
    {
        // If type is object, try to get properties by Reflection.
        if ($type == 'object')
        {
            if (in_array($data, $cache))
            {
                return "\n{$quoteTabes}*RECURSION*\n";
            }

            // Cache the data
            $cache[] = $data;

            $output     = get_class($data) . ' ' . ucfirst($type);
            $ref        = new \ReflectionObject($data);
            $properties = $ref->getProperties();

            $elements = array();

            foreach ($properties as $property)
            {
                $property->setAccessible(true);

                $pType = $property->getName();

                if ($property->isProtected())
                {
                    $pType .= ":protected";
                }
                elseif ($property->isPrivate())
                {
                    $pType .= ":" . $property->class . ":private";
                }

                if ($property->isStatic())
                {
                    $pType .= ":static";
                }

                $elements[$pType] = $property->getValue($data);
            }
        }
        // If type is array, just retun it's value.
        elseif ($type == 'array')
        {
            $output = ucfirst($type);
            $elements = $data;
        }

        // Start dumping datas
        if ($level == 0 || $innerLevel < $level)
        {
            // Start recrusive print
            $output .= "\n{$quoteTabes}(";

            foreach ($elements as $key => $element)
            {
                $output .= "\n{$tabs}[{$key}] => ";

                // Increment level
                $tabLevel = $tabLevel + 2;
                $innerLevel++;

                $output  .= in_array(gettype($element), $recrusiveType) ? $self($element, $level) : $element;

                // Decrement level
                $tabLevel = $tabLevel - 2;
                $innerLevel--;
            }

            $output .= "\n{$quoteTabes})\n";
        }
        else
        {
            $output .= "\n{$quoteTabes}*MAX LEVEL*\n";
        }
    }

    // Clean cache
    if($innerLevel == 1)
    {
        $cache = array();
    }

    return $output;
}// End function

// TEST ------------------------------------

class testClass
{
    protected $a = 'aaa';

    private $b = 'bbb';

    public $c = array(1, 2, ['a', 'b', 'c'], 4);

    static public $d = 'ddd';

    static protected $e = 'eee';
}

$test = new testClass;

$test->testClass = $test;

echo '<pre>' . print_r_level($test, 3) . '</pre>';

?>

will output
-------------------------------------------------------------

testClass Object
(
    [a:protected] => aaa
    [b:testClass:private] => bbb
    [c] => Array
        (
            [0] => 1
            [1] => 2
            [2] => Array
                *MAX LEVEL*

            [3] => 4
        )

    [d:static] => ddd
    [e:protected:static] => eee
    [testClass] =>
        *RECURSION*

)
preda dot vlad at yahoo dot com 22-Mar-2013 09:40
print_r(), just like var_dump() does NOT cast an object, not even if it has a __toString() method - which is normal.

<?php
class A {
    public function __toString() {
        return 'In class A';
    }
}
$a = new A;
echo $a; // In class A
print_r($a); // A Object()
// you can simulate the echo by casting it manually
print_r((string)$a);  // In class A
henzeberkheij at gmail dot com 28-Jan-2012 03:10
print_r is used for debug purposes. Yet I had some classes where I just wanted the values coming out of the database, not all the other crap. thus i wrote the following function. If your class has an toArray function, that one will be called otherwise it will return the object as is. print_neat_classes_r is the function that should be called!

<?php
print_neat_classes_r($array, $return=false){
        return print_r(self::neat_class_print_r($array), $return);
    }

function do_print_r($array, $return=false){
        if(is_object($array) && method_exists($array, 'toArray')){
            return $array->toArray();
        }else if(is_array($array)){
            foreach($array as $key=>$obj){
                $array[$key] = self::do_print_r($obj, $return);
            }
            return $array;
        }else{
            return $array;
        }
    }
?>
eithed 21-Oct-2011 02:25
Bear in mind that print_r actually reserves some memory to do something - so, for example thing like:

<?php
function shutdown_handler()
{
    file_put_contents($_SERVER['DOCUMENT_ROOT']."/log.txt", print_r($_REQUEST, true));
}

ini_set('memory_limit', '1M');
register_shutdown_function("shutdown_handler");

$array = array();
while(true)
    $array[] = new stdClass();
?>

will just not work. Try using var_export, and presto, everything is fine.
machuidel 03-Feb-2011 04:01
The following will output an array in a PHP parsable format:

<?php
function serialize_array(&$array, $root = '$root', $depth = 0)
{
        $items = array();

        foreach($array as $key => &$value)
        {
                if(is_array($value))
                {
                        serialize_array($value, $root . '[\'' . $key . '\']', $depth + 1);
                }
                else
                {
                        $items[$key] = $value;
                }
        }

        if(count($items) > 0)
        {
                echo $root . ' = array(';

                $prefix = '';
                foreach($items as $key => &$value)
                {
                        echo $prefix . '\'' . $key . '\' => \'' . addslashes($value) . '\'';
                        $prefix = ', ';
                }

                echo ');' . "\n";
        }
}
?>
Alexander 19-Mar-2010 05:20
A simple function to send the output of print_r to firebug.
The script creates a dummy console object with a log method for when firebug is disabled/not available.

<?php
function debug ($data) {
    echo "<script>\r\n//<![CDATA[\r\nif(!console){var console={log:function(){}}}";
    $output    =    explode("\n", print_r($data, true));
    foreach ($output as $line) {
        if (trim($line)) {
            $line    =    addslashes($line);
            echo "console.log(\"{$line}\");";
        }
    }
    echo "\r\n//]]>\r\n</script>";
}
?>
liamtoh6 at hotmail dot com 03-Feb-2010 10:01
I add this function to the global scope on just about every project I do, it makes reading the output of print_r() in a browser infinitely easier.

<?php
function print_r2($val){
        echo '<pre>';
        print_r($val);
        echo  '</pre>';
}
?>

It also makes sense in some cases to add an if statement to only display the output in certain scenarios, such as:

if(debug==true)
if($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
Matt 14-Sep-2009 12:53
Here is another version that parses the print_r() output. I tried the one posted, but I had difficulties with it. I believe it has a problem with nested arrays. This handles nested arrays without issue as far as I can tell.

<?php
function print_r_reverse($in) {
    $lines = explode("\n", trim($in));
    if (trim($lines[0]) != 'Array') {
        // bottomed out to something that isn't an array
        return $in;
    } else {
        // this is an array, lets parse it
        if (preg_match("/(\s{5,})\(/", $lines[1], $match)) {
            // this is a tested array/recursive call to this function
            // take a set of spaces off the beginning
            $spaces = $match[1];
            $spaces_length = strlen($spaces);
            $lines_total = count($lines);
            for ($i = 0; $i < $lines_total; $i++) {
                if (substr($lines[$i], 0, $spaces_length) == $spaces) {
                    $lines[$i] = substr($lines[$i], $spaces_length);
                }
            }
        }
        array_shift($lines); // Array
        array_shift($lines); // (
        array_pop($lines); // )
        $in = implode("\n", $lines);
        // make sure we only match stuff with 4 preceding spaces (stuff for this array and not a nested one)
        preg_match_all("/^\s{4}\[(.+?)\] \=\> /m", $in, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
        $pos = array();
        $previous_key = '';
        $in_length = strlen($in);
        // store the following in $pos:
        // array with key = key of the parsed array's item
        // value = array(start position in $in, $end position in $in)
        foreach ($matches as $match) {
            $key = $match[1][0];
            $start = $match[0][1] + strlen($match[0][0]);
            $pos[$key] = array($start, $in_length);
            if ($previous_key != '') $pos[$previous_key][1] = $match[0][1] - 1;
            $previous_key = $key;
        }
        $ret = array();
        foreach ($pos as $key => $where) {
            // recursively see if the parsed out value is an array too
            $ret[$key] = print_r_reverse(substr($in, $where[0], $where[1] - $where[0]));
        }
        return $ret;
    }
}

?>
Bob 08-May-2009 03:19
Here is a function that formats the output of print_r as a expandable/collapsable tree list using HTML and JavaScript.
<?php
function print_r_tree($data)
{
    // capture the output of print_r
    $out = print_r($data, true);

    // replace something like '[element] => <newline> (' with <a href="javascript:toggleDisplay('...');">...</a><div id="..." style="display: none;">
    $out = preg_replace('/([ \t]*)(\[[^\]]+\][ \t]*\=\>[ \t]*[a-z0-9 \t_]+)\n[ \t]*\(/iUe',"'\\1<a href=\"javascript:toggleDisplay(\''.(\$id = substr(md5(rand().'\\0'), 0, 7)).'\');\">\\2</a><div id=\"'.\$id.'\" style=\"display: none;\">'", $out);

    // replace ')' on its own on a new line (surrounded by whitespace is ok) with '</div>
    $out = preg_replace('/^\s*\)\s*$/m', '</div>', $out);

    // print the javascript function toggleDisplay() and then the transformed output
    echo '<script language="Javascript">function toggleDisplay(id) { document.getElementById(id).style.display = (document.getElementById(id).style.display == "block") ? "none" : "block"; }</script>'."\n$out";
}
?>
Pass it a multidimensional array or object and each sub-array/object will be hidden and replaced by a html link that will toggle its display on and off.
Its quick and dirty, but great for debugging the contents of large arrays and objects.
Note: You'll want to surround the output with <pre></pre>
sebasg37 at gmail dot com 25-Jan-2009 09:35
If you have to catch the output without showing it at all at first (for example, if you want to append the print_r output to a file), you can do this:

<?php

ob_start();
print_r( $some_array );
$output = ob_get_clean();

// if you want to append the print_r output of $some_array to, let's say, log.txt:

file_put_contents( 'log.txt', file_get_contents( 'log.txt' ) . $output )

?>
afisher8 at cox dot net 17-Dec-2008 08:53
I use this all the time when debugging objects, but when you have a very large object with big arrays of sub-objects, it's easy to get overwhelmed with the large amount of output....sometimes you don't want to see absolutely every sub-object.

I made this function to debug objects while "hiding" sub-objects of certain types.  This also color codes the output for a more readable printout.

<?php

function wtf($var, $arrayOfObjectsToHide=null, $fontSize=11)
{
    $text = print_r($var, true);

    if (is_array($arrayOfObjectsToHide)) {

        foreach ($arrayOfObjectsToHide as $objectName) {

            $searchPattern = '#('.$objectName.' Object\n(\s+)\().*?\n\2\)\n#s';
            $replace = "$1<span style=\"color: #FF9900;\">--&gt; HIDDEN - courtesy of wtf() &lt;--</span>)";
            $text = preg_replace($searchPattern, $replace, $text);
        }
    }

    // color code objects
    $text = preg_replace('#(\w+)(\s+Object\s+\()#s', '<span style="color: #079700;">$1</span>$2', $text);
    // color code object properties
    $text = preg_replace('#\[(\w+)\:(public|private|protected)\]#', '[<span style="color: #000099;">$1</span>:<span style="color: #009999;">$2</span>]', $text);

    echo '<pre style="font-size: '.$fontSize.'px; line-height: '.$fontSize.'px;">'.$text.'</pre>';
}

// example usage:
wtf($myBigObject, array('NameOfObjectToHide_1', 'NameOfObjectToHide_2'));

?>
kurt krueckeberg 28-Oct-2008 10:53
This is an alternative for printing arrays. It bolds array values.

<?php
function print_array(&$a, $str = "")
{
    if ($str[0]) {
        echo "$str =";
    }
    echo ' array( ';
    foreach ($a as $k => $v) {

        echo "[$k]".' => ';

        if (is_array($v)) {
            print_array($v);
        }
        else {
               echo "<strong>$a[$k]</strong> ";
        }
    }
    echo ')  ';
}
$a1 = array ("apples", "oranges", "pears");
$a2 = array ("potatos", "green beans", "squash");
$a3 = array ("euros", "dollars", "pesos", "dinars");
$test = range(1, 9);
array_push($test, array ("fruit" => $a1, "vegies" => $a2, "money" => $a3));
print_array($test, "test");
?>
schizo do not spamme duckie at gmail dot com 07-Oct-2008 05:00
my take on the highlighted markupped debug function:

<?php
/**
 * print_array()
 * Does a var_export of the array and returns it between <pre> tags
 *
 * @param mixed $var any input you can think of
 * @return string HTML
 */
function print_array($var)
{
    $input =var_export($var,true);
    $input = preg_replace("! => \n\W+ array \(!Uims", " => Array ( ", $input);
    $input = preg_replace("!array \(\W+\),!Uims", "Array ( ),", $input);
    return("<pre>".str_replace('><?', '>', highlight_string('<'.'?'.$input, true))."</pre>");
}
?>
brenden at beagleproductions dot com 28-Aug-2008 01:58
Many developers have submitted bugs to the PHP development team with regards to print_r showing protected and private properties of objects (PHP 5).  This is not a bug; sensitive information (ex. database connection object) should be  encapsulated within a private member function of your class.
admin at swivelgames dot com 17-Aug-2008 01:44
I was having problems using print_r because I didn't like the fact that if tags where included in the array it would still be parsed by the browsers.

Heres a simple fix for anyone who is having the same problem as I did. This will output your text properly for viewing through the browser instead of the browser's "view source" or CLI.

Script:
<?php

     $MyArray[0]="<div align='center'>My Text</div>";

     echo "<pre>".htmlspecialchars(print_r($MyArray,true))."</pre>";

?>

Output:
<pre>Array
(
    [0] =&gt; &lt;div align='center'&gt;My Text&lt;/div&gt;
)
</pre>
Anonymous 28-Jun-2008 01:21
I have written a nice debugging function.
This function handles arrays beautifully.
<?php
//Debug variables, $i and $k are for recursive use
function DebugDisplayVar($input, $name = "Debug", $i = "0", $k = array("Error")){
    if(is_array($input))
    {    foreach ($input as $i => $value){
            $temp = $k;
            $temp[] = $i;
            DebugDisplayVar($value, $name, $i, $temp);}
    }else{//if not array
        echo "$".$name;//[$k]
        foreach ($k as $i => $value){
            if($value !=="Error"){echo "[$value]";}
        }
        echo " = $input<br>";
}    }

//outputs
Debug[0] = value
Debug[1] = another value
ect...

?>
janci 13-May-2008 02:49
You cannot use print_r(), var_dump() nor var_export() to get static member variables of a class. However, in PHP5 you can use Reflection classes for this:

<?php

$reflection = new ReflectionClass('Static');
print_r($reflection->getStaticProperties());

?>
helpful at maybe dot com 06-Mar-2008 08:13
Another slight modification to the previous post to allow for empty array elements

added the following lines after the first preg_match block
<?php
        } else if ($expecting == 2 && preg_match('/^\[(.+?)\] \=\>$/', $trim, $matches)) { // array element
            // the array element is blank
            list ($fullMatch, $key) = $matches;
            $topArray[$key] = $element;
        }

?>
anon at anon dot com 29-Feb-2008 10:30
A slight modification to the previous post to allow for arrays containing mutli line strings. haven't fully tested it with everything, but seems to work great for the stuff i've done so far.

<?php

function print_r_reverse(&$output)
{
    $expecting = 0; // 0=nothing in particular, 1=array open paren '(', 2=array element or close paren ')'
    $lines = explode("\n", $output);
    $result = null;
    $topArray = null;
    $arrayStack = array();
    $matches = null;
    while (!empty($lines) && $result === null)
    {
        $line = array_shift($lines);
        $trim = trim($line);
        if ($trim == 'Array')
        {
            if ($expecting == 0)
            {
                $topArray = array();
                $expecting = 1;
            }
            else
            {
                trigger_error("Unknown array.");
            }
        }
        else if ($expecting == 1 && $trim == '(')
        {
            $expecting = 2;
        }
        else if ($expecting == 2 && preg_match('/^\[(.+?)\] \=\> (.+)$/', $trim, $matches)) // array element
        {
            list ($fullMatch, $key, $element) = $matches;
            if (trim($element) == 'Array')
            {
                $topArray[$key] = array();
                $newTopArray =& $topArray[$key];
                $arrayStack[] =& $topArray;
                $topArray =& $newTopArray;
                $expecting = 1;
            }
            else
            {
                $topArray[$key] = $element;
            }
        }
        else if ($expecting == 2 && $trim == ')') // end current array
        {
            if (empty($arrayStack))
            {
                $result = $topArray;
            }
            else // pop into parent array
            {
                // safe array pop
                $keys = array_keys($arrayStack);
                $lastKey = array_pop($keys);
                $temp =& $arrayStack[$lastKey];
                unset($arrayStack[$lastKey]);
                $topArray =& $temp;
            }
        }
        // Added this to allow for multi line strings.
    else if (!empty($trim) && $expecting == 2)
    {
        // Expecting close parent or element, but got just a string
        $topArray[$key] .= "\n".$line;
    }
        else if (!empty($trim))
        {
            $result = $line;
        }
    }

    $output = implode(n, $lines);
    return $result;
}

/**
 * @param string $output : The output of a multiple print_r calls, separated by newlines
 * @return mixed[] : parseable elements of $output
 */
function print_r_reverse_multiple($output)
{
    $result = array();
    while (($reverse = print_r_reverse($output)) !== NULL)
    {
        $result[] = $reverse;
    }
    return $result;
}

$output = '
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
            [3] => Array
            (
                [nest] => yes
                [nest2] => Array
                (
                    [nest] => some more
                    asffjaskkd
                )
                [nest3] => o rly?
            )
        )
)

some extra stuff
';
var_dump(print_r_reverse($output), $output);

?>

This should output

array(3) {
  ["a"]=>
  string(5) "apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  array(4) {
    [0]=>
    string(1) "x"
    [1]=>
    string(1) "y"
    [2]=>
    string(1) "z"
    [3]=>
    array(3) {
      ["nest"]=>
      string(3) "yes"
      ["nest2"]=>
      array(1) {
        ["nest"]=>
        string(40) "some more
                    asffjaskkd"
      }
      ["nest3"]=>
      string(6) "o rly?"
    }
  }
}
string(18) "nsome extra stuffn"

Added:
else if (!empty($trim) && $expecting == 2)
{
    // Expecting close parent or element, but got just a string
    $topArray[$key] .= "\n".$line;
}
bart at mediawave dot nl 30-Oct-2007 04:27
Here's a PHP version of print_r which can be tailored to your needs. Shows protected and private properties of objects and detects recursion (for objects only!). Usage:

void u_print_r ( mixed $expression [, array $ignore] )

Use the $ignore parameter to provide an array of property names that shouldn't be followed recursively.

<?php

function u_print_r($subject, $ignore = array(), $depth = 1, $refChain = array())
{
    if ($depth > 20) return;
    if (is_object($subject)) {
        foreach ($refChain as $refVal)
            if ($refVal === $subject) {
                echo "*RECURSION*\n";
                return;
            }
        array_push($refChain, $subject);
        echo get_class($subject) . " Object ( \n";
        $subject = (array) $subject;
        foreach ($subject as $key => $val)
            if (is_array($ignore) && !in_array($key, $ignore, 1)) {
                echo str_repeat(" ", $depth * 4) . '[';
                if ($key{0} == "\0") {
                    $keyParts = explode("\0", $key);
                    echo $keyParts[2] . (($keyParts[1] == '*')  ? ':protected' : ':private');
                } else
                    echo $key;
                echo '] => ';
                u_print_r($val, $ignore, $depth + 1, $refChain);
            }
        echo str_repeat(" ", ($depth - 1) * 4) . ")\n";
        array_pop($refChain);
    } elseif (is_array($subject)) {
        echo "Array ( \n";
        foreach ($subject as $key => $val)
            if (is_array($ignore) && !in_array($key, $ignore, 1)) {
                echo str_repeat(" ", $depth * 4) . '[' . $key . '] => ';
                u_print_r($val, $ignore, $depth + 1, $refChain);
            }
        echo str_repeat(" ", ($depth - 1) * 4) . ")\n";
    } else
        echo $subject . "\n";
}

?>

Example:

<?php

class test {

    public $var1 = 'a';
    protected $var2 = 'b';
    private $var3 = 'c';
    protected $array = array('x', 'y', 'z');

}

$test = new test();
$test->recursiveRef = $test;
$test->anotherRecursiveRef->recursiveRef = $test;
$test->dont->follow = 'me';

u_print_r($test, array('dont'));

?>

Will produce:

test Object (
    [var1] => a
    [var2:protected] => b
    [var3:private] => c
    [array:protected] => Array (
        [0] => x
        [1] => y
        [2] => z
    )
    [recursiveRef] => *RECURSION*
    [anotherRecursiveRef] => stdClass Object (
        [recursiveRef] => *RECURSION*
    )
)
motin at demomusic dot nu 19-Jun-2007 04:01
This works around the hacky nature of print_r in return mode (using output buffering for the return mode to work is hacky...):

<?php
/**
  * An alternative to print_r that unlike the original does not use output buffering with
  * the return parameter set to true. Thus, Fatal errors that would be the result of print_r
  * in return-mode within ob handlers can be avoided.
  *
  * Comes with an extra parameter to be able to generate html code. If you need a
  * human readable DHTML-based print_r alternative, see http://krumo.sourceforge.net/
  *
  * Support for printing of objects as well as the $return parameter functionality
  * added by Fredrik Wollsen (fredrik dot motin at gmail), to make it work as a drop-in
  * replacement for print_r (Except for that this function does not output
  * paranthesises around element groups... ;) )
  *
  * Based on return_array() By Matthew Ruivo (mruivo at gmail)
  * (http://se2.php.net/manual/en/function.print-r.php#73436)
  */
function obsafe_print_r($var, $return = false, $html = false, $level = 0) {
    $spaces = "";
    $space = $html ? "&nbsp;" : " ";
    $newline = $html ? "<br />" : "\n";
    for ($i = 1; $i <= 6; $i++) {
        $spaces .= $space;
    }
    $tabs = $spaces;
    for ($i = 1; $i <= $level; $i++) {
        $tabs .= $spaces;
    }
    if (is_array($var)) {
        $title = "Array";
    } elseif (is_object($var)) {
        $title = get_class($var)." Object";
    }
    $output = $title . $newline . $newline;
    foreach($var as $key => $value) {
        if (is_array($value) || is_object($value)) {
            $level++;
            $value = obsafe_print_r($value, true, $html, $level);
            $level--;
        }
        $output .= $tabs . "[" . $key . "] => " . $value . $newline;
    }
    if ($return) return $output;
      else echo $output;
}
?>

Built on a function earlier posted in these comments as stated in the Doc comment. Cheers! /Fredrik (Motin)
Enthusiastic PHPers 22-Mar-2007 12:03
We had an interesting problem dumping an object that
contained embedded HTML. The application makes use
of buffer manipulation functions, so print_r's 2nd argument
wasn't helpful. Here is how we solved the problem:

$object = new ObjectContainingHTML();
$savedbuffercontents = ob_get_clean();
print_r($object);
$print_r_output = ob_get_clean();
ob_start();
echo $savedbuffercontents;
echo htmlentities($print_r_output);
Matthew Ruivo (mruivo at gmail) 22-Feb-2007 10:47
For those of you needing to print an array within a buffer callback function, I've created this quick function. It simply returns the array as a readable string rather than printing it. You can even choose whether to return it in normal text-mode or HTML. It's recursive, so multi-dimensial arrays are supported. I hope someone finds this useful!

<?php

    function return_array($array, $html = false, $level = 0) {
        $space = $html ? "&nbsp;" : " ";
        $newline = $html ? "<br />" : "\n";
        for ($i = 1; $i <= 6; $i++) {
            $spaces .= $space;
        }
        $tabs = $spaces;
        for ($i = 1; $i <= $level; $i++) {
            $tabs .= $spaces;
        }
        $output = "Array" . $newline . $newline;
        foreach($array as $key => $value) {
            if (is_array($value)) {
                $level++;
                $value = return_array($value, $html, $level);
                $level--;
            }
            $output .= $tabs . "[" . $key . "] => " . $value . $newline;
        }
        return $output;
    }

?>
reinder at fake-address dot com 31-Jan-2006 09:09
I always use this function in my code, because most of my functions return an Array or Boolean :

<?php

function printr ( $object , $name = '' ) {

    print ( '\'' . $name . '\' : ' ) ;

    if ( is_array ( $object ) ) {
        print ( '<pre>' )  ;
        print_r ( $object ) ;
        print ( '</pre>' ) ;
    } else {
        var_dump ( $object ) ;
    }

}

?>

( print_r gives no output on FALSE and that can be annoying! )
thbley at gmail dot com 16-Nov-2005 12:10
Here is a print_r that produces xml:
(now you can expand/collapse the nodes in your browser)

<?php
header('Content-Type: text/xml; CHARSET=shift-jis');
echo print_r_xml($some_var);

function print_r_xml($arr,$first=true) {
  $output = "";
  if ($first) $output .= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<data>\n";
  foreach($arr as $key => $val) {
    if (is_numeric($key)) $key = "arr_".$key; // <0 is not allowed
    switch (gettype($val)) {
      case "array":
        $output .= "<".htmlspecialchars($key)." type='array' size='".count($val)."'>".
          print_r_xml($val,false)."</".htmlspecialchars($key).">\n"; break;
      case "boolean":
        $output .= "<".htmlspecialchars($key)." type='bool'>".($val?"true":"false").
          "</".htmlspecialchars($key).">\n"; break;
      case "integer":
        $output .= "<".htmlspecialchars($key)." type='integer'>".
          htmlspecialchars($val)."</".htmlspecialchars($key).">\n"; break;
      case "double":
        $output .= "<".htmlspecialchars($key)." type='double'>".
          htmlspecialchars($val)."</".htmlspecialchars($key).">\n"; break;
      case "string":
        $output .= "<".htmlspecialchars($key)." type='string' size='".strlen($val)."'>".
          htmlspecialchars($val)."</".htmlspecialchars($key).">\n"; break;
      default:
        $output .= "<".htmlspecialchars($key)." type='unknown'>".gettype($val).
          "</".htmlspecialchars($key).">\n"; break;
    }
  }
  if ($first) $output .= "</data>\n";
  return $output;
}

?>
warhog at warhog dot net 11-Aug-2005 05:01
For very long arrays I have written a little function which formats an array quite nice and uses javascript for browsing it like a tree. The function is very customizable with the $style parameter.
For me it's of great use for browsing large array's, for example when those are used in language-files in some script and so on. It may even be used in "real" scripts for the "real" front-end, cause the tree can very easily be styled (look at the function or the outputted source and you'll see what i mean).

Here's the function:

<?php

function print_r_html($arr, $style = "display: none; margin-left: 10px;")
{ static $i = 0; $i++;
  echo "\n<div id=\"array_tree_$i\" class=\"array_tree\">\n";
  foreach($arr as $key => $val)
  { switch (gettype($val))
    { case "array":
        echo "<a onclick=\"document.getElementById('";
        echo array_tree_element_$i."').style.display = ";
        echo "document.getElementById('array_tree_element_$i";
        echo "').style.display == 'block' ?";
        echo "'none' : 'block';\"\n";
        echo "name=\"array_tree_link_$i\" href=\"#array_tree_link_$i\">".htmlspecialchars($key)."</a><br />\n";
        echo "<div class=\"array_tree_element_\" id=\"array_tree_element_$i\" style=\"$style\">";
        echo print_r_html($val);
        echo "</div>";
      break;
      case "integer":
        echo "<b>".htmlspecialchars($key)."</b> => <i>".htmlspecialchars($val)."</i><br />";
      break;
      case "double":
        echo "<b>".htmlspecialchars($key)."</b> => <i>".htmlspecialchars($val)."</i><br />";
      break;
      case "boolean":
        echo "<b>".htmlspecialchars($key)."</b> => ";
        if ($val)
        { echo "true"; }
        else
        { echo "false"; }
        echo  "<br />\n";
      break;
      case "string":
        echo "<b>".htmlspecialchars($key)."</b> => <code>".htmlspecialchars($val)."</code><br />";
      break;
      default:
        echo "<b>".htmlspecialchars($key)."</b> => ".gettype($val)."<br />";
      break; }
    echo "\n"; }
  echo "</div>\n"; }

?>

The function as it is now does not support the $return parameter as print_r does and will create an endless loop like print_r did in php-versions < 4.0.3 when there is an element which contains a reference to a variable inside of the array to print out :-/

I've tested it with PHP 5.0.6 and PHP 4.2.3 - no problems except those already mentioned.

please e-mail me if you've got a solution for the problems i've mentioned, i myself are not able to solve them 'cause i don't know how the hell i can find out whether a variable is a reference or not.
general at NOSPAMbugfoo dot com 20-Jan-2005 01:23
You can't use print_r($var, TRUE) inside a function which is a callback from ob_start() or you get the following error:
Fatal error: print_r(): Cannot use output buffering in output buffering display handlers


値の保存可能な表現を生成する

  • ≪ print_r
  • settype ≫
  • PHP Manual
  • 変数操作 関数
  • 値の保存可能な表現を生成する

serialize

(PHP 4, PHP 5, PHP 7, PHP 8)

serialize — 値の保存可能な表現を生成する

説明

serialize(mixed $value): string

値の保存可能な表現を生成します。

型や構造を失わずに PHP の値を保存または渡す際に有用です。

シリアル化された文字列を PHP の値に戻すには、 unserialize() を使用してください。

パラメータ

value

シリアル化する値。 serialize() は、resource および一部の object 以外のすべての型を処理します。（下記の注を参照ください） 自分自身への参照を含む配列を serialize() することも可能です。 シリアル化した配列/オブジェクト内の 循環参照も保存されます。その他の参照は失われます。

PHP は、シリアル化の前にまずメンバ関数 __serialize() または __sleep() のコールを試みます。ここで、シリアル化の前のオブジェクトの後始末処理 などを行います。同様に、unserialize() で オブジェクトを復元した際にはメンバ関数 __unserialize() または __wakeup() がコールされます。

注意:

オブジェクトの private メンバは、メンバ名の前にクラス名がつきます。 また protected メンバはメンバ名の前に '*' がつきます。 前に付加されるこれらの値の前後には null バイトがついています。

戻り値

value の保存可能なバイトストリーム表現を含む文字列を返します。

これはバイナリ文字列であり、null バイトを含む可能性もあることに注意しましょう。 保存したり利用したりするときも、null バイトが含まれることを想定しておかないといけません。 たとえば、serialize() の出力をデータベースに格納するときには、 通常は CHAR 型や TEXT 型ではなく BLOB 型を使わないといけません。

例

例1 serialize() の例

<?php
// $session_data はカレントユーザーのセッション情報を含む多次元配列を
// 保持しています。リクエストの最後にこれをデータベースに保存するために
// serialize() を使用します。

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, array_reverse($sqldata))) {
/* 何か問題があったようです.. */
}
}
?>

注意

注意:

PHP の組み込みオブジェクトの多くはシリアル化できないことに注意しましょう。しかし、 Serializable インターフェイスを実装しているか、あるいはマジックメソッド __serialize()/__unserialize() または __sleep()/__wakeup() を実装していればシリアル化することができます。 内部クラスがこれらの要件を満たしていない場合は、確実にシリアル化することはできません。

この規則には歴史的な例外もあり、 上記のインターフェイスやマジックメソッドを実装していない内部オブジェクトの中にも シリアル化可能なものがあります。

警告

serialize() でオブジェクトをシリアル化するときに、 名前空間を指定したクラスの名前の先頭にあるバックスラッシュは含めません。これは互換性を高めるためです。

参考

  • unserialize() - 保存用表現から PHP の値を生成する
  • var_export() - 変数の文字列表現を出力または返す
  • json_encode() - 値を JSON 形式にして返す
  • オブジェクトのシリアル化
  • __sleep()
  • __wakeup()
  • __serialize()
  • __unserialize()

User Contributed Notes

mark at bvits dot co dot uk 09-Feb-2023 01:05
There is a type not mentioned in the user notes so far, 'E'.  This is the newer Enum class that can be utilised:

login_security|E:25:"Permission:manageClient"
frost at easycast dot ru 23-Sep-2013 10:56
Closures cannot be serialized:
<?php
$func = function () {echo 'hello!';};
$func(); // prints "hello!"

$result = serialize($func);  // Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed'
?>
nh at ngin dot de 21-Jan-2013 09:59
Serializing floating point numbers leads to weird precision offset errors:

<?php

echo round(96.670000000000002, 2);
// 96.67

echo serialize(round(96.670000000000002, 2));
// d:96.670000000000002;

echo serialize(96.67);
// d:96.670000000000002;

?>

Not only is this wrong, but it adds a lot of unnecessary bulk to serialized data. Probably better to use json_encode() instead (which apparently is faster than serialize(), anyway).
Andrew B 05-Sep-2012 09:42
When you serialize an array the internal pointer will not be preserved. Apparently this is the expected behavior but was a bit of a gotcha moment for me. Copy and paste example below.

<?php
//Internal Pointer will be 2 once variables have been assigned.
$array = array();
$array[] = 1;
$array[] = 2;
$array[] = 3;

//Unset variables. Internal pointer will still be at 2.
unset($array[0]);
unset($array[1]);
unset($array[2]);

//Serialize
$serializeArray = serialize($array);

//Unserialize
$array = unserialize($serializeArray);

//Add a new element to the array
//If the internal pointer was preserved, the new array key should be 3.
//Instead the internal pointer has been reset, and the new array key is 0.
$array[] = 4;

//Expected Key - 3
//Actual Key - 0
echo "<pre>" , print_r($array, 1) , "</pre>";
?>
Anonymous 28-Feb-2012 07:44
Please! please! please! DO NOT serialize data and place it into your database. Serialize can be used that way, but that's missing the point of a relational database and the datatypes inherent in your database engine. Doing this makes data in your database non-portable, difficult to read, and can complicate queries. If you want your application to be portable to other languages, like let's say you find that you want to use Java for some portion of your app that it makes sense to use Java in, serialization will become a pain in the buttocks. You should always be able to query and modify data in the database without using a third party intermediary tool to manipulate data to be inserted.

I've encountered this too many times in my career, it makes for difficult to maintain code, code with portability issues, and data that is it more difficult to migrate to other RDMS systems, new schema, etc. It also has the added disadvantage of making it messy to search your database based on one of the fields that you've serialized.

That's not to say serialize() is useless. It's not... A good place to use it may be a cache file that contains the result of a data intensive operation, for instance. There are tons of others... Just don't abuse serialize because the next guy who comes along will have a maintenance or migration nightmare.
egingell at sisna dot com 15-May-2006 05:12
<?
/*
Anatomy of a serialize()'ed value:

 String
 s:size:value;

 Integer
 i:value;

 Boolean
 b:value; (does not store "true" or "false", does store '1' or '0')

 Null
 N;

 Array
 a:size:{key definition;value definition;(repeated per element)}

 Object
 O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}

 String values are always in double quotes
 Array keys are always integers or strings
    "null => 'value'" equates to 's:0:"";s:5:"value";',
    "true => 'value'" equates to 'i:1;s:5:"value";',
    "false => 'value'" equates to 'i:0;s:5:"value";',
    "array(whatever the contents) => 'value'" equates to an "illegal offset type" warning because you can't use an
    array as a key; however, if you use a variable containing an array as a key, it will equate to 's:5:"Array";s:5:"value";',
     and
    attempting to use an object as a key will result in the same behavior as using an array will.
*/
?>
MC_Gurk at gmx dot net 03-Jan-2006 07:44
If you are going to serialie an object which contains references to other objects you want to serialize some time later, these references will be lost when the object is unserialized.
The references can only be kept if all of your objects are serialized at once.
That means:

$a = new ClassA();
$b = new ClassB($a); //$b containes a reference to $a;

$s1=serialize($a);
$s2=serialize($b);

$a=unserialize($s1);
$b=unserialize($s2);

now b references to an object of ClassA which is not $a. $a is another object of Class A.

use this:
$buf[0]=$a;
$buf[1]=$b;
$s=serialize($buf);
$buf=unserialize($s);
$a=$buf[0];
$b=$buf[1];

all references are intact.


変数の型をセットする

  • ≪ serialize
  • strval ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の型をセットする

settype

(PHP 4, PHP 5, PHP 7, PHP 8)

settype — 変数の型をセットする

説明

settype(mixed &$var, string $type): bool

変数 var の型を type にセットします。

パラメータ

var

変換する変数。

type

type の値は以下の命令のいずれかです。

  • "boolean" または "bool"
  • "integer" または "int"
  • "float" または "double"
  • "string"
  • "array"
  • "object"
  • "null"

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 settype() の例

<?php
$foo = "5bar"; // string
$bar = true; // boolean

settype($foo, "integer"); // ここでは、$foo は 5です (整数)
settype($bar, "string"); // ここでは、$bar は "1" です (文字列)
?>

注意

注意:

"int" の最大値は PHP_INT_MAX です。

参考

  • gettype() - 変数の型を取得する
  • 型キャスト
  • 型の相互変換

User Contributed Notes

DarkMaster 17-Apr-2021 07:08
<?php
/*
This example works 4x faster than settype() function in PHP-CGI 5.4.13 and
8x faster in PHP-CGI 7.1.3(x64) for windows
*/

$v = '12345';

$v = (int)$v;
$v = (string)$v;

?>
geoffsmiths at hotmail dot com 24-Dec-2019 10:23
Please note:

When using settype to convert indexed arrays to objects, the properties of the typed object will be integers:

A brief example:

$a = ['1', '2'];

settype($a, 'object');

var_dump($a);

// output
object(stdClass)#1 (2) {
  ["0"]=>
  string(1) "1"
  ["1"]=>
  string(1) "2"
}
Anonymous 04-Jan-2019 01:41
If you attempt to convert the special $this variable from an instance method (only in classes) :
* PHP will silently return TRUE and leave $this unchanged if the type was 'bool', 'array', 'object' or 'NULL'
* PHP will generate an E_NOTICE if the type was 'int', 'float' or 'double', and $this will not be casted
* PHP will throw a catchable fatal error when the type is 'string' and the class does not define the __toString() method
Unless the new variable type passed as the second argument is invalid, settype() will return TRUE. In all cases the object will remain unchanged.
<?php
    // This was tested with PHP 7.2
    class Foo {
        function test() {
            printf("%-20s %-20s %s\n", 'Type', 'Succeed?', 'Converted');

            // settype() should throw a fatal error, as $this cannot be re-assigned
            printf("%-20s %-20s %s\n", 'bool', settype($this, 'bool'), print_r($this, TRUE));
            printf("%-20s %-20s %s\n", 'int', settype($this, 'int'), print_r($this, TRUE));
            printf("%-20s %-20s %s\n", 'float', settype($this, 'float'), print_r($this));
            printf("%-20s %-20s %s\n", 'array', settype($this, 'array'), print_r($this, TRUE));
            printf("%-20s %-20s %s\n", 'object', settype($this, 'object'), print_r($this, TRUE));
            printf("%-20s %-20s %s\n", 'unknowntype', settype($this, 'unknowntype'), print_r($this, TRUE));
            printf("%-20s %-20s %s\n", 'NULL', settype($this, 'NULL'), print_r($this, TRUE));
            printf("%-20s %-20s %s\n", 'string', settype($this, 'string'), print_r($this, TRUE));
        }
    }
    $a = new Foo();
    $a->test();
?>
Here is the result :
Type                 Succeed?             Converted
bool                 1                    Foo Object
(
)

Notice: Object of class Foo could not be converted to int in C:\php\examples\oop-settype-this.php on line 9

int                  1                    Foo Object
(
)

Notice: Object of class Foo could not be converted to float in C:\php\examples\oop-settype-this.php on line 10

float                1                    Foo Object
(
)

array                1                    Foo Object
(
)

object               1                    Foo Object
(
)

Warning: settype(): Invalid type in C:\php\examples\oop-settype-this.php on line 14

unknowntype                               Foo Object
(
)

NULL                 1                    Foo Object
(
)

Catchable fatal error: Object of class Foo could not be converted to string in C:\php\examples\oop-settype-this.php on line 15

If the class Foo implements __toString() :
<?php
    class Foo {
        // ...
        function __toString() {
            return 'Foo object is awesome!';
        }
        // ...
    }
?>
So the first code snippet will not generate an E_RECOVERABLE_ERROR, but instead print the same string as for the other types, and not look at the one returned by the __toString() method.

Hope this helps !  :)
Skayo 26-Jul-2017 08:59
$foo = "1";
settype($foo, "bool");
var_dump($foo); // Outputs: bool(true)

$bar = "0";
settype($bar, "bool");
var_dump($bar); // Outputs: bool(false)
marjune 10-Nov-2016 05:31
any digit except 0 or -0 are considered true in boolean, and any string except '0' or '' are also considered true.

<?php

$foo = '0';
settype($foo, 'boolean');
var_dump($foo); // false

$foo = 0;
settype($foo, 'boolean');
var_dump($foo); // false
Special Notes 26-Feb-2012 12:00
Note that you can't use this to convert a string 'true' or 'false' to a boolean variable true or false as a string 'false' is a boolean true. The empty string would be false instead...

<?php
$var = "true";
settype($var, 'bool');
var_dump($var); // true

$var = "false";
settype($var, 'bool');
var_dump($var); // true as well!

$var = "";
settype($var, 'bool');
var_dump($var); // false
?>
Chris Sullins 18-Apr-2010 11:59
settype() has some really strange, potentially buggy behavior.

As noted by Michael Benedict, using settype() on a variable will initialize that variable.  What is stranger is that using settype() on an uninitialized variable that you are treating as an array or object will also initialize the variable.  So:

<?php
settype($foo->bar,"integer"); // stdClass Object ( [test] => 0 )
?>

This works for a chain of any length: $foo->bar['baz']->etc

Next we look at what happens if $foo is already set.

<?php
$foo = false;
settype($foo->bar,"integer"); // stdClass Object ( [test] => 0 )
?>

In and of itself, this wouldn't be problematic.  It might even make sense.  But in all other cases where $foo is defined, even if (boolean) $foo === false, it will throw an error unless $foo->bar is valid (i.e. $foo is an object already).

<?php
$foo = true;
settype($foo->bar,"integer"); // Notice: Trying to get property of non-object
?>
NWdev 17-Nov-2008 09:38
In trying to convert an array of strings to an array of ints,
I attempted to use settype with array_walk.

<?php
//$numArray is generated by another process
$numArray = array('13','14','33');

var_dump($numArray);

//my conversion function
function str_to_int($val){
  //remember: settype($x, 'int') returns boolean (1=success, 0=failure)
  //--> so return $x to return new value
    settype($val,'int');
    echo "<br />gettype = ".gettype($val)."<br />";
    return $val;
}

array_walk($numArray,'str_to_int');

var_dump($numArray);
?>

The var_dumps both return the following:
<?php
array(3) { [0]=> string(2) "13" [1]=> string(2) "14" [2]=> string(2) "33" }
?>

The gettype echo will show the value as an integer.

So it seems that settype($val,'int') makes the conversion,
but the function return value remains a string.
Since settype returns a boolean, using
<?php $val = settype($val, 'int'); ?>
is not a option.

I resolved my array value conversion using this instead:
<?php
$numArray =
      array_map(create_function('$value', 'return (int)$value;'),$numArray);
?>
Thanks to the posting here:
http://usrportage.de/archives/
808-Convert-an-array-of-strings-into-an-array-of-integers.html

Perhaps this will save someone else spinning wheels a bit.

Also thanks to robin at barafranca dot com for
pointing out the boolean return value of settype.
robin at barafranca dot com 05-Mar-2008 04:20
Just a quick note, as this caught me out very briefly:

settype() returns bool, not the typecasted variable - so:

$blah = settype($blah, "int"); // is wrong, changes $blah to 0 or 1
settype($blah, "int"); // is correct

Hope this helps someone else who makes a mistake.. ;)
ludvig dot ericson gmail.dot com 09-Apr-2006 08:36
To matt:
This function accepts a paremeter, which does not imply you using hardcoded stuff, instead you can let the user choose! \o/

As a part of a framework or something.

Plus, you can probably call this with call_user_func
matt at mattsoft dot net 06-Dec-2005 09:49
using (int) insted of the settype function works out much better for me. I have always used it. I personally don't see where settype would ever come in handy.
Michael Benedict 29-Oct-2005 10:55
note that settype() will initialize an undefined variable.  Therefore, if you want to preserve type and value, you should wrap the settype() call in a call to isset().

<?php
settype($foo, "integer");
echo("|$foo|");
?>

prints "|0|", NOT "||".

To get the latter, use:
<?php
if(isset($foo)) settype($foo, "integer");
echo("|$foo|");
?>
nospamplease at veganismus dot ch 22-Jul-2005 07:38
you must note that this function will not set the type permanently! the next time you set the value of that variable php will change its type as well.
reinier_deblois at hotmail dot com 13-Mar-2005 09:18
Instead of settype you could use:
<?php

$int=593;  // $int is a integer

$int.="";   // $int is now a string
memandeemail at gmail dot com 09-Dec-2004 05:17
/**
    * @return bool
    * @param array[byreference] $values
    * @desc Convert an array or any value to Escalar Object [not tested in large scale]
    */
    function setobject(&$values) {
        $values = (object) $values;
        foreach ($values as $tkey => $val) {
            if (is_array($val)) {
                setobject($val);
                $values->$tkey = $val;
            }
        }
        return (bool) $values;
    }
sdibb at myway dot com 06-Sep-2003 10:03
Using settype is not the best way to convert a string into an integer, since it will strip the string wherever the first non-numeric character begins.  The function intval($string) does the same thing.

If you're looking for a security check, or to strip non-numeric characters (such as cleaning up phone numbers or ZIP codes),  try this instead:

<?
     $number=ereg_replace("[^0-9]","",$number);
?>
ns at canada dot com 05-May-2000 04:38
This settype() behaviour seems consistent to me. Quoting two sections from the manual:

"When casting from a scalar or a string variable to an array, the variable will become the first element of the array: "
<pre>
2 $var = 'ciao';
3 $arr = (array) $var;
4 echo $arr[0];  // outputs 'ciao'
</pre>

And if (like your code above) you do a settype on an empty variable, you'll end up with a one element array with an empty (not unset!) first element. So appeanding to it will start appending at index 1. As for why reset() doesn't do anything:

"When you assign a value to an array variable using empty brackets, the value will be added onto the end of the array."

It doesn't matter where the array counter is; values are added at the end, not at the counter.


変数の文字列としての値を取得する

  • ≪ settype
  • unserialize ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の文字列としての値を取得する

strval

(PHP 4, PHP 5, PHP 7, PHP 8)

strval — 変数の文字列としての値を取得する

説明

strval(mixed $value): string

value の string としての値を 返します。文字列への変換の詳細については、string の ドキュメントを参照ください。

この関数は、戻り値の書式設定は行いません。数値を文字列形式で書式設定したい場合は sprintf() あるいは number_format() を参照ください。

パラメータ

value

文字列に変換したい変数。

value には、任意のスカラー型、null および __toString() メソッドを実装した object を使うこともできます。 strval() は配列に対して使うことはできず、 __toString() メソッドを実装していないオブジェクトに対しても使うことはできません。

戻り値

value の文字列値を返します。

例

例1 マジックメソッド __toString() を使う strval() の例

<?php
class StrValTest
{
public function __toString()
{
return __CLASS__;
}
}

// 'StrValTest' と表示します
echo strval(new StrValTest);
?>

参考

  • boolval() - 変数の boolean としての値を取得する
  • floatval() - 変数の float 値を取得する
  • intval() - 変数の整数としての値を取得する
  • settype() - 変数の型をセットする
  • sprintf() - フォーマットされた文字列を返す
  • number_format() - 数字を千の位毎にグループ化してフォーマットする
  • 型の相互変換
  • __toString()

User Contributed Notes

fabrice at vignals dot com 17-Dec-2021 10:01
My logic is stress.

bolean is true OR false;

<?= strval( true); ?> //output: 1

You must use:
<?= var_export( true ) ?> //output: true
Mark Clements 02-Jun-2016 01:17
Some notes about how this function has changed over time, with regards the following statement:

> You cannot use strval() on arrays or on objects that
> do not implement the __toString() method.

== Arrays ==

In PHP 5.3 and below, strval(array(1, 2, 3)) would return the string "Array" without any sort of error occurring.

From 5.4 and above, the return value is unchanged but you will now get a notice-level error: "Array to string conversion".

== Objects ==

For objects that do not implement __toString(), the behaviour has varied:

PHP 4: "Object"
PHP 5 < 5.2: "Object id #1" (number obviously varies)
PHP >= 5.2: Catchable fatal error:  Object of class X could not be converted to string
Hayley Watson 21-Aug-2007 08:53
As of PHP 5.2, strval() will return the string value of an object, calling its __toString() method to determine what that value is.
NyctoFixer at gmail dot com 11-Jun-2007 12:19
As of PHP 5.1.4 (I have not tested it in later versions), the strval function does not attempt to invoke the __toString method when it encounters an object. This simple wrapper function will handle this circumstance for you:

<?

/**
 * Returns the string value of a variable
 *
 * This differs from strval in that it invokes __toString if an object is given
 * and the object has that method
 */
function stringVal ($value)
{
    // We use get_class_methods instead of method_exists to ensure that __toString is a public method
    if (is_object($value) && in_array("__toString", get_class_methods($value)))
        return strval($value->__toString());
    else
        return strval($value);
}

?>
kendsnyder+phpnet at gmail dot com 01-Jun-2007 10:08
The only way to convert a large float to a string is to use printf('%0.0f',$float); instead of strval($float); (php 5.1.4).

// strval() will lose digits around pow(2,45);
echo pow(2,50); // 1.1258999068426E+015
echo (string)pow(2,50); // 1.1258999068426E+015
echo strval(pow(2,50)); // 1.1258999068426E+015

// full conversion
printf('%0.0f',pow(2,50)); // 112589906846624
echo sprintf('%0.0f',pow(2,50)); // 112589906846624
portos_ze_retour at hotmail dot fr 10-Mar-2006 08:15
In complement to Tom Nicholson's contribution, here is the french version (actually it's possible to change the language, but you should check the syntax ;) )

function int_to_words($x) {
   global $nwords;

   if(!is_numeric($x))
     $w = '#';
   else if(fmod($x, 1) != 0)
     $w = '#';
   else {
     if($x < 0) {
         $w = $nwords['minus'].' ';
         $x = -$x;
     } else
         $w = '';
     // ... now $x is a non-negative integer.

     if($x < 21)  // 0 to 20
         $w .= $nwords[$x];
     else if($x < 100) {  // 21 to 99
         $w .= $nwords[10 * floor($x/10)];
         $r = fmod($x, 10);
         if($r > 0)
           $w .= '-'. $nwords[$r];
     } else if($x < 1000) {  // 100 to 999
         $w .= $nwords[floor($x/100)] .' '.$nwords['hundred'];
         $r = fmod($x, 100);
         if($r > 0)
           $w .= ' '.$nwords['separator'].' '. int_to_words($r);
     } else if($x < 1000000) {  // 1000 to 999999
         $w .= int_to_words(floor($x/1000)) .' '.$nwords['thousand'];
         $r = fmod($x, 1000);
         if($r > 0) {
           $w .= ' ';
           if($r < 100)
               $w .= $nwords['separator'].' ';
           $w .= int_to_words($r);

         }
     } else {    //  millions
         $w .= int_to_words(floor($x/1000000)) .' '.$nwords['million'];
         $r = fmod($x, 1000000);
         if($r > 0) {
           $w .= ' ';
           if($r < 100)
               $word .= $nwords['separator'].' ';
           $w .= int_to_words($r);
         }
     }
   }
   return $w;
}

 // Usage in English
$nwords = array( "zero", "one", "two", "three", "four", "five", "six", "seven",
                   "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                   "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
                   "nineteen", "twenty", 30 => "thirty", 40 => "forty",
                   50 => "fifty", 60 => "sixty", 70 => "seventy", 80 => "eighty",
                   90 => "ninety" , "hundred" => "hundred", "thousand"=> "thousand", "million"=>"million",
                   "separator"=>"and", "minus"=>"minus");

echo 'There are currently '. int_to_words(-120223456) . ' members logged on.<br>';

 //Utilisation en Francais
$nwords = array( "zero", "un", "deux", "trois", "quatre", "cinq", "six", "sept",
                   "huit", "neuf", "dix", "onze", "douze", "treize",
                   "quatorze", "quinze", "seize", "dix-sept", "dix-huit",
                   "dix-neuf", "vingt", 30 => "trente", 40 => "quarante",
                   50 => "cinquante", 60 => "soixante", 70 => "soixante-dix", 80 => "quatre-vingt",
                   90 => "quatre-vingt-dix" , "hundred" => "cent", "thousand"=> "mille", "million"=>"million",
                   "separator"=>"", "minus"=>"moins");

echo 'Il y a actuellement '. int_to_words(-120223456) . ' membres connectes.<br>';
php at ianco dot co dot uk 07-Oct-2005 04:36
I can't help being surprised that

(string)"0" == (string)"0.00"

evaluates to true. It's the same with strval and single quotes.
=== avoids it.

Why does it matter? One of my suppliers, unbelievably, uses 0 to mean standard discount and 0.00 to mean no discount in their stock files.
Steve Ball 08-Sep-2005 07:18
It seems that one is being treated as an unsigned large int (32 bit), and the other as a signed large int (which has rolled over/under).

2326201276 - (-1968766020) =  4294967296.
Tom Nicholson 28-Apr-2004 09:13
If you want to convert an integer into an English word string, eg. 29 -> twenty-nine, then here's a function to do it.

Note on use of fmod()
  I used the floating point fmod() in preference to the % operator, because % converts the operands to int, corrupting values outside of the range [-2147483648, 2147483647]

I haven't bothered with "billion" because the word means 10e9 or 10e12 depending who you ask.

The function returns '#' if the argument does not represent a whole number.

<?php
$nwords = array( "zero", "one", "two", "three", "four", "five", "six", "seven",
                   "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                   "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
                   "nineteen", "twenty", 30 => "thirty", 40 => "forty",
                   50 => "fifty", 60 => "sixty", 70 => "seventy", 80 => "eighty",
                   90 => "ninety" );

function int_to_words($x) {
   global $nwords;

   if(!is_numeric($x))
      $w = '#';
   else if(fmod($x, 1) != 0)
      $w = '#';
   else {
      if($x < 0) {
         $w = 'minus ';
         $x = -$x;
      } else
         $w = '';
      // ... now $x is a non-negative integer.

      if($x < 21)   // 0 to 20
         $w .= $nwords[$x];
      else if($x < 100) {   // 21 to 99
         $w .= $nwords[10 * floor($x/10)];
         $r = fmod($x, 10);
         if($r > 0)
            $w .= '-'. $nwords[$r];
      } else if($x < 1000) {   // 100 to 999
         $w .= $nwords[floor($x/100)] .' hundred';
         $r = fmod($x, 100);
         if($r > 0)
            $w .= ' and '. int_to_words($r);
      } else if($x < 1000000) {   // 1000 to 999999
         $w .= int_to_words(floor($x/1000)) .' thousand';
         $r = fmod($x, 1000);
         if($r > 0) {
            $w .= ' ';
            if($r < 100)
               $w .= 'and ';
            $w .= int_to_words($r);
         }
      } else {    //  millions
         $w .= int_to_words(floor($x/1000000)) .' million';
         $r = fmod($x, 1000000);
         if($r > 0) {
            $w .= ' ';
            if($r < 100)
               $word .= 'and ';
            $w .= int_to_words($r);
         }
      }
   }
   return $w;
}

?>

Usage:
<?php
echo 'There are currently '. int_to_words($count) . ' members logged on.';
?>


保存用表現から PHP の値を生成する

  • ≪ strval
  • unset ≫
  • PHP Manual
  • 変数操作 関数
  • 保存用表現から PHP の値を生成する

unserialize

(PHP 4, PHP 5, PHP 7, PHP 8)

unserialize — 保存用表現から PHP の値を生成する

説明

unserialize(string $data, array $options = []): mixed

unserialize() は、シリアル化された変数を PHP の値に戻す変換(アンシリアライズ)を行います。

警告

allowed_classes の options の値にかかわらず、 ユーザーからの入力をそのまま unserialize() に渡してはいけません。 アンシリアライズの時には、オブジェクトのインスタンス生成やオートローディングなどで コードが実行されることがあり、悪意のあるユーザーがこれを悪用するかもしれないからです。 シリアル化したデータをユーザーに渡す必要がある場合は、安全で標準的なデータ交換フォーマットである JSON などを使うようにしましょう。 json_decode() および json_encode() を利用します。

外部に保存されているシリアル化されたデータをアンシリアライズする必要がある場合は、 hash_hmac() を使ったデータの検証を検討しましょう。 他者によるデータの改ざんがないことを確かめるためです。

パラメータ

data

シリアル化された文字列。

もしアンシリアライズする変数がオブジェクトの場合、 オブジェクトが無事再作成された後、PHP は自動的にメンバ関数 __unserialize() または __wakeup() (存在していれば) をコールしようとします。

注意: unserialize_callback_func ディレクティブ

コールバック関数を設定することが可能です。(不完全な object __PHP_Incomplete_Class を得ることを防ぐため) コールバック関数は、非シリアル化する際に未定義のクラスをインスタ ンス化する必要がある場合にコールされます。 'unserialize_callback_func'を定義するためには、 php.ini, ini_set(), .htaccess を使用し てください。未定義のクラスをインスタンス化する度に、コールバック関 数がコールされます。この機能を無効とするには、 単純にこの設定を空にしてください。

options

unserialize() に連想配列で渡すオプション。

有効なオプション
名前 | 型 | 説明
allowed_classes | mixed | 受け付けるクラス名の配列を指定します。あらゆるクラスを拒否する場合は false、あらゆるクラスを受け付ける場合は true を指定します。 このオプションを指定しているときに、もし unserialize() が受け付け対象外のクラスのオブジェクトに遭遇すると、 そのオブジェクトを __PHP_Incomplete_Class のインスタンスに変換します。 このオプションを省略すると、true を指定したのと同じ意味になります。 つまり、PHP はあらゆるクラスのオブジェクトをインスタンス化しようとします。
max_depth | int | アンシリアライズ処理の間に許される、 データ構造の再帰の深さの最大値を設定します。 これは、スタックオーバーフローを防ぐためのものです。 デフォルトの深さの最大値は 4096 であり、 0 に設定すると、 この制限を無効にすることができます。

戻り値

変換された値が返されます。その値は、 bool, int, float, string, array, object のいずれかとなります。

渡された文字列が復元できなかった場合、false を返して E_WARNING を発生します。

エラー / 例外

オブジェクトは、 アンシリアライズを実行するハンドラで Throwable をスローしても構いません。

変更履歴

バージョン | 説明
8.3.0 | 渡された文字列が復元できない場合、 E_WARNING が発生するようになりました。 これより前のバージョンでは、E_NOTICE が発生していました。
7.4.0 | options に max_depth が追加されました。 これは、アンシリアライズ処理の間に許される、 データ構造の再帰の深さの最大値を設定するものです。
7.1.0 | options の allowed_classes 要素は、 型を厳密に調べるようになりました。 つまり、array または bool 以外の型が与えられると、 unserialize() 関数は false を返し、 E_WARNING レベルの警告を発生させます。

例

例1 unserialize() の例

<?php
// ここで、データベースから $session_data にセッションデータをロード
// するために unserialize() を使用します。
// この例は、serialize() で記述された例を補足するものです。

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata) || !odbc_fetch_into($stmt, $tmp)) {
// 実行または取得が失敗した場合、空の配列で初期化します
$session_data = array();
} else {
// tmp[0] にシリアル化されたデータを保持している必要があります。
$session_data = unserialize($tmp[0]);
if (!is_array($session_data)) {
// 何か問題があったため、空の配列で初期化します。
$session_data = array();
}
}
?>

例2 unserialize_callback_func の例

<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';

ini_set('unserialize_callback_func', 'mycallback'); // 独自のコールバック関数を設定する

function mycallback($classname)
{
// クラスが定義されているファイルをインクルードするだけです。
// どのクラス定義が必要になるのかを $classname で判断します。
}
?>

注意

警告

エラーやシリアライズされた false 値をアンシリアライズする場合、 false が返されます。この特殊なケースは data を serialize(false) で比較する、もしくは E_NOTICE をキャッチすることで区別することができます。

参考

  • json_encode() - 値を JSON 形式にして返す
  • json_decode() - JSON 文字列をデコードする
  • hash_hmac() - HMAC 方式を使用してハッシュ値を生成する
  • serialize() - 値の保存可能な表現を生成する
  • クラスのオートローディング
  • unserialize_callback_func
  • unserialize_max_depth
  • __wakeup()
  • __serialize()
  • __unserialize()

User Contributed Notes

OscarZarrus 20-Oct-2022 09:34
For those who are looking for an efficient solution for handling controversial "FALSE", they can use this function which in case of non-unserializable string, instead of a "FALSE", throws an Exception. Vice versa it returns the unserialized variable.
<?php
    /**
     * @param string $serializedString
     * @param array $options
     * @return mixed
     * @throws Exception
     */
    function UnSerialize(string $serializedString, array $options = []) {
        $_unserialized = @unserialize($serializedString, $options);
        if ($serializedString === serialize(false) || $_unserialized !== false){
            return $_unserialized;
        }
        throw new Exception("Non-unserializable string");

    }

?>
karsten at dambekalns dot de 27-Nov-2020 07:53
Keep in mind that the allowed_classes does not use inheritance, i.e. allowing an interface is not possible and sub-classes won't pass the check. See https://3v4l.org/tdHfl
hadley8899 at gmail dot com 13-Jan-2020 01:58
For the people who are getting the error

PHP Notice:  unserialize(): Error at offset 191 of 285 bytes in ...

and are getting the data from a database, Make sure that you have the database set the the correct encoding, I had the database set as latin1_swedish_ci and all of the data looked perfect, Infact when i copied it into a online unserialize it worked fine. I changed the collation to utf8mb4_unicode_ci and all worked fine.
Anonymous 11-Mar-2019 06:36
If serialize() is the answer, you're almost certainly asking the wrong question.

JSON is widely available. The only thing it does not do, is the very thing that makes serialization immensely dangerous. All it takes is a crafty hacker to pass a crafted payload to a supposedly 'secured' serialize call, for a database driver to be overwritten with malicious code, for example.

Recreate the object. Normally. With actual data, and a source file, not with serialize. To do otherwise is laziness bordering on malice.
me+phpnet at unreal4u dot com 30-Oct-2017 03:30
Just some reminder which may save somebody some time regarding the `$options` array:

Say you want to be on the safe side and not allow any objects to be unserialized... My first thought was doing the following:

<?php
$lol = unserialize($string, false);
// This will generate:
// Warning: unserialize() expects parameter 2 to be array, boolean given
?>

The correct way of doing this is the following:
<?php
$lol = unserialize($string, ['allowed_classes' => false]);
?>

Hope it helps somebody!
bjd 02-Jan-2017 12:49
Talk on Exploiting PHP7 Unserialize here: https://media.ccc.de/v/33c3-7858-exploiting_php7_unserialize
m.m.j.kronenburg 06-Sep-2016 09:52
You can use the following code to use the php 7 unserialize function in php 5.3 and upwards. This adds the $option argument.

<?php

namespace
{

/**
 * PHP 7 unserialize function for PHP 5.3 upwards.
 * Added the $option argument (allowed_classes).
 * See php unserialize manual for more detail.
 **/
function php7_unserialize($str, $options = array())
{
  if(version_compare(PHP_VERSION, '7.0.0', '>='))
  { return unserialize($str, $options); }

  $allowed_classes = isset($options['allowed_classes']) ?
    $options['allowed_classes'] : true;
  if(is_array($allowed_classes) || !$allowed_classes)
  {
    $str = preg_replace_callback(
      '/(?=^|:)(O|C):\d+:"([^"]*)":(\d+):{/',
      function($matches) use ($allowed_classes)
      {
        if(is_array($allowed_classes) &&
          in_array($matches[2], $allowed_classes))
        { return $matches[0]; }
        else
        {
          return $matches[1].':22:"__PHP_Incomplete_Class":'.
            ($matches[3] + 1).
            ':{s:27:"__PHP_Incomplete_Class_Name";'.
            serialize($matches[2]);
        }
      },
      $str
    );
  }
  unset($allowed_classes);
  return unserialize($str);
}

} // namespace

namespace my_name_space
{
  /**
   * Use the new php7 unserialize in your namespace without
   * renaming all unserialize(...) function calls to
   * php7_unserialize(...).
   **/
  function unserialize($str, $options = array())
  { return php7_unserialize($str, $options); }
}

?>
chris at pollett dot org 02-Jul-2015 03:28
When you serialize an object of a class from a particular namespace, the namespace is recorded as part of the serialization. If you decide to change this namespace's name, it can be hard to read in old serialized objects. I.e., suppose you had serialized an object of type foo\A, you change the namespace of your project to goo but otherwise leave the class definition of A unchanged. You would like to be able to unserialize the object as goo\A, instead unserialization will only create a partial object. To fix this in the case where you don't have nested objects in your class definition, you can use the following simple rename function:
/**
 * Used to change the namespace of a serialized php object (assumes doesn't
 * have nested subobjects)
 *
 * @param string $class_name new fully qualified name with namespace
 * @param string $object_string serialized object
 *
 * @return string serialized object with new name
 */
function renameSerializedObject($class_name, $object_string)
{
    /*  number of digits in the length of name of the object needs to be
        less than 12 digits (probably more like 4) for this to work.
    */
    $name_length = intval(substr($object_string, 2, 14));
    $name_space_info_length = strlen("O:".$name_length.":") +
        $name_length + 2; // 2 for quotes;
    $object_string = 'O:' .
        strlen($class_name) . ':"'. $class_name.'"' .
        substr($object_string, $name_space_info_length);
    return $object_string;
}
ErnestV 03-Aug-2013 01:05
Just a note - if the serialized string contains a reference to a class that cannot be instantiated (e.g. being abstract) PHP will immediately die with a fatal error. If the unserialize() statement is preceded with a '@' to avoid cluttering the logs with warns or notices there will be absolutely no clue as to why the script stopped working. Cost me a couple of hours...
Ray.Paseur often uses Gmail 26-Jul-2013 01:41
In the Classes and Objects docs, there is this: In order to be able to unserialize() an object, the class of that object needs to be defined.

Prior to PHP 5.3, this was not an issue.  But after PHP 5.3 an object made by SimpleXML_Load_String() cannot be serialized.  An attempt to do so will result in a run-time failure, throwing an exception.  If you store such an object in $_SESSION, you will get a post-execution error that says this:

Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'SimpleXMLElement' is not allowed' in [no active file]:0 Stack trace: #0 {main} thrown in [no active file] on line 0

The entire contents of the session will be lost.  Hope this saves someone some time!

<?php // RAY_temp_ser.php
error_reporting(E_ALL);
session_start();
var_dump($_SESSION);
$_SESSION['hello'] = 'World';
var_dump($_SESSION);

// AN XML STRING FOR TEST DATA
$xml = '<?xml version="1.0"?>
<families>
  <parent>
    <child index="1" value="Category 1">Child One</child>
  </parent>
</families>';

// MAKE AN OBJECT (GIVES SimpleXMLElement)
$obj = SimpleXML_Load_String($xml);

// STORE THE OBJECT IN THE SESSION
$_SESSION['obj'] = $obj;
suman dot jis at gmail dot com 13-Mar-2012 09:12
I was getting unserialize()  Error at offset error.

If you face similar problem  then use the following procedure

$auctionDetails = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $dataArr[$i]['auction_details'] );
$auctionDetails = unserialize($auctionDetails);
walf 22-Aug-2011 08:22
a replacement for unserialize that returns whether it worked and populates the unserialized variable by reference:
<?php
function funserialize($serialized, &$into) {
    static $sfalse;
    if ($sfalse === null)
        $sfalse = serialize(false);
    $into = @unserialize($serialized);
    return $into !== false || rtrim($serialized) === $sfalse;//whitespace at end of serialized var is ignored by PHP
}

$s_foo = 'b:0;';
var_dump(funserialize($s_foo, $foo), $foo);

$s_bar = 'bar';
var_dump(funserialize($s_bar, $bar), $bar);

$s_foo = 'a:0:{};';
var_dump(funserialize($s_foo, $foo), $foo);

?>
gives:

bool(true)
bool(false)

bool(false)
bool(false)

bool(true)
array(0) {
}
MBa 02-Aug-2011 03:49
To check if a string is serialized:

$blSerialized=(@unserialize($sText)||$sText=='b:0;');
chris at colourlovers dot com 16-Jun-2011 05:31
Anyone having trouble serializing data with SimpleXMLElement objects stored within it, check this out:

This will traverse $data looking for any children which are instances of SimpleXMLElement, and will run ->asXML() on them, turning them into a string and making them serializable. Other data will be left alone.

<?php
function exportNestedSimpleXML($data) {
    if (is_scalar($data) === false) {
        foreach ($data as $k => $v) {
            if ($v instanceof SimpleXMLElement) {
                $v = str_replace("&#13;","\r",$v->asXML());
            } else {
                $v = exportNestedSimpleXML($v);
            }

            if (is_array($data)) {
                $data[$k] = $v;
            } else if (is_object($data)) {
                $data->$k = $v;
            }
        }
    }

    return $data;
}

$data = array (
    "baz" => array (
        "foo" => new stdClass(),
        "int" => 123,
        "str" => "asdf",
        "bar" => new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>'),
    )
);

var_dump($data);
/*array(1) {
  ["baz"]=>
  array(4) {
    ["foo"]=>
    object(stdClass)#3 (0) {
    }
    ["int"]=>
    int(123)
    ["str"]=>
    string(4) "asdf"
    ["bar"]=>
    object(SimpleXMLElement)#4 (1) {
      [0]=>
      string(3) "bar"
    }
  }
}*/

var_dump(exportNestedSimpleXML($data));
/*array(1) {
  ["baz"]=>
  array(4) {
    ["foo"]=>
    object(stdClass)#3 (0) {
    }
    ["int"]=>
    int(123)
    ["str"]=>
    string(4) "asdf"
    ["bar"]=>
    string(54) "<?xml version="1.0" encoding="UTF-8"?>
<foo>bar</foo>
"
  }
}
*/
?>
daniel at fourstaples dot com 23-Mar-2010 08:46
Here's a simple function to get the class of a serialized string (that is, the type of object that will be returned if it's unserialized):

<?php
function get_serial_class($serial) {
    $types = array('s' => 'string', 'a' => 'array', 'b' => 'bool', 'i' => 'int', 'd' => 'float', 'N;' => 'NULL');

    $parts = explode(':', $serial, 4);
    return isset($types[$parts[0]]) ? $types[$parts[0]] : trim($parts[2], '"');
}
?>

I use this when saving a serialized object to a cookie, to make sure it is the right type when I go to unserialize it.

The type names are the same format/case as you would see if you did a var_dump().
Fagzal 09-Mar-2010 10:10
To all who have problem with quoting and slashes when storing serialized data in MySQL: you are probably doing it wrong.

Use e.g. PDO with placeholders and the blob column type, and it will Just Work.
arbie samong 10-Sep-2009 07:42
__PHP_Incomplete_Class Object Demystified

1. First take note of the output. A simple example:

__PHP_Incomplete_Class Object (
[__PHP_Incomplete_Class_Name] => SomeObject1
[obj1property1] => somevalue1 [obj1property2] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => SomeObject2 [obj2property1] => somevalue1 [obj2property2] => Array (
['key1'] => somevalue3, ['key2'] => somevalue4 ) ) )

2. We analyze this and break it down.
__PHP_Incomplete_Class Object tells you there is an object that needs to be declared somehow.
__PHP_Incomplete_Class_Name simply tells you the expected class name. It is just one of the properties for now.

So we have:
a) an unknown object that has a class name SomeObject1 (first class)
b) it has 2 properties, namely obj1property1 and obj2property2
c) obj2property2 is itself an object whose class name is SomeObject2 (the second class)
d) SomeObject2 has two properties, obj2property1 and obj2property2
e) obj2property2 is an array that contains two elements

3. Now that we have an idea of the structure, we shall create class definitions based from it. We will just create properties for now, methods are not required as a minimum.

<?php
class SomeObject1 {
        public $obj1property1;
        public $obj1property2;
}
class SomeObject2 {
        public $obj2property1;
        public $obj2property2;
}
?>

4. Have that accessible to your script and it will solve the __PHP_Incomplete_Class Object problem as far as the output is concerned. Now you will have:

SomeObject1 ( [obj1property1] => somevalue1 [obj1property2] => SomeObject2 ( [obj2property1] => somevalue1 [obj2property2] => Array ( ['key1'] => somevalue3, ['key2'] => somevalue4 ) ) )

As you will notice, __PHP_Incomplete_Class Object is gone and replaced by the class name. The property __PHP_Incomplete_Class_Name is also removed.

5. As for the array property obj2property2, we can directly access that and just assume that it is an array and loop through it:

<?php

// this will be SomeObject1
$data = unserialize($serialized_data);

// this will be SomeObject2
$data2 = $data->obj1property2();

foreach($data2->obj2property2 as $key => $value):
         print $key.' : '. $value .'<br>';
endforeach;

?>

Outputs:
key1 : somevalue3
key2 : somevalue4

That's it. You can add more methods on the class declarations for the given properties, provided you keep your original output as basis for the data types.
w dot laurencine at teknoa dot net 07-Apr-2009 05:54
When dealing with a string which contain "\r", it seems that the length is not evaluated correctly. The following solves the problem for me :

<?php
// remove the \r caracters from the $unserialized string
$unserialized = str_replace("\r","",$unserialized);

// and then unserialize()
unserialize($unserialized);
?>
chris AT cmbuckley DOT co DOT uk 14-Aug-2008 06:47
As mentioned in the notes, unserialize returns false in the event of an error and for boolean false. Here is the first solution mentioned, without using error handling:

<?php
function isSerialized($str) {
    return ($str == serialize(false) || @unserialize($str) !== false);
}

var_dump(isSerialized('s:6:"foobar";')); // bool(true)
var_dump(isSerialized('foobar'));        // bool(false)
var_dump(isSerialized('b:0;'));          // bool(true)
?>
BenBE at omorphia dot de 02-Mar-2007 06:20
When trying to serialize or unserialize recursive arrays or otherwise linked data you might find the undocumented R data type quite useful.

If you want a array like the one produced with
<?
$a = array();
$a[0] =& $a;
?>
serialized you can store it using a string simular to this one:
<?
$a = unserialize("a:1:{i:0;R:1;}");
?>

Both sources will make $a hold an array that self-references itself in index 0.

The argument for R is the index of the created sub-variable of the serialize-string beginning with 1.
double at dumpit dot com 19-Dec-2006 05:09
This little function will check whether the serialized string is well formed.

PHP < 6 because i'd heard changes will be made in this php-intern function,
maybe it could be edited easy for it.

<?php

function wd_check_serialization( $string, &$errmsg )
{

    $str = 's';
    $array = 'a';
    $integer = 'i';
    $any = '[^}]*?';
    $count = '\d+';
    $content = '"(?:\\\";|.)*?";';
    $open_tag = '\{';
    $close_tag = '\}';
    $parameter = "($str|$array|$integer|$any):($count)" . "(?:[:]($open_tag|$content)|[;])";
    $preg = "/$parameter|($close_tag)/";
    if( !preg_match_all( $preg, $string, $matches ) )
    {
        $errmsg = 'not a serialized string';
        return false;
    }
    $open_arrays = 0;
    foreach( $matches[1] AS $key => $value )
    {
        if( !empty( $value ) && ( $value != $array xor $value != $str xor $value != $integer ) )
        {
            $errmsg = 'undefined datatype';
            return false;
        }
        if( $value == $array )
        {
            $open_arrays++;
            if( $matches[3][$key] != '{' )
            {
                $errmsg = 'open tag expected';
                return false;
            }
        }
        if( $value == '' )
        {
            if( $matches[4][$key] != '}' )
            {
                $errmsg = 'close tag expected';
                return false;
            }
            $open_arrays--;
        }
        if( $value == $str )
        {
            $aVar = ltrim( $matches[3][$key], '"' );
            $aVar = rtrim( $aVar, '";' );
            if( strlen( $aVar ) != $matches[2][$key] )
            {
                $errmsg = 'stringlen for string not match';
                return false;
            }
        }
        if( $value == $integer )
        {
            if( !empty( $matches[3][$key] ) )
            {
                $errmsg = 'unexpected data';
                return false;
            }
            if( !is_integer( (int)$matches[2][$key] ) )
            {
                $errmsg = 'integer expected';
                return false;
            }
        }
    }
    if( $open_arrays != 0 )
    {
        $errmsg = 'wrong setted arrays';
        return false;
    }
    return true;
}

?>
Are Pedersen 09-Aug-2006 01:46
Be aware that if useing serialize/unserialize in a serverfarm with both 32bit and 64bit servers you can get unexpected results.

Ex: if you serialize an integer with value of 2147483648 on a 64bit system and then unserialize it on a 32bit system you will get the value -2147483648 instead. This is because an integer on 32bit cannot be above 2147483647 so it wraps.
Chris Hayes (chris at hypersites dot com) 23-Oct-2004 09:27
In reply to the earlier post about having to include object definitions *before* using unserialize.  There is a workaround for this.

When an object is serialized, the first bit of the string is actually the name of the class.  When an unknown object is unserialized, this is maintained as a property.  So if you serialize it again, you get back the exact same string as if you'd serialized the original object.  Basically, to cut to the point...

If you use

$_SESSION['my_object'] = unserialize(serialize($_SESSION['my_object']))

then you get back an object of the correct type, even if the session had originally loaded it as an object of type stdClass.
aderyn at nowhere dot tld 30-Oct-2003 10:02
A quick note:
If you store a serialized object in a session, you have to include the class _before_ you initialize (session_start()) the session.


指定した変数の割当を解除する

  • ≪ unserialize
  • var_dump ≫
  • PHP Manual
  • 変数操作 関数
  • 指定した変数の割当を解除する

unset

(PHP 4, PHP 5, PHP 7, PHP 8)

unset — 指定した変数の割当を解除する

説明

unset(mixed $var, mixed ...$vars): void

unset() は指定した変数を破棄します。

関数 unset() の内部動作は、 破棄しようとする変数の型に依存します。

あるグローバル変数が関数の中で unset() された場合、ローカル変数のみが破棄されます。呼出側の環境にある変数は、 unset() がコールされる前と同じ値を保持します。

<?php
function destroy_foo()
{
global $foo;
unset($foo);
}

$foo = 'bar';
destroy_foo();
echo $foo;
?>

上の例の出力は以下となります。

bar

グローバル変数を関数の内部で unset() するには、 $GLOBALS 配列を使います。

<?php
function foo()
{
unset($GLOBALS['bar']);
}

$bar = "something";
foo();
?>

参照渡しされた変数が関数内で unset() された場合に、 ローカル変数のみが破棄されます。呼出側の環境でその変数は、 unset() がコールされる前と同じ値を保持します。

<?php
function foo(&$bar)
{
unset($bar);
$bar = "blah";
}

$bar = 'something';
echo "$bar\n";

foo($bar);
echo "$bar\n";
?>

上の例の出力は以下となります。

something
something

static変数が関数の内部で unset() された場合、 unset() は、その関数の残りのコンテキスト内においてのみ 変数を破棄します。関数を再度コールすると、破棄する前の値が復元されます。

<?php
function foo()
{
static $bar;
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = 23;
echo "after unset: $bar\n";
}

foo();
foo();
foo();
?>

上の例の出力は以下となります。

Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23

パラメータ

var

破棄する変数。

vars

別の変数。

戻り値

値を返しません。

例

例1 unset() の例

<?php
// 変数を一つ破棄する
unset($foo);

// 配列の要素の一つを破棄する
unset($bar['quux']);

// 複数の変数を破棄する
unset($foo1, $foo2, $foo3);
?>

例2 (unset) によるキャスト

(unset) によるキャストは unset() 関数と混同されがちです。 (unset) によるキャストは、 単に NULL 型へのキャストを徹底するだけであり、 キャストした変数の値を書き換えるわけではありません。 (unset) によるキャストは、PHP 7.2.0 で非推奨になり、 PHP 8.0.0 で削除されました。

<?php
$name = 'Felipe';

var_dump((unset) $name);
var_dump($name);
?>

上の例の出力は以下となります。

NULL
string(6) "Felipe"

注意

注意: これは、関数ではなく 言語構造のため、可変関数 や 名前付き引数 を用いてコールすることはできません。

注意:

現在のコンテキストで見えるものであれば、 オブジェクトのプロパティも破棄することが可能です。

破棄されたプロパティにアクセスする場合、 もし宣言されていれば __get() がコールされます。 破棄されたプロパティに値を設定を設定する場合、 もし宣言されていれば __set() がコールされます。

注意:

オブジェクトのメソッド内で $this を破棄することはできません。

注意:

オブジェクトのアクセス不能なプロパティに対して unset() を使用した場合は、もしオーバーロードメソッド __unset() が宣言されていればそれをコールします。

参考

  • isset() - 変数が宣言されていること、そして null とは異なることを検査する
  • empty() - 変数が空であるかどうかを検査する
  • __unset()
  • array_splice() - 配列の一部を削除し、他の要素で置換する
  • (unset) casting

User Contributed Notes

tecdoc at ukr dot net 28-Apr-2022 09:25
Be careful!, unset() element in array advances the internal array pointer one place forward
ray.paseur sometimes uses gmail 08-Mar-2022 08:55
Perhaps because it is a language construct and not a function, if you try to use the error suppression operator ...

@unset($var);

... you get this: Parse error: syntax error, unexpected 'unset' (T_UNSET) ...
ronan at shopping-feed dot com 04-Feb-2020 08:19
<?php

$list = ['a', 'b', 'c'];
next($list);
unset($list[1]);

echo current($list); // result : "c"
Phantasma_9 at yahoo dot com 08-Aug-2016 06:17
This is probably trivial but there is no error for unsetting a non-existing variable.
magnesium dot oxide dot play+php at gmail dot com 20-Mar-2014 08:10
You can unset superglobals like $GLOBALS, $_GET etc., but causing an unususal behavior (as of PHP 5.3.3).

1) unsetting of superglobals is done globally, i.e. unsetting inside the function affects GLOBALLY.

2) Recreation of unset'ed superglobals can be done (recreated valiables are superglobals), but original functionality (in $GLOBALS, $_SESSION ...) has lost.

<?php

function foo(){
  unset($GLOBALS);
}

function bar(){
  var_dump($GLOBALS);
}

foo();
bar(); //issues E_NOTICE ($GLOBALS not defined)
$GLOBALS=3;
bar(); //displays int(3)

?>
Hayley Watson 05-Mar-2013 09:41
You don't need to check that a variable is set before you unset it.
<?php
unset($a);
?>
is harmless.
<?php
if(isset($a)) {
    unset($a);
}
?>
is pointless complication.

This doesn't apply to properties of objects that have __isset() methods that visibly change object state or __unset() methods that don't properly check their arguments or have extra side effects.

The latter case means that __unset shouldn't do more than what it says on the tin, and also has the responsibility for checking (possibly using __isset()) that what it's being asked to do makes sense.

The former case is just plain bad design.
tigercat at aol dot com 10-Oct-2012 07:55
The combination of "global" and "unset" in functions can lead to some unexpected results.  This is because the "global" function creates a reference to a variable at the time it's executed, so a variable can be deleted out from under a "global $my_variable" declaration in a function.  Accessing data that's been deleted with an obsolete reference is usually a bad thing; in some languages it can generate a machine address fault.

<?php
$my_global_var = "old data";
f1();

function f1() // example of invalid variable reference use
{
  global $my_global_var;   // creates reference to global variable
  f2(); // recreates global variable, so reference is now invalid

// bad...
  echo $my_global_var;     // outputs "old data" (from invalid memory???)

// good...
  global $my_global_var;  // reestablish reference to new global variable
  echo $my_global_var;     // outputs "new data" as expected
}

function f2() // recreate global variable
{
  unset($GLOBALS['my_global_var']); // this syntax works with all variable types including arrays
  global $my_global_var; // must do this after unset to access new global variable
  $my_global_var = "new data";
}
?>
pfreilly at umd dot umich dot edu 29-Sep-2011 04:56
Despite much searching, I have not yet found an explanation as to how one can manually free resources from variables, not so much objects, in PHP.  I have also seen many comments regarding the merits and demerits of unset() versus setting a variable to null.  Thus, here are the results of some benchmarks performed comparing unset() of numerous variables to setting them to null (with regards to memory usage and processing time):

10 variables:
Unset:
Memory Usage: 296
Time Elapsed: 1.0013580322266E-5

Null set:
Memory Usage: 1736
Time Elapsed: 5.9604644775391E-6

50 variables:
Unset:
Memory Usage: 296
Time Elapsed: 3.6001205444336E-5

Null set:
Memory Usage: 8328
Time Elapsed: 3.2901763916016E-5

100 variables:
Unset:
Memory Usage: 296
Time Elapsed: 5.6982040405273E-5

Null set:
Memory Usage: 15928
Time Elapsed: 5.8174133300781E-5

1000 variables:
Unset:
Memory Usage: 296
Time Elapsed: 0.00041294097900391

Null set:
Memory Usage: 168096
Time Elapsed: 0.00067591667175293

10000 variables:
Unset:
Memory Usage: 296
Time Elapsed: 0.0042569637298584

Null set:
Memory Usage: 1650848
Time Elapsed: 0.0076930522918701

100000 variables:
Unset:
Memory Usage: 296
Time Elapsed: 0.042603969573975

Null set:
Memory Usage: 16249080
Time Elapsed: 0.087724924087524

300000 variables:
Unset:
Memory Usage: 296
Time Elapsed: 0.13177299499512

Null set:
Memory Usage: 49796320
Time Elapsed: 0.28617882728577

Perhaps my test code for the null set was flawed, but despite that possibility it is simple to see that unset() has minimal processing time impact, and no apparent memory usage impact (unless the values returned by memory_get_usage() are flawed).  If you truly care about the ~4 microseconds saved over <50 variables, more power to you.  Otherwise, use unset() to minimize script impact on your system.
Note: Tested on PHP 5.3.8 installed via RPM on Fedora 14
edouard dot berge at gmail dot com 24-Sep-2010 09:09
Warning!

When unset from an array, if you unset all elements, the array is always set

$tab=array('A'=>1,'B'=>2);
unset($tab['A']);
unset($tab['B']);
echo isset($tab)." ".count($tab);

output: 1 0
Andreas 24-Sep-2010 05:51
You can not unset a numeric key of an array, if key is a string. See this example:

// Create a simple array with 3 different key types
$test[1] = array(
    10 => array('apples'),
    "20" => array('bananas'),
    '30' => array('peaches')
);
$test[2] = (array) json_decode(json_encode($test[1]));
$test[3] = (array) (object) $test[1];
// array form a stdClass object
$testClass = new stdClass();
$testClass->{10} =  array('apples');
$testClass->{"20"} =  array('bananas');
$test[4] = (array) $testClass[6];

echo "<pre>";
foreach($test as $testNum => $arr) {

    echo "\nTest: " . $testNum  . " \n";
    var_dump($arr);

    foreach($arr as $key => $fruit) {
        echo "key: " . $key . "\n";
        echo "key exists: ";
        var_dump(array_key_exists(strval($key), $arr));
        echo "typeof key is: " . gettype($key) . "\n";

        unset($arr[$key]);
    }
    var_dump($arr);
    echo "\n" . str_repeat("-", 80);
}
echo "</pre>";

And here is the output:

Test: 1
array(3) {
  [10]=>
  array(1) {
    [0]=>
    string(6) "apples"
  }
  [20]=>
  array(1) {
    [0]=>
    string(7) "bananas"
  }
  [30]=>
  array(1) {
    [0]=>
    string(7) "peaches"
  }
}
key: 10
key exists: bool(true)
typeof key is: integer
key: 20
key exists: bool(true)
typeof key is: integer
key: 30
key exists: bool(true)
typeof key is: integer
array(0) {
}

--------------------------------------------------------------
Test: 2
array(3) {
  ["10"]=>
  array(1) {
    [0]=>
    string(6) "apples"
  }
  ["20"]=>
  array(1) {
    [0]=>
    string(7) "bananas"
  }
  ["30"]=>
  array(1) {
    [0]=>
    string(7) "peaches"
  }
}
key: 10
key exists: bool(false)
typeof key is: string
key: 20
key exists: bool(false)
typeof key is: string
key: 30
key exists: bool(false)
typeof key is: string
array(3) {
  ["10"]=>
  array(1) {
    [0]=>
    string(6) "apples"
  }
  ["20"]=>
  array(1) {
    [0]=>
    string(7) "bananas"
  }
  ["30"]=>
  array(1) {
    [0]=>
    string(7) "peaches"
  }
}

--------------------------------------------------------------
Test: 3
array(3) {
  [10]=>
  array(1) {
    [0]=>
    string(6) "apples"
  }
  [20]=>
  array(1) {
    [0]=>
    string(7) "bananas"
  }
  [30]=>
  array(1) {
    [0]=>
    string(7) "peaches"
  }
}
key: 10
key exists: bool(true)
typeof key is: integer
key: 20
key exists: bool(true)
typeof key is: integer
key: 30
key exists: bool(true)
typeof key is: integer
array(0) {
}

--------------------------------------------------------------
Test: 4
array(2) {
  ["10"]=>
  array(1) {
    [0]=>
    string(6) "apples"
  }
  ["20"]=>
  array(1) {
    [0]=>
    string(7) "bananas"
  }
}
key: 10
key exists: bool(false)
typeof key is: string
key: 20
key exists: bool(false)
typeof key is: string
array(2) {
  ["10"]=>
  array(1) {
    [0]=>
    string(6) "apples"
  }
  ["20"]=>
  array(1) {
    [0]=>
    string(7) "bananas"
  }
}

--------------------------------------------------------------

Fix the problem with a rebuild of the array:
$oldArray = $array();
$array = array();
foreach($oldArray as $key => $item) {
    $array[intval($key)] = $item;
}
j dot vd dot merwe at enovision dot net 26-Aug-2010 05:08
A sample how to unset array elements from an array result coming from a mysql request. In this sample it is checking if a file exists and removes the row from the array if it not exists.

<?php
$db->set_query("select * from documents where document_in_user = 0"); //1
$documents = $db->result_to_array($db->get_result()); //1

foreach ($documents as $key => $row) { //2

    $file     = "uploads/".rawurldecode($row['document_name']);

    if ( file_exists ( $file ) == FALSE ) {
         unset($documents[$key]);  //3
    }
}

$documents = array_values($documents); // reindex the array (4)
?>

variables:
mysql table = documents,
array = $documents
array key (index) = $key
array row (record sort of speak) = $row

explanation:

1.
it gets the array from the table (mysql)

2.
foreach goes through the array $documents

3.
unset if record does not exist

4.
the array_values($documents) reindexes the $documents array, for otherwise you might end up in trouble when your  process will start expecting an array starting with key ($key) 0 (zero).
Anonymous 02-Jul-2010 07:20
further I realized that an object, when getting detroyed, does care about destroying variable in object space visibility but not those in local visibility, be aware of the found pattern:

<?php
class release_test{
  private $buffer;
  private $other_object;
  public function __construct(){
    $this->other_object=new other_object_class();
  }
  public function __destruct(){
    //note that you always have to unset class objects, in order to get the resources released
    unset($this->other_object);
  }
  public allocate_mem_A(){
    $this->buffer=file("/tmp/bigfile");
  }
  public allocate_mem_B(){
    $buffer=file("/tmp/bigfile");
  }
  public allocate_mem_C(){
    $buffer=file("/tmp/bigfile");
    unset($buffer);
  }
  public allocate_mem_D(){
    $this->other_buffer=file("/tmp/bigfile");
  }
}

//this does not lead to a resource problem
$A=new release_test();
$A->allocate_mem_A();
$A->__destruct();
unset($A);

//this DOES lead to a resource problem
$B=new release_test();
$B->allocate_mem_B();
$B->__destruct();
unset($B);

//this does not lead to a resource problem
$C=new release_test();
$C->allocate_mem_C();
$C->__destruct();
unset($C);

//this does not lead to a resource problem
$D=new release_test();
$D->allocate_mem_D();
$D->__destruct();
unset($D);
?>
phpmanual at kennel17 dot co dot uk 26-Feb-2010 08:55
Note that PHP 4 will generate a warning if you try to unset an array index that doesn't exist and whose parent doesn't exist.

Example:

<?php

  $foo = array();

  unset($foo['Bar']['Baz']);

?>

RESULT: "Notice:  Undefined index:  Bar"

On PHP5 no error is raised, which seems to me like the correct behaviour.

Note that using unset($foo['Bar']) in the above example does not generate a warning in either version.

(Tested on 4.4.9 and 5.2.4)
macnimble at gmail dot com 26-Mar-2009 02:39
Two ways of unsetting values within an array:

<?php
# remove by key:
function array_remove_key ()
{
  $args  = func_get_args();
  return array_diff_key($args[0],array_flip(array_slice($args,1)));
}
# remove by value:
function array_remove_value ()
{
  $args = func_get_args();
  return array_diff($args[0],array_slice($args,1));
}

$fruit_inventory = array(
  'apples' => 52,
  'bananas' => 78,
  'peaches' => 'out of season',
  'pears' => 'out of season',
  'oranges' => 'no longer sold',
  'carrots' => 15,
  'beets' => 15,
);

echo "<pre>Original Array:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# For example, beets and carrots are not fruits...
$fruit_inventory = array_remove_key($fruit_inventory,
                                    "beets",
                                    "carrots");
echo "<pre>Array after key removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# Let's also remove 'out of season' and 'no longer sold' fruit...
$fruit_inventory = array_remove_value($fruit_inventory,
                                      "out of season",
                                      "no longer sold");
echo "<pre>Array after value removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';
?>
lion_cat at mail ru 12-Nov-2008 02:22
about unset for arrays

if you unset the last array member
$ar[0]==2
$ar[1]==7
$ar[2]==9

unset ($ar[2])

after addition a new member by $ar[]=7,

you will get
$ar[0]==2
$ar[1]==7
$ar[3]==7,

So, unset has no effect to internal array counter!!!
nox at oreigon dot de 05-Aug-2008 12:24
if you try to unset an object, please be careful about references.

Objects will only free their resources and trigger their __destruct method when *all* references are unsetted.
Even when they are *in* the object... sigh!

<?php

class A {
  function __destruct() {
    echo "cYa later!!\n";
  }
}

$a = new A();
$a -> a = $a;
#unset($a); # Just uncomment, and you'll see

echo "No Message ... hm, what now?\n";
unset($a -> a);
unset($a);

echo "Finally that thing is gone\n";

?>

Of course the object completely dies at the end of the script.
stacionari at gmail dot com 17-Mar-2008 01:41
Sometimes you need to assigne values to an array index in some loop (if, while, foreach etc.) but you wish to set starting index key to some number greater then zero (lets say 5). One idea how to do this is:

<?php
    $values = array(5, 10, 15, 100);  //array of values that we wish to add to our new array

    $myArray = array(4=>0);   //sets starting key to be 4 and assigns some value (lets say 0)
    unset($myArray[4]);   //delete this index key, but preserves further enumeration

    foreach($values as $value){
        $myArray[] = $value;   //asign values to our array
    }

    print_r($myArray);

/* Output:

Array ( [5] => 5 [6] => 10 [7] => 15 [8] => 100 )

*/

?>
pauljamescampbell at gmail dot com 15-Mar-2008 05:22
Here's my variation on the slightly dull unset method. It throws in a bit of 80's Stallone action spice into the mix. Enjoy!

<?php
/**
 * function rambo (first blood)
 *
 * Completely and utterly destroys everything, returning the kill count of victims
 *
 * @param    It don't matter, it's Rambo baby
 * @return    Integer    Body count (but any less than 500 and it's not really worth mentioning)
 */
function rambo() {

    // Get the victims and initiate that body count status
    $victims = func_get_args();
    $body_count = 0;

    // Kill those damn punks
    foreach($victims as $victim) {
        if($death_and_suffering = @unset($victim)) {
            $body_count++;
        }
    }

    // How many kills did Rambo tally up on this mission?
    return($body_count);
}
?>
Kai Kunstmann 10-Mar-2008 05:09
Since unset() is a language construct, it cannot be passed anything other than a variable. It's sole purpose is to "unset" this variable, ie. to remove it from the current scope and destroy it's associated data. This is true especially for reference variables, where not the actual value is destroyed but the reference to that value. This is why you can't wrap 'unset()' in a user defined function: You would either unset a copy of the data if the parameter is passed by value, or you would just unset the reference variable within the functions scope if the parameter is passed by reference. There is no workaround for that, as you cannot pass 'scope' to a function in PHP. Such a function can only work for variables that exist in a common or global scope (compare 'unset($_GLOBALS[variable])').

I don't know how PHP handles garbage collection internally, but I guess this behavior can result in a huge memory leak: if a value variable goes out of scope with a second variable still holding a reference to the in-memory value, then unsetting that reference would still hold the value in memory but potentially unset the last reference to that in-memory data, hence: occupied memory that is rendered useless as you cannot reference it anymore.
Hayley Watson 23-Aug-2007 09:02
In regard to some confusion earlier in these notes about what causes unset() to trigger notices when unsetting variables that don't exist....

Unsetting variables that don't exist, as in
<?php
unset($undefinedVariable);
?>
does not trigger an "Undefined variable" notice. But
<?php
unset($undefinedArray[$undefinedKey]);
?>
triggers two notices, because this code is for unsetting an element of an array; neither $undefinedArray nor $undefinedKey are themselves being unset, they're merely being used to locate what should be unset. After all, if they did exist, you'd still expect them to both be around afterwards. You would NOT want your entire array to disappear just because you unset() one of its elements!
chad 0x40 herballure 0x2e com 31-May-2007 07:11
It is observed on PHP 5.1.6 that <?php unset($this); ?> inside of a method will remove the reference to $this in that method. $this isn't considered "special" as far as unset() is concerned.
09-Feb-2007 08:10
Just to confirm, USING UNSET CAN DESTROY AN ENTIRE ARRAY. I couldn't find reference to this anywhere so I decided to write this.

The difference between using unset and using $myarray=array(); to unset is that obviously the array will just be overwritten and will still exist.

<?php

$myarray=array("Hello","World");

echo $myarray[0].$myarray[1];

unset($myarray);
//$myarray=array();

echo $myarray[0].$myarray[1];

echo $myarray;
?>

Output with unset is:
<?
HelloWorld

Notice: Undefined offset: 0 in C:\webpages\dainsider\myarray.php on line 10

Notice: Undefined offset: 1 in C:\webpages\dainsider\myarray.php on line 10

Output with $myarray=array(); is:
?>

<?
HelloWorld

Notice: Undefined offset: 0 in C:\webpages\dainsider\myarray.php on line 10

Notice: Undefined offset: 1 in C:\webpages\dainsider\myarray.php on line 10

Array
?>
hessodreamy at gmail dot com 17-Jan-2007 03:51
To clarify what hugo dot dworak at gmail dot com said about unsetting things that aren't already set:

unsetting a non-existent key within an array does NOT throw an error.
<?
$array = array();

unset($array[2]);
//this does not throw an error

unset($array[$undefinedVar]);
//Throws an error because of the undefined variable, not because of a non-existent key.
?>
dibakar dot datta at gmail dot com 31-Mar-2006 11:31
Instead of using the unset function  for unregistering your session or other array values you can also do this samll feature and get this task done with just 1 line code.

Suppose, if you like to unregister your session store values.
You can use:

      $_SESSION = array();

Well this syntax saves lot's of time instead of unsetting each values.
clark at everettsconsulting dot com 11-Sep-2005 12:50
In PHP 5.0.4, at least, one CAN unset array elements inside functions from arrays passed by reference to the function.
As implied by the manual, however, one can't unset the entire array by passing it by reference.

<?php
function remove_variable (&$variable)  // pass variable by reference
{
    unset($variable);
}

function remove_element (&$array, $key) // pass array by reference
{
    unset($array[$key]);
}

$scalar = 'Hello, there';
echo 'Value of $scalar is: ';
print_r ($scalar); echo '<br />';
// Value of $scalar is: Hello, there

remove_variable($scalar); // try to unset the variable
echo 'Value of $scalar is: ';
print_r ($scalar); echo '<br />';
// Value of $scalar is: Hello, there

$array = array('one' => 1, 'two' => 2, 'three' => 3);
echo 'Value of $array is: ';
print_r ($array); echo '<br />';
// Value of $array is: Array ( [one] => 1 [two] => 2 [three] => 3 )

remove_variable($array); // try to unset the array
echo 'Value of $array is: ';
print_r ($array); echo '<br />';
// Value of $array is: Array ( [one] => 1 [two] => 2 [three] => 3 )

remove_element($array, 'two'); // successfully remove an element from the array
echo 'Value of $array is: ';
print_r ($array); echo '<br />';
// Value of $array is: Array ( [one] => 1 [three] => 3 )

?>
muhamad_zakaria at yahoo dot com 04-Jul-2005 07:08
We have experienced when we applied 'unset' to the overloaded properties (PHP5), consider the code below:
<?php
    class TheObj {
        public $RealVar1, $RealVar2, $RealVar3, $RealVar4;
        public $Var = array();

        function __set($var, $val) {
            $this->Var[$var] = $val;
        }
        function __get($var) {
            if(isset($this->Var[$var])) return $this->Var[$var];
            else return -1;
        }
    }

    $SomeObj = new TheObj;

    // here we set for real variables
    $SomeObj->RealVar1 = 'somevalue';
    $SomeObj->{'RealVar2'} = 'othervalue';
    $SomeObj->{'RealVar'.(3)} = 'othervaluetoo';
    $SomeObj->{'RealVar'.'4'} = 'anothervalue';

    // and here we set for virtual variables
    $SomeObj->Virtual1 = 'somevalue';
    $SomeObj->{'Virtual2'} = 'othervalue';
    $SomeObj->{'Virtual'.(3)} = 'othervaluetoo';
    $SomeObj->{'Virtual'.'4'} = 'anothervalue';

    // now we will try to unset these variables
    unset($SomeObj->RealVar1);
    unset($SomeObj->{'RealVar'.(3)});

    //the lines below will catch by '__get' magic method since these variables are unavailable anymore
    print $SomeObj->RealVar1."\n";
    print $SomeObj->{'RealVar'.(3)}."\n";

    // now we will try to unset these variables
    unset($SomeObj->Virtual1);
    unset($SomeObj->{'Virtual'.(3)});

    //but, these variables are still available??? eventhough they're "unset"-ed
    print $SomeObj->Virtual1."\n";
    print $SomeObj->{'Virtual'.(3)}."\n";
?>

Please note that PHP doesn't have magic callback to unset overloaded properties. This is the reason why unset($SomeObj->Virtual1) doesn't work.

But it does work when we set 'null' value such as the following code:
<?php
    // now we will set 'null' value instead of using unset statement
    $SomeObj->Virtual1 = null;
    $SomeObj->{'Virtual'.(3)} = null;

    // and now these variables are no longer available
    print $SomeObj->Virtual1."\n";
    print $SomeObj->{'Virtual'.(3)}."\n";
?>
Sound ugly, yeah?

This applied to the "virtual" array variable too, see more at http://bugs.php.net/bug.php?id=33513 (at feedback) about it.
PS: we used PHP version 5.1.0-dev from the CVS snapshot when we wrote the above codes.
franckraynal at free dot fr 26-Feb-2005 05:02
Here is another way to make 'unset' work with session variables from within a function :

<?php
function unsetSessionVariable ($sessionVariableName) {
   unset($GLOBALS[_SESSION][$sessionVariableName]);
}
?>

May it work with others than me...
F.
dan AT --nospam-- cubeland DOT co DOT uk 04-Nov-2004 11:38
dh at argosign dot de -
it is possible to unset globals from within functions thanks to the $GLOBALS array:

<?php
$x = 10;

function test() {
    // don't need to do ' global $x; '
    unset ($GLOBALS['x']);
    echo 'x: ' . $GLOBALS['x'] . '<br />';
}

test();
echo "x: $x<br />";

// will result in
/*
x:
x:
*/
?>
thorry at thorry dot net 05-Aug-2004 02:15
The documentation is not entirely clear when it comes to static variables. It says:

If a static variable is unset() inside of a function, unset() destroys the variable and all its references.

<?php
function foo()
{
   static $a;
   $a++;
   echo "$a\n";
   unset($a);
}

foo();
foo();
foo();
?>

The above example would output:

1
2
3

And it does! But the variable is NOT deleted, that's why the value keeps on increasing, otherwise the output would be:

1
1
1

The references are destroyed within the function, this handeling is the same as with global variables, the difference is a static variable is a local variable.

Be carefull using unset and static values as the output may not be what you expect it to be. It appears to be impossible to destroy a static variable. You can only destroy the references within the current executing function, a successive static statement will restore the references.

The documentation would be better if it would say:
"If a static variable is unset() inside of a function, unset() destroys all references to the variable. "

Example: (tested PHP 4.3.7)
<?php
function foo()
{
   static $a;
   $a++;
   echo "$a\n";
   unset($a);
   echo "$a\n";
   static $a;
   echo "$a\n";
}

foo();
foo();
foo();
?>

Would output:

1

1
2

2
3

3
anon at no spam dot no address dot com 16-Jul-2004 09:19
Adding on to what bond at noellebond dot com said, if you want to remove an index from the end of the array, if you use unset, the next index value will still be what it would have been.

Eg you have
<?php
 $x = array(1, 2);

 for ($i = 0; $i < 5; $i++)
 {
    unset($x[(count($x)-1)]); //remove last set key in the array

    $x[] = $i;
 }
?>

You would expect:
Array([0] => 1, [1] => 4)
as you want it to remove the last set key....

but you actually get
Array ( [0] => 1 [4] => 2 [5] => 3 [6] => 4 )

This is since even though the last key is removed, the auto indexing still keeps its previous value.

The only time where this would not seem right is when you remove a value off the end. I guess different people would want it different ways.

The way around this is to use array_pop() instead of unset() as array_pop() refreshes the autoindexing thing for the array.
<?php
 $x = array(1, 2);

 for ($i = 0; $i < 5; $i++)
 {
    array_pop($x); // removes the last item in the array

    $x[] = $i;
 }
?>

 This returns the expected value of x = Array([0] => 1, [1] => 4);

Hope this helps someone who may need this for some odd reason, I did.
andre at twg dot com dot au 06-Mar-2004 09:16
Only This works with register_globals being 'ON'.

unset( $_SESSION['variable'] );

The above will not work with register_globals turned on (will only work outside of a function).

$variable = $_SESSION['variable'];
unset( $_SESSION['variable'], $variable );

The above will work with register_globals on & inside a function
warhog at warhog dot net 27-Jan-2004 08:52
you may wan't to unset all variables which are defined, here's one way:

<?php

function unset_all_vars($a)
{ foreach($a as $key => $val)
  { unset($GLOBALS[$key]); }
  return serialize($a); }

unset_all_vars(get_defined_vars());

?>

you can also save than a serialized var of the "memory" and perhaps store this in a temporary file.. very usefull if you work with text files and/or file uploads when you've got very large variables.

greetz


変数に関する情報をダンプする

  • ≪ unset
  • var_export ≫
  • PHP Manual
  • 変数操作 関数
  • 変数に関する情報をダンプする

var_dump

(PHP 4, PHP 5, PHP 7, PHP 8)

var_dump — 変数に関する情報をダンプする

説明

var_dump(mixed $value, mixed ...$values): void

この関数は、指定した式に関してその型や値を含む構造化された情報を 返します。配列の場合、その構造を表示するために各値について再帰的に 探索されます。

オブジェクトのすべての public、private および protected なプロパティが出力されます。ただし、そのオブジェクトが __debugInfo() メソッド を実装している場合は、その限りではありません。

ヒント

ブラウザに直接結果を出力する すべてのものと同様に、出力制御関数 を使用してこの関数の出力をキャプチャーし、(例えば)文字列 (string)に保存することが可能です。

パラメータ

value

ダンプしたい変数。

values

ダンプしたい追加の変数。

戻り値

値を返しません。

例

例1 var_dump() の例

<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>

上の例の出力は以下となります。

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}
<?php

$b = 3.1;
$c = true;
var_dump($b, $c);

?>

上の例の出力は以下となります。

float(3.1)
bool(true)

参考

  • print_r() - 指定した変数に関する情報を解りやすく出力する
  • debug_zval_dump() - 内部的な zval を表す文字列をダンプする
  • var_export() - 変数の文字列表現を出力または返す
  • __debugInfo()

User Contributed Notes

fabien dot villepinte at gmail dot com 27-May-2019 02:59
It's important to note that the output depends on the precision directive.
<?php
var_dump(10000000000000.5); // float(10000000000000)
ini_set('precision',-1);
var_dump(10000000000000.5); // float(10000000000000.5)
?>
Anonymous 18-Jul-2016 06:27
Be careful this outputs to stdout stream (1) instead of the proper stderr stream (2).
b dot bergloev at gmail dot com 31-Oct-2014 11:45
I post a new var_dump function with colors and collapse features. It can also adapt to terminal output if you execute it from there. No need to wrap it in a pre tag to get it to work in browsers.

<?php
function dump_debug($input, $collapse=false) {
    $recursive = function($data, $level=0) use (&$recursive, $collapse) {
        global $argv;

        $isTerminal = isset($argv);

        if (!$isTerminal && $level == 0 && !defined("DUMP_DEBUG_SCRIPT")) {
            define("DUMP_DEBUG_SCRIPT", true);

            echo '<script language="Javascript">function toggleDisplay(id) {';
            echo 'var state = document.getElementById("container"+id).style.display;';
            echo 'document.getElementById("container"+id).style.display = state == "inline" ? "none" : "inline";';
            echo 'document.getElementById("plus"+id).style.display = state == "inline" ? "inline" : "none";';
            echo '}</script>'."\n";
        }

        $type = !is_string($data) && is_callable($data) ? "Callable" : ucfirst(gettype($data));
        $type_data = null;
        $type_color = null;
        $type_length = null;

        switch ($type) {
            case "String":
                $type_color = "green";
                $type_length = strlen($data);
                $type_data = "\"" . htmlentities($data) . "\""; break;

            case "Double":
            case "Float":
                $type = "Float";
                $type_color = "#0099c5";
                $type_length = strlen($data);
                $type_data = htmlentities($data); break;

            case "Integer":
                $type_color = "red";
                $type_length = strlen($data);
                $type_data = htmlentities($data); break;

            case "Boolean":
                $type_color = "#92008d";
                $type_length = strlen($data);
                $type_data = $data ? "TRUE" : "FALSE"; break;

            case "NULL":
                $type_length = 0; break;

            case "Array":
                $type_length = count($data);
        }

        if (in_array($type, array("Object", "Array"))) {
            $notEmpty = false;

            foreach($data as $key => $value) {
                if (!$notEmpty) {
                    $notEmpty = true;

                    if ($isTerminal) {
                        echo $type . ($type_length !== null ? "(" . $type_length . ")" : "")."\n";

                    } else {
                        $id = substr(md5(rand().":".$key.":".$level), 0, 8);

                        echo "<a href=\"javascript:toggleDisplay('". $id ."');\" style=\"text-decoration:none\">";
                        echo "<span style='color:#666666'>" . $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "</span>";
                        echo "</a>";
                        echo "<span id=\"plus". $id ."\" style=\"display: " . ($collapse ? "inline" : "none") . ";\">&nbsp;&#10549;</span>";
                        echo "<div id=\"container". $id ."\" style=\"display: " . ($collapse ? "" : "inline") . ";\">";
                        echo "<br />";
                    }

                    for ($i=0; $i <= $level; $i++) {
                        echo $isTerminal ? "|    " : "<span style='color:black'>|</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                    }

                    echo $isTerminal ? "\n" : "<br />";
                }

                for ($i=0; $i <= $level; $i++) {
                    echo $isTerminal ? "|    " : "<span style='color:black'>|</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                }

                echo $isTerminal ? "[" . $key . "] => " : "<span style='color:black'>[" . $key . "]&nbsp;=>&nbsp;</span>";

                call_user_func($recursive, $value, $level+1);
            }

            if ($notEmpty) {
                for ($i=0; $i <= $level; $i++) {
                    echo $isTerminal ? "|    " : "<span style='color:black'>|</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                }

                if (!$isTerminal) {
                    echo "</div>";
                }

            } else {
                echo $isTerminal ?
                        $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "  " :
                        "<span style='color:#666666'>" . $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "</span>&nbsp;&nbsp;";
            }

        } else {
            echo $isTerminal ?
                    $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "  " :
                    "<span style='color:#666666'>" . $type . ($type_length !== null ? "(" . $type_length . ")" : "") . "</span>&nbsp;&nbsp;";

            if ($type_data != null) {
                echo $isTerminal ? $type_data : "<span style='color:" . $type_color . "'>" . $type_data . "</span>";
            }
        }

        echo $isTerminal ? "\n" : "<br />";
    };

    call_user_func($recursive, $input);
}
?>
stlawson *AT* joyfulearthtech *DOT* com 10-Aug-2011 09:31
<?php
/**
 * Better GI than print_r or var_dump -- but, unlike var_dump, you can only dump one variable.
 * Added htmlentities on the var content before echo, so you see what is really there, and not the mark-up.
 *
 * Also, now the output is encased within a div block that sets the background color, font style, and left-justifies it
 * so it is not at the mercy of ambient styles.
 *
 * Inspired from:     PHP.net Contributions
 * Stolen from:       [highstrike at gmail dot com]
 * Modified by:       stlawson *AT* JoyfulEarthTech *DOT* com
 *
 * @param mixed $var  -- variable to dump
 * @param string $var_name  -- name of variable (optional) -- displayed in printout making it easier to sort out what variable is what in a complex output
 * @param string $indent -- used by internal recursive call (no known external value)
 * @param unknown_type $reference -- used by internal recursive call (no known external value)
 */
function do_dump(&$var, $var_name = NULL, $indent = NULL, $reference = NULL)
{
    $do_dump_indent = "<span style='color:#666666;'>|</span> &nbsp;&nbsp; ";
    $reference = $reference.$var_name;
    $keyvar = 'the_do_dump_recursion_protection_scheme'; $keyname = 'referenced_object_name';

    // So this is always visible and always left justified and readable
    echo "<div style='text-align:left; background-color:white; font: 100% monospace; color:black;'>";

    if (is_array($var) && isset($var[$keyvar]))
    {
        $real_var = &$var[$keyvar];
        $real_name = &$var[$keyname];
        $type = ucfirst(gettype($real_var));
        echo "$indent$var_name <span style='color:#666666'>$type</span> = <span style='color:#e87800;'>&amp;$real_name</span><br>";
    }
    else
    {
        $var = array($keyvar => $var, $keyname => $reference);
        $avar = &$var[$keyvar];

        $type = ucfirst(gettype($avar));
        if($type == "String") $type_color = "<span style='color:green'>";
        elseif($type == "Integer") $type_color = "<span style='color:red'>";
        elseif($type == "Double"){ $type_color = "<span style='color:#0099c5'>"; $type = "Float"; }
        elseif($type == "Boolean") $type_color = "<span style='color:#92008d'>";
        elseif($type == "NULL") $type_color = "<span style='color:black'>";

        if(is_array($avar))
        {
            $count = count($avar);
            echo "$indent" . ($var_name ? "$var_name => ":"") . "<span style='color:#666666'>$type ($count)</span><br>$indent(<br>";
            $keys = array_keys($avar);
            foreach($keys as $name)
            {
                $value = &$avar[$name];
                do_dump($value, "['$name']", $indent.$do_dump_indent, $reference);
            }
            echo "$indent)<br>";
        }
        elseif(is_object($avar))
        {
            echo "$indent$var_name <span style='color:#666666'>$type</span><br>$indent(<br>";
            foreach($avar as $name=>$value) do_dump($value, "$name", $indent.$do_dump_indent, $reference);
            echo "$indent)<br>";
        }
        elseif(is_int($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color".htmlentities($avar)."</span><br>";
        elseif(is_string($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color\"".htmlentities($avar)."\"</span><br>";
        elseif(is_float($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color".htmlentities($avar)."</span><br>";
        elseif(is_bool($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> $type_color".($avar == 1 ? "TRUE":"FALSE")."</span><br>";
        elseif(is_null($avar)) echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> {$type_color}NULL</span><br>";
        else echo "$indent$var_name = <span style='color:#666666'>$type(".strlen($avar).")</span> ".htmlentities($avar)."<br>";

        $var = $var[$keyvar];
    }

    echo "</div>";
}
?>
kobrasrealm at gmail dot com 23-Jun-2011 01:28
I wrote this dandy little function for using var_dump() on HTML documents so I don't have to view the source.

<?php
function htmldump($variable, $height="9em") {
echo "<pre style=\"border: 1px solid #000; height: {$height}; overflow: auto; margin: 0.5em;\">";
var_dump($variable);
echo "</pre>\n";
}
?>

You can pass arguments like this:
<?php
$sql = mysql_query("SELECT id, name, value FROM table WHERE cond = 'value'");
$s = mysql_fetch_assoc($sql);

// Dump variable containing the result of the MySQL query
var_dump($s);
?>

The second parameter lets you specify the height of the box. Default is 9em, but if you're expecting a huge output you'll probably want a higher value.

<?php
var_dump($s, "17em");
?>

Happy var_dumping.
divinity76 at gmail dot com 23-Apr-2011 06:53
a html-encoded var_dump

<?php
function htmlvardump(){ob_start(); $var = func_get_args(); call_user_func_array('var_dump', $var); echo htmentities(ob_get_clean());}
?>

(creds: ekneuss / mOo @ irc.freenode.net/#php )
david at exposito dot mobi 07-Feb-2010 11:36
If you want to save exactly the content of an array into a variable to save ir later for example, use this:

<?php $xml = var_export($xml, true); ?>

You'll have in your same variable the content readable, instead of written down or anything else
egorinsk at gmail com 02-Feb-2009 04:08
Note that var_dump reset()'s array internal pointer!
rich dot schu at gmail dot com 09-Apr-2008 05:56
Keep in mind if you have xdebug installed it will limit the var_dump() output of array elements and object properties to 3 levels deep.

To change the default, edit your xdebug.ini file and add the folllowing line:
xdebug.var_display_max_depth=n

More information here:
http://www.xdebug.org/docs/display
highstrike at gmail dot com 08-Jan-2008 05:33
made 2 nifty functions based of what some people contributed here. Hope you find them usefull

usage ... call for the dump function. EG: dump($array, "Array dump");

<?php
////////////////////////////////////////////////////////
// Function:         dump
// Inspired from:     PHP.net Contributions
// Description: Helps with php debugging

function dump(&$var, $info = FALSE)
{
    $scope = false;
    $prefix = 'unique';
    $suffix = 'value';

    if($scope) $vals = $scope;
    else $vals = $GLOBALS;

    $old = $var;
    $var = $new = $prefix.rand().$suffix; $vname = FALSE;
    foreach($vals as $key => $val) if($val === $new) $vname = $key;
    $var = $old;

    echo "<pre style='margin: 0px 0px 10px 0px; display: block; background: white; color: black; font-family: Verdana; border: 1px solid #cccccc; padding: 5px; font-size: 10px; line-height: 13px;'>";
    if($info != FALSE) echo "<b style='color: red;'>$info:</b><br>";
    do_dump($var, '$'.$vname);
    echo "</pre>";
}

////////////////////////////////////////////////////////
// Function:         do_dump
// Inspired from:     PHP.net Contributions
// Description: Better GI than print_r or var_dump

function do_dump(&$var, $var_name = NULL, $indent = NULL, $reference = NULL)
{
    $do_dump_indent = "<span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ";
    $reference = $reference.$var_name;
    $keyvar = 'the_do_dump_recursion_protection_scheme'; $keyname = 'referenced_object_name';

    if (is_array($var) && isset($var[$keyvar]))
    {
        $real_var = &$var[$keyvar];
        $real_name = &$var[$keyname];
        $type = ucfirst(gettype($real_var));
        echo "$indent$var_name <span style='color:#a2a2a2'>$type</span> = <span style='color:#e87800;'>&amp;$real_name</span><br>";
    }
    else
    {
        $var = array($keyvar => $var, $keyname => $reference);
        $avar = &$var[$keyvar];

        $type = ucfirst(gettype($avar));
        if($type == "String") $type_color = "<span style='color:green'>";
        elseif($type == "Integer") $type_color = "<span style='color:red'>";
        elseif($type == "Double"){ $type_color = "<span style='color:#0099c5'>"; $type = "Float"; }
        elseif($type == "Boolean") $type_color = "<span style='color:#92008d'>";
        elseif($type == "NULL") $type_color = "<span style='color:black'>";

        if(is_array($avar))
        {
            $count = count($avar);
            echo "$indent" . ($var_name ? "$var_name => ":"") . "<span style='color:#a2a2a2'>$type ($count)</span><br>$indent(<br>";
            $keys = array_keys($avar);
            foreach($keys as $name)
            {
                $value = &$avar[$name];
                do_dump($value, "['$name']", $indent.$do_dump_indent, $reference);
            }
            echo "$indent)<br>";
        }
        elseif(is_object($avar))
        {
            echo "$indent$var_name <span style='color:#a2a2a2'>$type</span><br>$indent(<br>";
            foreach($avar as $name=>$value) do_dump($value, "$name", $indent.$do_dump_indent, $reference);
            echo "$indent)<br>";
        }
        elseif(is_int($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color$avar</span><br>";
        elseif(is_string($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color\"$avar\"</span><br>";
        elseif(is_float($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color$avar</span><br>";
        elseif(is_bool($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $type_color".($avar == 1 ? "TRUE":"FALSE")."</span><br>";
        elseif(is_null($avar)) echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> {$type_color}NULL</span><br>";
        else echo "$indent$var_name = <span style='color:#a2a2a2'>$type(".strlen($avar).")</span> $avar<br>";

        $var = $var[$keyvar];
    }
}
?>
vladimir at pixeltomorrow dot com 10-Sep-2007 12:45
You can also use the PEAR package available at http://pear.php.net/package/Var_Dump

which parses the variable content in a very pleasant manner, a lot more easier to "follow" than the built-in var_dump() function.

Of course there are many others, but I prefer this one, because it's simply to use.

Just add at the begining of your file:

<?php

require('Var_Dump.php'); // make sure the pear package path is set in php.ini
Var_Dump::displayInit(array('display_mode' => 'HTML4_Text'), array('mode' => 'normal','offset' => 4));
?>

then, instead of simply using var_dump($foo), use:

<?php

Var_Dump::display($foo);

?>

Read the documentation if you're looking for different output layouts.

Cheers!
Vladimir Ghetau
thriller dot ze at gmail dot com 21-Aug-2007 01:49
As Bryan said, it is possible to capture var_dump() output to a string. But it's not quite exact if the dumped variable contains HTML code.

You can use this instead:

<?php
echo '<pre>'; // This is for correct handling of newlines
ob_start();
var_dump($var);
$a=ob_get_contents();
ob_end_clean();
echo htmlspecialchars($a,ENT_QUOTES); // Escape every HTML special chars (especially > and < )
echo '</pre>';
?>
php at mikeboers dot com 28-Jun-2007 01:08
Howdy!

I am working on a pretty large project where I needed to dump a human readable form of whatever into the log files... and I thought var_export was too difficult to read. BigueNique at yahoo dot ca has a nice solution, although I needed to NOT modify whatever was being passed to dump.

So borrowing heavily from BigueNique's (just reworked his function) and someone's idea over in the object cloning page, I came up with the following function.

It makes a complete copy of whatever object you initially pass it, including all recursive definitions and outside objects references, then does the same thing as BigueNique's function. I also heavily reworked what it output, to suit my needs.

<?php

function var_log(&$varInput, $var_name='', $reference='', $method = '=', $sub = false) {

    static $output ;
    static $depth ;

    if ( $sub == false ) {
        $output = '' ;
        $depth = 0 ;
        $reference = $var_name ;
        $var = serialize( $varInput ) ;
        $var = unserialize( $var ) ;
    } else {
        ++$depth ;
        $var =& $varInput ;

    }

    // constants
    $nl = "\n" ;
    $block = 'a_big_recursion_protection_block';

    $c = $depth ;
    $indent = '' ;
    while( $c -- > 0 ) {
        $indent .= '|  ' ;
    }

    // if this has been parsed before
    if ( is_array($var) && isset($var[$block])) {

        $real =& $var[ $block ] ;
        $name =& $var[ 'name' ] ;
        $type = gettype( $real ) ;
        $output .= $indent.$var_name.' '.$method.'& '.($type=='array'?'Array':get_class($real)).' '.$name.$nl;

    // havent parsed this before
    } else {

        // insert recursion blocker
        $var = Array( $block => $var, 'name' => $reference );
        $theVar =& $var[ $block ] ;

        // print it out
        $type = gettype( $theVar ) ;
        switch( $type ) {

            case 'array' :
                $output .= $indent . $var_name . ' '.$method.' Array ('.$nl;
                $keys=array_keys($theVar);
                foreach($keys as $name) {
                    $value=&$theVar[$name];
                    var_log($value, $name, $reference.'["'.$name.'"]', '=', true);
                }
                $output .= $indent.')'.$nl;
                break ;

            case 'object' :
                $output .= $indent.$var_name.' = '.get_class($theVar).' {'.$nl;
                foreach($theVar as $name=>$value) {
                    var_log($value, $name, $reference.'->'.$name, '->', true);
                }
                $output .= $indent.'}'.$nl;
                break ;

            case 'string' :
                $output .= $indent . $var_name . ' '.$method.' "'.$theVar.'"'.$nl;
                break ;

            default :
                $output .= $indent . $var_name . ' '.$method.' ('.$type.') '.$theVar.$nl;
                break ;

        }

        // $var=$var[$block];

    }

    -- $depth ;

    if( $sub == false )
        return $output ;

}

// var_log( $var, '$name' ) ;

?>

Hope it works well for you!
jonbarnett at gmail dot com 02-Oct-2006 12:25
dumping objects that reference each other could lead to infinite recursion
<?php
$brother = new Sibling();
$sister = new Sibling();
$brother->sister = $sister;
$sister->brother = $brother;

var_dump($brother);
/* dumps all of $brother's properties, including "sister", which dumps all of $sister's properties, including "brother", etc. */
?>
edwardzyang at thewritingpot dot com 20-Mar-2005 02:06
If you're like me and uses var_dump whenever you're debugging, you might find these two "wrapper" functions helpful.

This one automatically adds the PRE tags around the var_dump output so you get nice formatted arrays.

<?php

function var_dump_pre($mixed = null) {
  echo '<pre>';
  var_dump($mixed);
  echo '</pre>';
  return null;
}

?>

This one returns the value of var_dump instead of outputting it.

<?php

function var_dump_ret($mixed = null) {
  ob_start();
  var_dump($mixed);
  $content = ob_get_contents();
  ob_end_clean();
  return $content;
}

?>

Fairly simple functions, but they're infinitely helpful (I use var_dump_pre() almost exclusively now).
anon 28-Jan-2005 06:31
var_dump(get_defined_vars());
will dump all defined variables to the browser.


変数の文字列表現を出力または返す

  • ≪ var_dump
  • ウェブサービス ≫
  • PHP Manual
  • 変数操作 関数
  • 変数の文字列表現を出力または返す

var_export

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

var_export — 変数の文字列表現を出力または返す

説明

var_export(mixed $value, bool $return = false): ?string

var_export() は、 渡された変数に関する構造化された情報を返します。この関数は var_dump() に似ていますが、 返される表現が有効な PHP コードであるところが異なります。

パラメータ

value

エクスポートしたい変数

return

使用されかつ true に設定された場合、var_export() は変数表現を出力する代わりに返します。

戻り値

return パラメータが使用され true と評価される場合、 変数表現を返します。そうでない場合、この関数は null を返します。

変更履歴

バージョン | 説明
8.2.0 | クラス名をエクスポートする場合、そのクラス名は完全修飾名になりました。 これより前のバージョンでは、先頭のバックスラッシュが省略されていました。
7.3.0 | stdClass オブジェクトは、 存在しないメソッド stdClass::__setState() を使わず、 配列をオブジェクトにキャストした形 ((object) array( ... )) でエクスポートされるようになりました。 この変更によって、stdClass がエクスポート可能になり、 このバージョンより前の PHP でもエクスポートした結果が動くようになりました。

例

例1 var_export() の例

<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
?>

上の例の出力は以下となります。

array (
  0 => 1,
  1 => 2,
  2 =>
  array (
    0 => 'a',
    1 => 'b',
    2 => 'c',
  ),
)
<?php

$b = 3.1;
$v = var_export($b, true);
echo $v;

?>

上の例の出力は以下となります。

3.1

例2 PHP 7.3.0 以降で stdClass をエクスポートする

<?php
$person = new stdClass;
$person->name = 'ElePHPant ElePHPantsdotter';
$person->website = 'https://php.net/elephpant.php';

var_export($person);

上の例の出力は以下となります。

(object) array(
   'name' => 'ElePHPant ElePHPantsdotter',
   'website' => 'https://php.net/elephpant.php',
)

例3 クラスのエクスポート

<?php
class A { public $var; }
$a = new A;
$a->var = 5;
var_export($a);
?>

上の例の出力は以下となります。

A::__set_state(array(
   'var' => 5,
))

例4 __set_state() の使用法

<?php
class A
{
public $var1;
public $var2;

public static function __set_state($an_array)
{
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}

$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';

eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
// 'var1' => 5,
// 'var2' => 'foo',
// ));
var_dump($b);
?>

上の例の出力は以下となります。

object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}

注意

注意:

リソース型 の変数は、 この関数ではエクスポートする事ができません。

注意:

var_export() では循環参照を扱うことができません。 循環参照を表す解析可能な PHP コードを生成することは、不可能に近いからです。 配列やオブジェクトを完全な形式で扱いたい場合は serialize() を使用してください。

警告

PHP 8.2.0 より前のバージョンでは、var_export() でオブジェクトをエクスポートするときに、 名前空間を指定したクラスの名前の先頭にあるバックスラッシュは含めませんでした。これは互換性を高めるためでした。

注意:

var_export() が生成する PHP を評価できるようにするためには、 処理対象のすべてのオブジェクトがマジックメソッド __set_state を実装している必要があります。 これの唯一の例外は stdClass です。 stdClass は、配列をオブジェクトにキャストした形でエクスポートされます。

参考

  • print_r() - 指定した変数に関する情報を解りやすく出力する
  • serialize() - 値の保存可能な表現を生成する
  • var_dump() - 変数に関する情報をダンプする

User Contributed Notes

php dot net at rupert-eibauer dot de 08-Oct-2022 01:02
Warning: var_export fails to create distinct property names if you have a private property in your class and one with the same name in a parent class.

<?php
class TestParent {
    private $priv = "Parent Private";
    protected $prot = "Parent Protected";
    public $pub = "Parent Public";
}
class Test extends TestParent {
    private $priv = "Private Info";
    protected $prot = "Protected Info";
    public $pub = "Public Info";
}
$t = new Test;
var_export($t);
Result:
Test::__set_state(array(
   'priv' => 'Private Info',
   'prot' => 'Protected Info',
   'pub' => 'Public Info',
   'priv' => 'Parent Private',
))
?>

To work around that problem, I created my own var_export, which also uses a more compact format, and using [] for arrays:

<?php
function var_export3($var, $indent = '') {
    if (is_array($var)) {
        $indent .= '    ';
        $ret = '';
        $i = 0;
        $is_num = true;
        foreach ($var AS $idx => $value) {
            if ($ret != '')
                $ret .= ",\n";
            if ($is_num && $idx === $i) {
                $i++;
                $ret .= $indent.var_export3($value, $indent);
            } else {
                $is_num = false;
                $ret .= $indent.var_export3($idx).'=>'.var_export3($value, $indent);
            }
        }
        if ($ret == '')
            return "[]";
        return "[\n".$ret."]";
    } else if (is_bool($var)) {
        return $var ? 'true' : 'false';
    } else if (is_int($var) || is_float($var)) {
        return $var;
    } else if (is_string($var)) {
        if ($var === (string)(float)$var)
            return $var;
        return "'".str_replace(["\0", '\\', '\''], ["\\0", '\\', '\\\''], $var)."'";
    } else if (is_object($var)) {
        $class = get_class($var);
        if ($class == 'stdClass') {
            $prefix = ;
            return "(object)".var_export3((array)$var, $indent);
        } else {
            return "$class::__set_state(".var_export3((array)$var, $indent).')';
        }
    }
}

echo var_export3($t)."\n";
Result:
Test::__set_state([
        '\0Test\0priv'=>'Private Info',
        '\0*\0prot'=>'Protected Info',
        'pub'=>'Public Info',
        '\0TestParent\0priv'=>'Parent Private'])
?>
Note that replacement for non-printable characters is not complete.
steven at nevvix dot com 13-Sep-2019 03:52
I improved my previous varexport().

<?php
/**
 * PHP var_export() with short array syntax (square brackets) indented 2 spaces.
 *
 * NOTE: The only issue is when a string value has `=>\n[`, it will get converted to `=> [`
 * @link https://www.php.net/manual/en/function.var-export.php
 */
function varexport($expression, $return=FALSE) {
    $export = var_export($expression, TRUE);
    $patterns = [
        "/array \(/" => '[',
        "/^([ ]*)\)(,?)$/m" => '$1]$2',
        "/=>[ ]?\n[ ]+\[/" => '=> [',
        "/([ ]*)(\'[^\']+\') => ([\[\'])/" => '$1$2 => $3',
    ];
    $export = preg_replace(array_keys($patterns), array_values($patterns), $export);
    if ((bool)$return) return $export; else echo $export;
}

$array = [
    'str' => 'Test
       spaces',
       0 => 33,
       1 => TRUE,
       [3,4,'d',[]],
    'arr' => [
        'text with spaces' => '[Tes\'t"s":
 => [
 =>
  [
   {
      spaces',
    ],
    "str2" => "Test's'
 } spaces",
    'arr2' => [
        'text with spaces' => [
            'arr3' => [
                'text with spaces' => 'Te": "st \' => [
      spaces',
            ],
        ],
    ],
];
varexport($array);
// Result:
```
[
  'str' => 'Test
       spaces',
  0 => 33,
  1 => true,
  2 => [
    0 => 3,
    1 => 4,
    2 => 'd',
    3 => [
    ],
  ],
  'arr' => [
    'text with spaces' => '[Tes\'t"s":
 => [
 => [
   {
      spaces',
  ],
  'str2' => 'Test\'s\'
 } spaces',
  'arr2' => [
    'text with spaces' => [
      'arr3' => [
        'text with spaces' => 'Te": "st \' => [
      spaces',
      ],
    ],
  ],
]
```
NOTE: The only issue is when a string value has `=>\n[`, it will get converted to `=> [`
beverasrilakshmi at gmail dot com 01-May-2019 08:24
Just for fun, trying to understand the definition of "returns parsable string"....any type of variable passed to var_export, the return value will be a typecasted as string...

<?php

$var = 1;
var_dump($var); //type is int as expected
echo "<br>";
$var_after_export = var_export($var,true); //returning $var will now makes it a string
var_dump($var_after_export);

?>
steven at nevvix dot com 18-Jun-2018 06:24
/**
 * var_export() with square brackets and indented 4 spaces.
 */
<?php
function varexport($expression, $return=FALSE) {
    $export = var_export($expression, TRUE);
    $export = preg_replace("/^([ ]*)(.*)/m", '$1$1$2', $export);
    $array = preg_split("/\r\n|\n|\r/", $export);
    $array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [NULL, ']$1', ' => ['], $array);
    $export = join(PHP_EOL, array_filter(["["] + $array));
    if ((bool)$return) return $export; else echo $export;
}
Mark P 29-Jan-2016 09:09
It doesn't appear to be documented, but the behaviour of `var_export()` changed in PHP 7.

Previously, `var_export(3.)` returned "3", now it returns "3.0".
cpmcgrat()uci ! edu 27-Jul-2015 10:45
When trying to use __set_state() to rebuild a huge, tricky class use the following:

class Foo
{
    public $a;
    public $b;
    public $c;
    public $d;
    public $e;
    public $f;
    public $g;
    public $h;
    public $i;

    public function __set_state($array)
    {
        $obj = new ArrayConfig;
        foreach($array as $k => $v) {
            eval('$obj->'.$k.' = '.$v.';');
        }
        return $obj;
    }
}

This will return a reconstructed version of the class without having to manually type each individual object in the class manually (as shown in the __set_state() example)
dan at coders dot co dot nz 10-Jan-2014 02:11
I found that my complex type was exporting with
  stdClass::__set_state()
in places. Not only was that strange and messy, it cannot be eval()-ed back in at all. Fatal error. Doh!

However a quick string-replace tidy-up of the result rendered it valid again.

    $macro = var_export($data, TRUE);
    $macro = str_replace("stdClass::__set_state", "(object)", $macro);
    $macro = '$data = ' . $macro . ';';

And now the string I output *can* be evaluated back in again.
wyattstorch42 at outlook dot com 22-Dec-2013 10:11
If you call var_export() on an instance of stdClass, it attempts to export it using ::__set_state(), which, for some reason, is not implemented in stdClass.

However, casting an associative array to an object usually produces the same effect (at least, it does in my case). So I wrote an improved_var_export() function to convert instances of stdClass to (object) array () calls. If you choose to export objects of any other class, I'd advise you to implement ::__set_state().

<?php
/**
 * An implementation of var_export() that is compatible with instances
 * of stdClass.
 * @param mixed $variable The variable you want to export
 * @param bool $return If used and set to true, improved_var_export()
 *     will return the variable representation instead of outputting it.
 * @return mixed|null Returns the variable representation when the
 *     return parameter is used and evaluates to TRUE. Otherwise, this
 *     function will return NULL.
 */
function improved_var_export ($variable, $return = false) {
    if ($variable instanceof stdClass) {
        $result = '(object) '.improved_var_export(get_object_vars($variable), true);
    } else if (is_array($variable)) {
        $array = array ();
        foreach ($variable as $key => $value) {
            $array[] = var_export($key, true).' => '.improved_var_export($value, true);
        }
        $result = 'array ('.implode(', ', $array).')';
    } else {
        $result = var_export($variable, true);
    }

    if (!$return) {
        print $result;
        return null;
    } else {
        return $result;
    }
}

// Example usage:
$obj = new stdClass;
$obj->test = 'abc';
$obj->other = 6.2;
$obj->arr = array (1, 2, 3);

improved_var_export((object) array (
    'prop1' => true,
    'prop2' => $obj,
    'assocArray' => array (
        'apple' => 'good',
        'orange' => 'great'
    )
));

/* Output:
(object) array ('prop1' => true, 'prop2' => (object) array ('test' => 'abc', 'other' => 6.2, 'arr' => array (0 => 1, 1 => 2, 2 => 3)), 'assocArray' => array ('apple' => 'good', 'orange' => 'great'))
*/
?>

Note: This function spits out a single line of code, which is useful to save in a cache file to include/eval. It isn't formatted for readability. If you want to print a readable version for debugging purposes, then I would suggest print_r() or var_dump().
chudinov at yahoo dot com 29-Nov-2013 09:55
Looks like since version 5.4.22 var_export uses the serialize_precision ini setting, rather than the precision one used for normal output of floating-point numbers.
As a consequence since version 5.4.22 for example var_export(1.1) will output 1.1000000000000001 (17 is default precision value) and not 1.1 as before.

<?php
//ouput 1.1000000000000001
var_export(1.1)
 ?>
NitPicker 10-Jul-2013 04:33
When it comes to HTML output (as discussed below), it's all fun and games until someone pokes their eye out with a "<".

Surround it with "<pre>", but do remember to wrap it in htmlspecialchars() as well.
sergei dot solomonov at gmail dot com 04-Oct-2012 04:00
<?php
$closure = function(){};

var_export($closure);

// output: Closure::__set_state(array())
?>
kexianbin at diyism dot com 16-Sep-2012 02:33
to use my_var_export(), it is as beautiful as var_export() and as could deal with recursive reference as print_r():

<?php
function my_var_export($var, $is_str=false)
         {$rtn=preg_replace(array('/Array\s+\(/', '/\[(\d+)\] => (.*)\n/', '/\[([^\d].*)\] => (.*)\n/'), array('array (', '\1 => \'\2\''."\n", '\'\1\' => \'\2\''."\n"), substr(print_r($var, true), 0, -1));
          $rtn=strtr($rtn, array("=> 'array ('"=>'=> array ('));
          $rtn=strtr($rtn, array(")\n\n"=>")\n"));
          $rtn=strtr($rtn, array("'\n"=>"',\n", ")\n"=>"),\n"));
          $rtn=preg_replace(array('/\n +/e'), array('strtr(\'\0\', array(\'    \'=>\'  \'))'), $rtn);
          $rtn=strtr($rtn, array(" Object',"=>" Object'<-"));
          if ($is_str)
             {return $rtn;
             }
          else
              {echo $rtn;
              }
         }

?>
jodybrabec at gmail dot com 28-Mar-2012 05:52
WORKAROUND for error "Nesting level too deep - recursive dependency":
ob_start();
var_dump($GLOBALS);
$dataDump = ob_get_clean();
echo $dataDump;
Anonymous 11-Nov-2011 09:13
There is an even simpler way to have clean output from var_export and print_r in html pages:

<?php
function pretty_var($myArray)
{
    echo "<pre>";
    var_export($myArray);
    echo "</pre>";
}
?>
laszlo dot heredy at gmail dot com 06-Oct-2010 01:57
Try this function instead of var_export($GLOBALS) or var_dump($GLOBALS) when all you want to know is the values of the variables you set on the current page.

<?php
function globalvars(){
    $result=array();
    $skip=array('GLOBALS','_ENV','HTTP_ENV_VARS',
                        '_POST','HTTP_POST_VARS','_GET',
                        'HTTP_GET_VARS',
                        '_COOKIE',
                        'HTTP_COOKIE_VARS','_SERVER',
                        'HTTP_SERVER_VARS',
                        '_FILES','HTTP_POST_FILES',
                        '_REQUEST','HTTP_SESSION_VARS',
                        '_SESSION');
    foreach($GLOBALS as $k=>$v)
        if(!in_array($k,$skip))
            $result[$k]=$v;
    return $result;
}//functionglobalvars

var_export(globalvars());
?>
4n4jmza02 at sneakemail dot com 17-Jun-2010 04:50
I learned the hard way that if var_export encounters a resource handle it exports it as "NULL", even if it is a valid handle. The documentation states that a handle cannot be exported, but it does not describe what happens if you try to do so anyway.

I had been using var_export in some debugging code while tracing a problem with a resource handle not being generated and ended up thinking that null handles were still being generated long after the problem had been fixed.
john dot risken at gmail dot com 16-Jan-2010 03:53
I didn't see this simple little item anywhere in the user notes. Maybe I'm blind!

Anyway, var_export and print_r both use spaces and carriage returns for formatting.  Sent to an html page, most of the formatting is lost. This simple function prints a nicely formatted array to an html screen:

<?php
function pretty_var($myArray){
    print str_replace(array("\n"," "),array("<br>","&nbsp;"), var_export($myArray,true))."<br>";
}
?>
rarioj at gmail dot com 28-Oct-2009 10:43
NOTE: If an object Foo has __set_state() method, but if that object contains another object Bar with no __set_state() method implemented, the resulting PHP expression will not be eval()-able.

This is an example (object Test that contains an instance of Exception).

<?php

class Test
{
  public $one;
  public $two;
  public function __construct($one, $two)
  {
    $this->one = $one;
    $this->two = $two;
  }
  public static function __set_state(array $array)
  {
    return new self($array['one'], $array['two']);
  }
}

$test = new Test('one', new Exception('test'));

$string = var_export($test, true);

/* $string =
Test::__set_state(array(
   'one' => 'one',
   'two' =>
  Exception::__set_state(array(
     'message' => 'test',
     'string' => '',
     'code' => 0,
     'file' => 'E:\\xampp\\htdocs\\test.Q.php',
     'line' => 35,
     'trace' =>
    array (
    ),
     'previous' => NULL,
  )),
))
*/

eval('$test2 = '.$string.';'); // Fatal error: Call to undefined method Exception::__set_state

?>

So avoid using var_export() on a complex array/object that contains other objects. Instead, use serialize() and unserialize() functions.

<?php

$string = 'unserialize('.var_export(serialize($test), true).')';

eval('$test2 = '.$string.';');

var_dump($test == $test2); // bool(true)

?>
ravenswd at gmail dot com 07-Jul-2009 10:32
(This replaces my note of 3-July-2009. The original version produced no output if a variable contained an empty array, or an array consisting only of empty arrays. For example, $bigarray['x'] = array(); Also, I have added a second version of the function.)

The output can be difficult to decipher when looking at an array with many levels and many elements on each level. For example:

<?php
print ('$bigarray = ' . var_export($bigarray, true) . "\n");
?>

will return:

$bigarray = array(
... (500 lines skipped) ...
          'mod' => 'charlie',

Whereas the routine below can be called with:

<?php
recursive_print ('$bigarray', $bigarray);
?>

and it will return:

$bigarray = array()
... (500 lines skipped) ...
$bigarray['foo']['bar']['0']['somethingelse']['mod'] = 'charlie'

Here's the function:

<?php
function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . $varval . "<br>\n";
  else:
    print $varname . " = array()<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "['" . $key . "']", $val);
    endforeach;
  endif;
}
?>

For those who want a version that produces valid PHP code, use this version:

<?php
function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
  else:
    print $varname . " = array();<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
    endforeach;
  endif;
}
?>

If your output is to a text file and not an HTML page, remove the <br>s.
ravenswd at gmail dot com 03-Jul-2009 05:21
The output can be difficult to decipher when looking at an array with many levels and many elements on each level. For example:

<?php
print ('$bigarray = ' . var_export($bigarray, true) . "\n");
?>

will return:

$bigarray = array(
... (500 lines skipped) ...
          'mod' => 'charlie',

Whereas the routine below can be called with:

<?php
recursive_print ('$bigarray', $bigarray);
?>

and it will return:

$bigarray['firstelement'] = 'something'
... (500 lines skipped) ...
$bigarray['foo']['bar']['0']['somethingelse']['mod'] = 'charlie'

Here's the function:

<?php
function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . $varval . "<br>\n";
  else:
    foreach ($varval as $key => $val):
      recursive_print ($varname . "['" . $key . "']", $val);
    endforeach;
  endif;
}
?>
cmusicfan (at) gmail (daught) com 11-Jun-2009 09:19
Caution! var_export will add a backslash to single quotes (').

You may want to use stripslashes() to remove the mysteriously added backslashes.
stangelanda at arrowquick dot com 29-Jun-2007 04:20
I have been looking for the best method to store data in cache files.

First, I've identified two limitations of var_export verus serialize.  It can't store internal references inside of an array and it can't store a nested object or an array containing objects before PHP 5.1.0.

However, I could deal with both of those so I created a benchmark.  I used a single array containing from 10 to 150 indexes.  I've generate the elements' values randomly using booleans, nulls, integers, floats, and some nested arrays (the nested arrays are smaller averaging 5 elements but created similarly).  The largest percentage of elements are short strings around 10-15 characters.  While there is a small number of long strings (around 500 characters).

Benchmarking returned these results for 1000 * [total time] / [iterations (4000 in this case)]

serialize 3.656, 3.575, 3.68, 3.933, mean of 3.71
include 7.099, 5.42, 5.185, 6.076, mean of 5.95
eval 5.514, 5.204, 5.011, 5.788, mean of 5.38

Meaning serialize is around 1 and a half times faster than var_export for a single large array.  include and eval were consistently very close but eval was usually a few tenths faster (eval did better this particular set of trials than usual). An opcode cache like APC might make include faster, but otherwise serialize is the best choice.
Glen 23-May-2007 05:47
Like previously reported, i find var_export() frustrating when dealing with recursive structures.  Doing a :

<?php
var_export($GLOBALS);
?>

fails.  Interestingly, var_dump() has some logic to avoid recursive references.  So :

<?php
var_dump($GLOBALS);
?>

works (while being more ugly).  Unlike var_export(), var_dump() has no option to return the string, so output buffering logic is required if you want to direct the output.
Zorro 04-Sep-2005 11:24
This function can't export EVERYTHING. Moreover, you can have an error on an simple recursive array:

$test = array();
$test["oops"] = & $test;

echo var_export($test);

=>

Fatal error:  Nesting level too deep - recursive dependency? in ??.php on line 59
linus at flowingcreativity dot net 04-Jul-2005 09:50
<roman at DIESPAM dot feather dot org dot ru>, your function has inefficiencies and problems. I probably speak for everyone when I ask you to test code before you add to the manual.

Since the issue of whitespace only comes up when exporting arrays, you can use the original var_export() for all other variable types. This function does the job, and, from the outside, works the same as var_export().

<?php

function var_export_min($var, $return = false) {
    if (is_array($var)) {
        $toImplode = array();
        foreach ($var as $key => $value) {
            $toImplode[] = var_export($key, true).'=>'.var_export_min($value, true);
        }
        $code = 'array('.implode(',', $toImplode).')';
        if ($return) return $code;
        else echo $code;
    } else {
        return var_export($var, $return);
    }
}

?>
paul at worldwithoutwalls dot co dot uk 24-Nov-2004 11:22
var_export() differs from print_r() for variables that are resources, with print_r() being more useful if you are using the function for debugging purposes.
e.g.
<?php
$res = mysql_connect($dbhost, $dbuser, $dbpass);
print_r($res); //output: Resource id #14
var_export($res); //output: NULL
?>
php_manual_note at bigredspark dot com 16-Oct-2003 12:43
[john holmes]
True, but that method would require you to open and read the file into a variable and then unserialize it into another variable.

Using a file created with var_export() could simply be include()'d, which will be less code and faster.

[kaja]
If you are trying to find a way to temporarily save variables into some other file, check out serialize() and unserialize() instead - this one is more useful for its readable property, very handy while debugging.

[original post]
If you're like me, you're wondering why a function that outputs "correct PHP syntax" is useful. This function can be useful in implementing a cache system. You can var_export() the array into a variable and write it into a file. Writing a string such as

<?php
$string = '<?php $array = ' . $data . '; ?>';
?>

where $data is the output of var_export() can create a file that can be easily include()d back into the script to recreate $array.

The raw output of var_export() could also be eval()d to recreate the array.

---John Holmes...


ウェブサービス

  • OAuth
    • はじめに
    • インストール/設定
    • 定義済み定数
    • 例
    • OAuth 関数
    • OAuth — OAuth クラス
    • OAuthProvider — OAuthProvider クラス
    • OAuthException — OAuthException クラス
  • SOAP
    • はじめに
    • インストール/設定
    • 定義済み定数
    • SOAP 関数
    • SoapClient — SoapClient クラス
    • SoapServer — SoapServer クラス
    • SoapFault — SoapFault クラス
    • SoapHeader — SoapHeader クラス
    • SoapParam — SoapParam クラス
    • SoapVar — SoapVar クラス
  • Yar — Yet Another RPC Framework
    • はじめに
    • インストール/設定
    • 定義済み定数
    • 例
    • Yar_Server — The Yar_Server class
    • Yar_Client — The Yar_Client class
    • Yar_Concurrent_Client — The Yar_Concurrent_Client class
    • Yar_Server_Exception — The Yar_Server_Exception class
    • Yar_Client_Exception — The Yar_Client_Exception class
  • XML-RPC
    • はじめに
    • インストール/設定
    • XML-RPC 関数

User Contributed Notes

There are no user contributed notes for this page.


OAuth

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
  • 定義済み定数
  • 例
    • 米Yahoo! の位置情報プラットフォーム FireEagle の例
  • OAuth 関数
    • oauth_get_sbs — SBSを生成する
    • oauth_urlencode — URI を RFC 3686 形式でエンコードする
  • OAuth — OAuth クラス
    • OAuth::__construct — 新しい OAuth オブジェクトを作成する
    • OAuth::__destruct — デストラクタ
    • OAuth::disableDebug — デバッグを無効にする
    • OAuth::disableRedirects — リダイレクトを無効にする
    • OAuth::disableSSLChecks — SSL チェックを無効にする
    • OAuth::enableDebug — デバッグを有効にする
    • OAuth::enableRedirects — リダイレクトを有効にする
    • OAuth::enableSSLChecks — SSL チェックを有効にする
    • OAuth::fetch — OAuth で保護されたリソースを取得する
    • OAuth::generateSignature — シグネチャを生成する
    • OAuth::getAccessToken — アクセストークンを取得する
    • OAuth::getCAPath — CA 情報を取得する
    • OAuth::getLastResponse — 直近のレスポンスを取得する
    • OAuth::getLastResponseHeaders — 最後のレスポンスのヘッダを取得する
    • OAuth::getLastResponseInfo — 直近のレスポンスの HTTP 情報を取得する
    • OAuth::getRequestHeader — OAuth ヘッダ文字列シグネチャを生成する
    • OAuth::getRequestToken — リクエストトークンを取得する
    • OAuth::setAuthType — 認証方式を設定する
    • OAuth::setCAPath — CA パスおよび情報を設定する
    • OAuth::setNonce — 続くリクエスト用のノンスを設定する
    • OAuth::setRequestEngine — setRequestEngine
    • OAuth::setRSACertificate — RSA 証明書を設定する
    • OAuth::setSSLChecks — リクエストに固有の SSL チェックを調整する
    • OAuth::setTimestamp — タイムスタンプを設定する
    • OAuth::setToken — トークンと secret を設定する
    • OAuth::setVersion — OAuth のバージョンを設定する
  • OAuthProvider — OAuthProvider クラス
    • OAuthProvider::addRequiredParameter — 必須パラメータを追加する
    • OAuthProvider::callconsumerHandler — consumerNonceHandler コールバックをコールする
    • OAuthProvider::callTimestampNonceHandler — timestampNonceHandler コールバックをコールする
    • OAuthProvider::calltokenHandler — tokenNonceHandler コールバックをコールする
    • OAuthProvider::checkOAuthRequest — oauth リクエストをチェックする
    • OAuthProvider::__construct — 新しい OAuthProvider オブジェクトを作る
    • OAuthProvider::consumerHandler — consumerHandler コールバックを設定する
    • OAuthProvider::generateToken — ランダムなトークンを生成する
    • OAuthProvider::is2LeggedEndpoint — is2LeggedEndpoint
    • OAuthProvider::isRequestTokenEndpoint — isRequestTokenEndpoint を設定する
    • OAuthProvider::removeRequiredParameter — 必須パラメータを削除する
    • OAuthProvider::reportProblem — 問題を報告する
    • OAuthProvider::setParam — パラメータを設定する
    • OAuthProvider::setRequestTokenPath — リクエストトークンのパスを設定する
    • OAuthProvider::timestampNonceHandler — timestampNonceHandler コールバックを設定する
    • OAuthProvider::tokenHandler — tokenHandler コールバックを設定する
  • OAuthException — OAuthException クラス

User Contributed Notes

There are no user contributed notes for this page.


はじめに

この拡張モジュールは、OAuth 1.0a コンシューマおよびプロバイダの機能を提供します。 OAuth は HTTP 上に構築された認証プロトコルで、 アプリケーションからデータへのアクセスが安全にできるようになります。 アプリケーション側でユーザー名やパスワードを保存する必要はありません。

User Contributed Notes

There are no user contributed notes for this page.


要件

PECL/oauth には、PHP 5.1 以降と ext/hash、そして ext/pcre が必要です。

PECL/oauth は、ビルド時に選択した場合に、オプションで libcurl が必要な場合があります。 libcurl を含めてコンパイルする場合、libcurl を HTTPS サポート付きでビルドしなければいけません。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 » https://pear.php.net/package/oauth

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

これらの定数の大半には何らかの問題があります。問題点については OAuth の公式ページにも » 問題一覧 があります。 ここで扱う定数名は PHP 固有のものですが、命名方式は似ています。

OAUTH_SIG_METHOD_RSASHA1 (string)
OAuth RSA-SHA1 署名方式。
OAUTH_SIG_METHOD_HMACSHA1 (string)

OAuth HMAC-SHA1 署名方式。

OAUTH_SIG_METHOD_HMACSHA256 (string)
OAuth HMAC-SHA256 署名方式。
OAUTH_AUTH_TYPE_AUTHORIZATION (string)

この定数は、OAuth パラメータを Authorization ヘッダ内に記述することを表します。

OAUTH_AUTH_TYPE_NONE (string)

この定数は、NoAuth OAuth リクエストを表します。

OAUTH_AUTH_TYPE_URI (string)

この定数は、OAuth パラメータをリクエスト URI に記述することを表します。

OAUTH_AUTH_TYPE_FORM (string)

この定数は、OAuth パラメータを HTTP POST の本文の一部として記述することを表します。

OAUTH_HTTP_METHOD_GET (string)

GET メソッドを OAuth リクエストで使用します。

OAUTH_HTTP_METHOD_POST (string)

POST メソッドを OAuth リクエストで使用します。

OAUTH_HTTP_METHOD_PUT (string)

PUT メソッドを OAuth リクエストで使用します。

OAUTH_HTTP_METHOD_HEAD (string)

HEAD メソッドを OAuth リクエストで使用します。

OAUTH_HTTP_METHOD_DELETE (string)
DELETE メソッドを OAuth リクエストで使用します。
OAUTH_REQENGINE_STREAMS (int)
OAuth::setRequestEngine() で使用するもので、 エンジンを PHP ストリーム に設定します。 Curl を使う場合は OAUTH_REQENGINE_CURL を用います。
OAUTH_REQENGINE_CURL (int)
OAuth::setRequestEngine() で使用するもので、 エンジンを Curl に設定します。 PHP streams を使う場合は OAUTH_REQENGINE_STREAMS を用います。
OAUTH_OK (int)
無事に生きています。
OAUTH_BAD_NONCE (int)
oauth_nonce の値が前のリクエストで使われたものなので、 このリクエストでは使えません。
OAUTH_BAD_TIMESTAMP (int)
oauth_timestamp の値がサービスプロバイダに受け入れられませんでした。 この場合、レスポンスには oauth_acceptable_timestamps パラメータが含まれていなければなりません。
OAUTH_CONSUMER_KEY_UNKNOWN (int)
oauth_consumer_key が、一時的にサービスプロバイダに受け入れられませんでした。 プロバイダ側でコンシューマに制限をかけているなどの可能性が考えられます。
OAUTH_CONSUMER_KEY_REFUSED (int)
コンシューマキーが拒否されました。
OAUTH_INVALID_SIGNATURE (int)
oauth_signature が無効です。 サービスプロバイダが算出したシグネチャとマッチしません。
OAUTH_TOKEN_USED (int)
oauth_token が使用済みです。 これまでのリクエストで既に使用済みであるため、もう使うことはできません。
OAUTH_TOKEN_EXPIRED (int)
oauth_token の有効期限が切れました。
OAUTH_TOKEN_REVOKED (int)
oauth_token が無効になりました。もう使えません。
OAUTH_TOKEN_REJECTED (int)
oauth_token がサービスプロバイダに受け入れられませんでした。 理由は不明ですが、 トークンが発行されていない・すでに使用済みである・プロバイダ側で忘れられてしまった といった原因が考えられます。
OAUTH_VERIFIER_INVALID (int)
oauth_verifier が無効です。
OAUTH_PARAMETER_ABSENT (int)
必須パラメータが含まれていません。 この場合、レスポンスには oauth_parameters_absent パラメータが含まれていなければなりません。
OAUTH_SIGNATURE_METHOD_REJECTED (int)
oauth_signature_method がサービスプロバイダに受け入れられませんでした。

User Contributed Notes

There are no user contributed notes for this page.


例

目次

  • 米Yahoo! の位置情報プラットフォーム FireEagle の例

User Contributed Notes

There are no user contributed notes for this page.


米Yahoo! の位置情報プラットフォーム FireEagle の例

<?php
$req_url = 'https://fireeagle.yahooapis.com/oauth/request_token';
$authurl = 'https://fireeagle.yahoo.net/oauth/authorize';
$acc_url = 'https://fireeagle.yahooapis.com/oauth/access_token';
$api_url = 'https://fireeagle.yahooapis.com/api/0.1';
$conskey = 'your_consumer_key';
$conssec = 'your_consumer_secret';

session_start();

// セッションの state の値が1の場合、次のリクエストには oauth_token の値が含まれているはずである
if(!isset($_GET['oauth_token']) && $_SESSION['state']==1) $_SESSION['state'] = 0;
try {
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
if(!isset($_GET['oauth_token']) && !$_SESSION['state']) {
$request_token_info = $oauth->getRequestToken($req_url);
$_SESSION['secret'] = $request_token_info['oauth_token_secret'];
$_SESSION['state'] = 1;
header('Location: '.$authurl.'?oauth_token='.$request_token_info['oauth_token']);
exit;
} else if($_SESSION['state']==1) {
$oauth->setToken($_GET['oauth_token'],$_SESSION['secret']);
$access_token_info = $oauth->getAccessToken($acc_url);
$_SESSION['state'] = 2;
$_SESSION['token'] = $access_token_info['oauth_token'];
$_SESSION['secret'] = $access_token_info['oauth_token_secret'];
}
$oauth->setToken($_SESSION['token'],$_SESSION['secret']);
$oauth->fetch("$api_url/user.json");
$json = json_decode($oauth->getLastResponse());
print_r($json);
} catch(OAuthException $E) {
print_r($E);
}
?>

User Contributed Notes

There are no user contributed notes for this page.


OAuth 関数

目次

  • oauth_get_sbs — SBSを生成する
  • oauth_urlencode — URI を RFC 3686 形式でエンコードする

User Contributed Notes

There are no user contributed notes for this page.


SBSを生成する

  • ≪ OAuth 関数
  • oauth_urlencode ≫
  • PHP Manual
  • OAuth 関数
  • SBSを生成する

oauth_get_sbs

(PECL OAuth >=0.99.7)

oauth_get_sbs — SBSを生成する

説明

oauth_get_sbs(string $http_method, string $uri, array $request_parameters = ?): string

pecl/oauth に関するSBSを生成します

パラメータ

http_method

HTTPメソッド

uri

エンコードするURI

request_parameters

リクエストパラメータの配列

戻り値

SBSを返します

User Contributed Notes

There are no user contributed notes for this page.


URI を RFC 3686 形式でエンコードする

  • ≪ oauth_get_sbs
  • OAuth ≫
  • PHP Manual
  • OAuth 関数
  • URI を RFC 3686 形式でエンコードする

oauth_urlencode

(PECL OAuth >=0.99.2)

oauth_urlencode — URI を RFC 3686 形式でエンコードする

説明

oauth_urlencode(string $uri): string

URI を » RFC 3686 形式でエンコードします。

パラメータ

uri

エンコードしたい URI。

戻り値

» RFC 3686 形式でエンコードした文字列を返します。

User Contributed Notes

bohwaz 30-Mar-2010 07:20
Note that php5.3 rawurlencode will do exactly the same thing.

For PHP 5.2, easy replacement to this function :

<?php

function rfc3986_encode($str)
{
  $str = rawurlencode($str);
  $str = str_replace('%E7', '~', $str);
  return $str;
}

?>


OAuth クラス

(PECL OAuth >= 0.99.1)

はじめに

OAuth 拡張モジュールは、データプロバイダとやりとりするためのシンプルなインターフェイスを提供します。 OAuth HTTP 仕様を用いることで、プライベートなリソースを保護します。

クラス概要

class OAuth {
/* プロパティ */
public $debug;
public $sslChecks;
public $debugInfo;
/* メソッド */
public __construct(
string $consumer_key,
string $consumer_secret,
string $signature_method = OAUTH_SIG_METHOD_HMACSHA1,
int $auth_type = 0
)
public __destruct(): void
public disableDebug(): bool
public disableRedirects(): bool
public disableSSLChecks(): bool
public enableDebug(): bool
public enableRedirects(): bool
public enableSSLChecks(): bool
public fetch(
string $protected_resource_url,
array $extra_parameters = ?,
string $http_method = ?,
array $http_headers = ?
): mixed
public generateSignature(string $http_method, string $url, mixed $extra_parameters = ?): string|false
public getAccessToken(string $access_token_url, string $verifier_token = ?, string $http_method = ?): array
public getCAPath(): array
public getLastResponse(): string
public getLastResponseHeaders(): string|false
public getLastResponseInfo(): array
public getRequestHeader(string $http_method, string $url, mixed $extra_parameters = ?): string|false
public getRequestToken(string $request_token_url, string $callback_url = ?, string $http_method = ?): array
public setAuthType(int $auth_type): bool
public setCAPath(string $ca_path = ?, string $ca_info = ?): mixed
public setNonce(string $nonce): mixed
public setRequestEngine(int $reqengine): void
public setRSACertificate(string $cert): mixed
public setSSLChecks(int $sslcheck): bool
public setTimestamp(string $timestamp): mixed
public setToken(string $token, string $token_secret): bool
public setVersion(string $version): bool
}

プロパティ

debug

sslChecks

debugInfo

目次

  • OAuth::__construct — 新しい OAuth オブジェクトを作成する
  • OAuth::__destruct — デストラクタ
  • OAuth::disableDebug — デバッグを無効にする
  • OAuth::disableRedirects — リダイレクトを無効にする
  • OAuth::disableSSLChecks — SSL チェックを無効にする
  • OAuth::enableDebug — デバッグを有効にする
  • OAuth::enableRedirects — リダイレクトを有効にする
  • OAuth::enableSSLChecks — SSL チェックを有効にする
  • OAuth::fetch — OAuth で保護されたリソースを取得する
  • OAuth::generateSignature — シグネチャを生成する
  • OAuth::getAccessToken — アクセストークンを取得する
  • OAuth::getCAPath — CA 情報を取得する
  • OAuth::getLastResponse — 直近のレスポンスを取得する
  • OAuth::getLastResponseHeaders — 最後のレスポンスのヘッダを取得する
  • OAuth::getLastResponseInfo — 直近のレスポンスの HTTP 情報を取得する
  • OAuth::getRequestHeader — OAuth ヘッダ文字列シグネチャを生成する
  • OAuth::getRequestToken — リクエストトークンを取得する
  • OAuth::setAuthType — 認証方式を設定する
  • OAuth::setCAPath — CA パスおよび情報を設定する
  • OAuth::setNonce — 続くリクエスト用のノンスを設定する
  • OAuth::setRequestEngine — setRequestEngine
  • OAuth::setRSACertificate — RSA 証明書を設定する
  • OAuth::setSSLChecks — リクエストに固有の SSL チェックを調整する
  • OAuth::setTimestamp — タイムスタンプを設定する
  • OAuth::setToken — トークンと secret を設定する
  • OAuth::setVersion — OAuth のバージョンを設定する

User Contributed Notes

There are no user contributed notes for this page.


新しい OAuth オブジェクトを作成する

  • ≪ OAuth
  • OAuth::__destruct ≫
  • PHP Manual
  • OAuth
  • 新しい OAuth オブジェクトを作成する

OAuth::__construct

(PECL OAuth >= 0.99.1)

OAuth::__construct — 新しい OAuth オブジェクトを作成する

説明

public OAuth::__construct(
string $consumer_key,
string $consumer_secret,
string $signature_method = OAUTH_SIG_METHOD_HMACSHA1,
int $auth_type = 0
)

新しい OAuth オブジェクトを作成します。

パラメータ

consumer_key

サービスプロバイダが提供する consumer key。

consumer_secret

サービスプロバイダが提供する consumer secret。

signature_method

このオプションのパラメータで、使用する署名方式を定義します。 デフォルトは OAUTH_SIG_METHOD_HMACSHA1 (HMAC-SHA1) です。

auth_type

このオプションのパラメータで、OAuth パラメータをコンシューマに渡す方法を定義します。 デフォルトは OAUTH_AUTH_TYPE_AUTHORIZATION (Authorization ヘッダを使用する) です。

User Contributed Notes

mgfrobozz at gmail dot com 23-Jan-2017 05:29
The authorization type enums as of oauth-1.2.3 are
OAUTH_AUTH_TYPE_AUTHORIZATION
OAUTH_AUTH_TYPE_URI
OAUTH_AUTH_TYPE_FORM
OAUTH_AUTH_TYPE_NONE
mgfrobozz at gmail dot com 23-Jan-2017 05:27
The signature methods available as of oauth-1.2.3 are:
OAUTH_SIG_METHOD_HMACSHA1
OAUTH_SIG_METHOD_HMACSHA256
OAUTH_SIG_METHOD_RSASHA1
OAUTH_SIG_METHOD_PLAINTEXT


デストラクタ

  • ≪ OAuth::__construct
  • OAuth::disableDebug ≫
  • PHP Manual
  • OAuth
  • デストラクタ

OAuth::__destruct

(PECL OAuth >= 0.99.9)

OAuth::__destruct — デストラクタ

説明

public OAuth::__destruct(): void

デストラクタです。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

参考

  • OAuth::__construct() - 新しい OAuth オブジェクトを作成する

User Contributed Notes

There are no user contributed notes for this page.


デバッグを無効にする

  • ≪ OAuth::__destruct
  • OAuth::disableRedirects ≫
  • PHP Manual
  • OAuth
  • デバッグを無効にする

OAuth::disableDebug

(PECL OAuth >= 0.99.3)

OAuth::disableDebug — デバッグを無効にする

説明

public OAuth::disableDebug(): bool

冗長なリクエスト情報を無効にします (デフォルトは無効です)。 あるいは、debug プロパティに false を設定することによってもデバッグを無効にできます。

パラメータ

この関数にはパラメータはありません。

戻り値

true

変更履歴

バージョン | 説明
PECL oauth 0.99.8 | debug プロパティが追加されました。

参考

  • OAuth::enableDebug() - デバッグを有効にする

User Contributed Notes

There are no user contributed notes for this page.


リダイレクトを無効にする

  • ≪ OAuth::disableDebug
  • OAuth::disableSSLChecks ≫
  • PHP Manual
  • OAuth
  • リダイレクトを無効にする

OAuth::disableRedirects

(PECL OAuth >= 0.99.9)

OAuth::disableRedirects — リダイレクトを無効にする

説明

public OAuth::disableRedirects(): bool

リダイレクト先を自動的にたどる機能を無効にし、リクエストを手動でリダイレクトできるようにします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

true

参考

  • OAuth::enableRedirects() - リダイレクトを有効にする

User Contributed Notes

There are no user contributed notes for this page.


SSL チェックを無効にする

  • ≪ OAuth::disableRedirects
  • OAuth::enableDebug ≫
  • PHP Manual
  • OAuth
  • SSL チェックを無効にする

OAuth::disableSSLChecks

(PECL OAuth >= 0.99.5)

OAuth::disableSSLChecks — SSL チェックを無効にする

説明

public OAuth::disableSSLChecks(): bool

通常の SSL ピア証明書およびホストのチェックを無効にします。 これは実運用に使うものではありません。 あるいは、sslChecks メンバーに false を設定することによっても SSL チェックを無効にできます。

パラメータ

この関数にはパラメータはありません。

戻り値

true

変更履歴

バージョン | 説明
PECL oauth 0.99.8 | sslChecks メンバーが追加されました。

参考

  • OAuth::enableSSLChecks() - SSL チェックを有効にする

User Contributed Notes

There are no user contributed notes for this page.


デバッグを有効にする

  • ≪ OAuth::disableSSLChecks
  • OAuth::enableRedirects ≫
  • PHP Manual
  • OAuth
  • デバッグを有効にする

OAuth::enableDebug

(PECL OAuth >= 0.99.3)

OAuth::enableDebug — デバッグを有効にする

説明

public OAuth::enableDebug(): bool

デバッグに使用できる、冗長なリクエスト情報の出力を有効にします。 デバッグ情報は debugInfo メンバーに格納されます。 あるいは、debug メンバーに false 以外の値を設定することによってもデバッグを有効にできます。

パラメータ

この関数にはパラメータはありません。

戻り値

true

変更履歴

バージョン | 説明
PECL oauth 0.99.8 | debug および debugInfo メンバーが追加されました。

参考

  • OAuth::disableDebug() - デバッグを無効にする

User Contributed Notes

There are no user contributed notes for this page.


リダイレクトを有効にする

  • ≪ OAuth::enableDebug
  • OAuth::enableSSLChecks ≫
  • PHP Manual
  • OAuth
  • リダイレクトを有効にする

OAuth::enableRedirects

(PECL OAuth >= 0.99.9)

OAuth::enableRedirects — リダイレクトを有効にする

説明

public OAuth::enableRedirects(): bool

自動的にリダイレクトをたどりまず。デフォルトで有効となっています。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

true

参考

  • OAuth::disableRedirects() - リダイレクトを無効にする

User Contributed Notes

There are no user contributed notes for this page.


SSL チェックを有効にする

  • ≪ OAuth::enableRedirects
  • OAuth::fetch ≫
  • PHP Manual
  • OAuth
  • SSL チェックを有効にする

OAuth::enableSSLChecks

(PECL OAuth >= 0.99.5)

OAuth::enableSSLChecks — SSL チェックを有効にする

説明

public OAuth::enableSSLChecks(): bool

通常の SSL ピア証明書およびホストのチェックを有効にします (デフォルトは有効です)。 あるいは、sslChecks メンバーに false 以外の値を設定することによっても SSL チェックを有効にできます。

パラメータ

この関数にはパラメータはありません。

戻り値

true

変更履歴

バージョン | 説明
PECL oauth 0.99.8 | sslChecks メンバーが追加されました。

参考

  • OAuth::disableSSLChecks() - SSL チェックを無効にする

User Contributed Notes

There are no user contributed notes for this page.


OAuth で保護されたリソースを取得する

  • ≪ OAuth::enableSSLChecks
  • OAuth::generateSignature ≫
  • PHP Manual
  • OAuth
  • OAuth で保護されたリソースを取得する

OAuth::fetch

(PECL OAuth >= 0.99.1)

OAuth::fetch — OAuth で保護されたリソースを取得する

説明

public OAuth::fetch(
string $protected_resource_url,
array $extra_parameters = ?,
string $http_method = ?,
array $http_headers = ?
): mixed

リソースを取得します。

パラメータ

protected_resource_url

OAuth で保護されたリソースへの URL。

extra_parameters

リソースへのリクエストとともに送信する追加パラメータ。

http_method

OAUTH_HTTP_METHOD_* OAUTH 定数 のいずれか。 GET、POST、PUT、HEAD そして DELETE があります。

HEAD (OAUTH_HTTP_METHOD_HEAD) は、 実際のリクエストの前に (OAuth 認証情報が Authorization ヘッダにあるかどうかなどの) 情報を取得するときに有用です。

http_headers

HTTP クライアントヘッダ (User-Agent や Accept など)。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。
PECL oauth 0.99.5 | http_method パラメータが追加されました。
PECL oauth 0.99.8 | http_headers パラメータが追加されました。

例

例1 OAuth::fetch() の例

<?php
try {
$oauth = new OAuth("consumer_key","consumer_secret",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_AUTHORIZATION);
$oauth->setToken("access_token","access_token_secret");

$oauth->fetch("http://photos.example.net/photo?file=vacation.jpg");

$response_info = $oauth->getLastResponseInfo();
header("Content-Type: {$response_info["content_type"]}");
echo $oauth->getLastResponse();
} catch(OAuthException $E) {
echo "Exception caught!\n";
echo "Response: ". $E->lastResponse . "\n";
}
?>

参考

  • OAuth::getLastResponse() - 直近のレスポンスを取得する
  • OAuth::getLastResponseInfo() - 直近のレスポンスの HTTP 情報を取得する
  • OAuth::setToken() - トークンと secret を設定する

User Contributed Notes

Lars Stttrup Nielsen 16-Mar-2016 07:37
So I'm using this to talk to the Woocommerce REST API, and was having a lot of trouble figuring out what exactly $extra_parameters was supposed to look like (which WC REST API expects, besides being of the type OAUTH_AUTH_TYPE_URI).

The multidimensional array I fed it crashed PHP, so don't do that if you're in my shoes.

What ended up solving it was me looking through the OAuth source and noticing that $extra_parameters can also be a string, which, encoded as json (json_encode), solved all my troubles as WC accepted it.
zverik at textual dot ru 31-Mar-2014 08:46
If $extra_parameters is not an array, you have to specify Content-Type header, or else you'll get HTTP 401 error. Example:

<?php
$oauth->fetch(ENDPOINT, '{"action": "get_user_info"}', OAUTH_HTTP_METHOD_PUT, array('Content-Type' => 'application/json'));
?>
chris dot barr at ntlworld dot com 05-Mar-2013 05:59
The fetch() method will throw an OAuthException if the returned http status code is in the 4xx or 5xx range:

<?php
// Querying Twitter with bad login details
try {
  $oauth->fetch('https://api.twitter.com/1.1/favorites/list.json');
}
catch(Exception $e) {
  echo $e->getCode(); // 401
  // Message generated by OAuth class
  echo $e->getMessage(); // Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect)
  // Message returned from Twitter
  echo $e->lastResponse; // {"errors":[{"message":"Could not authenticate you","code":32}]}
}
sun at drupal dot org 09-Aug-2011 06:40
Make sure that your $extra_parameters is an array.

If it's not, then OAuth will silently skip the malformed data type and produce a signature base string that is invalid (doesn't contain POST parameters, as defined in the RFC).

You should file a critical bug report against any REST API you find in the wild that accepts such a bogus signature to pass authentication.
contact info at mech dot cx 23-Mar-2011 04:00
I was having troubles getting fetch() to post, the remote server (Twitter, in this case) complained at me that their "resource only supports POST". Turned out to be a known bug in OAuth 1.1, downgrading to 1.0 fixed it.

Don't lose as much time over this as I did :-)
Lyuben Penkovski (l_penkovski at yahoo dot com) 26-Aug-2010 11:51
If the provider's web server is configured to use Keep-Alive extension to HTTP protocol (HTTP 1.1), there can be a big delay in the response time from the provider. By default Apache is configured to use Keep-Alive for 5 seconds. This is the delay after which the response will come back to the consumer. If you have this issue of delayed result, you can pass in HTTP headers when calling $consumer->fetch():

<?php
$consumer = new OAuth("consumer_key", "consumer_secret", OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_FORM);
$consumer->fetch('http://example.com/api/', null, OAUTH_HTTP_METHOD_POST, array('Connection'=>'close'));
?>

Then the provider will send the result immediately after it's ready with the processing and the connection will be closed. Unfortunately, when calling $consumer->getRequestToken() and $consumer->getAccessToken() there's no way provided to pass in HTTP headers and this delay (if present) cannot be avoided, or at least we could not find a way to avoid it.

The solution that worked for us is to send this header from the provider when returning result to the consumer:

<?php
$result = 'oauth_callback_accepted=true&oauth_token=' . $this->urlencode($token->oauth_token) .
          '&oauth_token_secret='.$this->urlencode($token->oauth_token_secret);

header('HTTP/1.1 200 OK');
header('Content-Length: '.strlen($result));
header('Content-Type: application/x-www-form-urlencoded');
header('Connection:close');
echo $result;
?>

This can work if you have the possibility to modify the code of the provider, e.g. if you are the provider yourself or if you can talk with the people that develop it and ask them to send this header for your request.


シグネチャを生成する

  • ≪ OAuth::fetch
  • OAuth::getAccessToken ≫
  • PHP Manual
  • OAuth
  • シグネチャを生成する

OAuth::generateSignature

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

OAuth::generateSignature — シグネチャを生成する

説明

public OAuth::generateSignature(string $http_method, string $url, mixed $extra_parameters = ?): string|false

最後の HTTP メソッド、URL そしてパラメータ文字列あるいは配列にもとづいてシグネチャを生成します。

パラメータ

http_method

リクエストの HTTP メソッド。

url

リクエストの URL。

extra_parameters

パラメータ文字列あるいは配列。

戻り値

生成されたシグネチャを文字列で返します。失敗した場合に false を返します

User Contributed Notes

vk221000 at gmail dot com 03-Jan-2022 11:46
<?php
/**
     * Get signature for the request Oauth 1.0
     *
     * @param string      $url url to send request to.
     * @param string      $consumer_key consumer key for the request credential.
     * @param string      $consumer_secret consumer secret for the request credential.
     * @param string      $method GET, POST etc methods.
     * @param array|false $params parameters to send during the request.
     * @since 1.0.0
     * @return string
     */
    public function get_signature( $url, $consumer_key, $consumer_secret, $method = 'GET', $params = false ) {
            $nonce     = mt_rand();
            $timestamp = time();
            $oauth     = new \OAuth( $consumer_key, $consumer_secret );
            $oauth->setTimestamp( $timestamp );
            $oauth->setNonce( $nonce );
            $sig = $oauth->generateSignature( $method, $url, $params );

            $header = 'OAuth ' .
                'oauth_consumer_key=' . $consumer_key .
                ',oauth_signature_method="HMAC-SHA1"' .
                ',oauth_nonce="'. $nonce . '"' .
                ',oauth_timestamp="' . $timestamp . '"'.
                ',oauth_version="1.0"'.
                ',oauth_signature="' . urlencode( $sig ) . '"'
                ;
            return $header;
    }
?>


アクセストークンを取得する

  • ≪ OAuth::generateSignature
  • OAuth::getCAPath ≫
  • PHP Manual
  • OAuth
  • アクセストークンを取得する

OAuth::getAccessToken

(PECL OAuth >= 0.99.1)

OAuth::getAccessToken — アクセストークンを取得する

説明

public OAuth::getAccessToken(string $access_token_url, string $verifier_token = ?, string $http_method = ?): array

アクセストークン、secret そして追加のレスポンスパラメータをサービスプロバイダから取得します。

パラメータ

access_token_url

アクセストークン API の URL。

auth_session_handle

認証セッションハンドル。このパラメータはコア OAuth 1.0 仕様を引用していませんが、大手プロバイダでは実装されているでしょう。 詳細な情報は » ScalableOAuth を参照ください。

verifier_token

1.0a をサポートするサービスプロバイダでは、リクエストトークンとアクセストークンを交換する際に verifier_token を渡す必要があります。 verifier_token が $_GET あるいは $_POST に存在する場合は自動的にそれが渡され、 呼び出し側が verifier_token を指定する必要はありません (通常、アクセストークンを oauth_callback URL で交換する場合はこのようになります)。 詳細な情報は » ScalableOAuth を参照ください。

http_method

利用する HTTP メソッド。GET や POST など。

戻り値

成功した場合は OAuth レスポンスをパースした配列、失敗した場合は false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。
PECL oauth 0.99.9 | verifier_token パラメータが追加されました。

例

例1 OAuth::getAccessToken() の例

<?php
try {
$oauth = new OAuth(OAUTH_CONSUMER_KEY,OAUTH_CONSUMER_SECRET);
$oauth->setToken($request_token,$request_token_secret);
$access_token_info = $oauth->getAccessToken("https://example.com/oauth/access_token");
if(!empty($access_token_info)) {
print_r($access_token_info);
} else {
print "Failed fetching access token, response was: " . $oauth->getLastResponse();
}
} catch(OAuthException $E) {
echo "Response: ". $E->lastResponse . "\n";
}
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [oauth_token] => some_token
    [oauth_token_secret] => some_token_secret
)

参考

  • OAuth::getLastResponse() - 直近のレスポンスを取得する
  • OAuth::getLastResponseInfo() - 直近のレスポンスの HTTP 情報を取得する
  • OAuth::setToken() - トークンと secret を設定する

User Contributed Notes

There are no user contributed notes for this page.


CA 情報を取得する

  • ≪ OAuth::getAccessToken
  • OAuth::getLastResponse ≫
  • PHP Manual
  • OAuth
  • CA 情報を取得する

OAuth::getCAPath

(PECL OAuth >= 0.99.8)

OAuth::getCAPath — CA 情報を取得する

説明

public OAuth::getCAPath(): array

認証局の情報を取得します。ここには、 OAuth::setCaPath() で設定した ca_path や ca_info が含まれます。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

認証局の情報を含む配列を返します。返される連想配列のキーには ca_path と ca_info が含まれます。

参考

  • OAuth::setCAPath() - CA パスおよび情報を設定する
  • OAuth::getLastResponseInfo() - 直近のレスポンスの HTTP 情報を取得する

User Contributed Notes

There are no user contributed notes for this page.


直近のレスポンスを取得する

  • ≪ OAuth::getCAPath
  • OAuth::getLastResponseHeaders ≫
  • PHP Manual
  • OAuth
  • 直近のレスポンスを取得する

OAuth::getLastResponse

(PECL OAuth >= 0.99.1)

OAuth::getLastResponse — 直近のレスポンスを取得する

説明

public OAuth::getLastResponse(): string

直近のリクエストに対するレスポンスをそのままの形式で取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

直近のレスポンスを含む文字列を返します。

参考

  • OAuth::getLastResponseInfo() - 直近のレスポンスの HTTP 情報を取得する
  • OAuth::fetch() - OAuth で保護されたリソースを取得する

User Contributed Notes

There are no user contributed notes for this page.


最後のレスポンスのヘッダを取得する

  • ≪ OAuth::getLastResponse
  • OAuth::getLastResponseInfo ≫
  • PHP Manual
  • OAuth
  • 最後のレスポンスのヘッダを取得する

OAuth::getLastResponseHeaders

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

OAuth::getLastResponseHeaders — 最後のレスポンスのヘッダを取得する

説明

public OAuth::getLastResponseHeaders(): string|false

最後のレスポンスのヘッダを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

最後のレスポンスのヘッダを文字列で返します。失敗した場合に false を返します

User Contributed Notes

There are no user contributed notes for this page.


直近のレスポンスの HTTP 情報を取得する

  • ≪ OAuth::getLastResponseHeaders
  • OAuth::getRequestHeader ≫
  • PHP Manual
  • OAuth
  • 直近のレスポンスの HTTP 情報を取得する

OAuth::getLastResponseInfo

(PECL OAuth >= 0.99.1)

OAuth::getLastResponseInfo — 直近のレスポンスの HTTP 情報を取得する

説明

public OAuth::getLastResponseInfo(): array

直近のレスポンスに関する HTTP 情報を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

直近のリクエストに対するレスポンスの情報を含む配列を返します。 curl_getinfo() の定数が使われます。

参考

  • OAuth::fetch() - OAuth で保護されたリソースを取得する
  • OAuth::getLastResponse() - 直近のレスポンスを取得する

User Contributed Notes

There are no user contributed notes for this page.


OAuth ヘッダ文字列シグネチャを生成する

  • ≪ OAuth::getLastResponseInfo
  • OAuth::getRequestToken ≫
  • PHP Manual
  • OAuth
  • OAuth ヘッダ文字列シグネチャを生成する

OAuth::getRequestHeader

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

OAuth::getRequestHeader — OAuth ヘッダ文字列シグネチャを生成する

説明

public OAuth::getRequestHeader(string $http_method, string $url, mixed $extra_parameters = ?): string|false

最後の HTTP メソッド、URL そしてパラメータ文字列あるいは配列にもとづいて OAuth ヘッダ文字列シグネチャを生成します。

パラメータ

http_method

リクエストの HTTP メソッド。

url

リクエストの URL。

extra_parameters

パラメータ文字列あるいは配列。

戻り値

生成されたリクエストヘッダを文字列で返します。失敗した場合に false を返します

User Contributed Notes

me at chrishowie dot com 12-Dec-2016 10:03
The documentation does not specify the difference between passing a string and passing an array for the third parameter.  We spent two days debugging before reading the C source code to figure out that there is a significant and undocumented difference between the two.

"a=1" and array("a" => 1) are handled very differently!

If you are making a POST/PUT request (or anything with an entity body) then you should pass that as a string.

If you are making a request with a query string, you should pass that as an associative array.

If you pass "a=1" intending that to specify the query string, the generated signature will be invalid -- it will process this as if you were POSTing the content "a=1" instead.


リクエストトークンを取得する

  • ≪ OAuth::getRequestHeader
  • OAuth::setAuthType ≫
  • PHP Manual
  • OAuth
  • リクエストトークンを取得する

OAuth::getRequestToken

(PECL OAuth >= 0.99.1)

OAuth::getRequestToken — リクエストトークンを取得する

説明

public OAuth::getRequestToken(string $request_token_url, string $callback_url = ?, string $http_method = ?): array

リクエストトークン、secret そして追加のレスポンスパラメータをサービスプロバイダから取得します。

パラメータ

request_token_url

リクエストトークン API の URL。

callback_url

OAuth コールバック URL。callback_url に空の値を渡すと、"oob" に設定されて OAuth 2009.1 advisory を指すことになります。

http_method

利用する HTTP メソッド。GET や POST など。

戻り値

成功した場合は OAuth レスポンスをパースした配列、失敗した場合は false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。
PECL oauth 0.99.9 | callback_url パラメータが追加されました。

例

例1 OAuth::getRequestToken() の例

<?php
try {
$oauth = new OAuth(OAUTH_CONSUMER_KEY,OAUTH_CONSUMER_SECRET);
$request_token_info = $oauth->getRequestToken("https://example.com/oauth/request_token");
if(!empty($request_token_info)) {
print_r($request_token_info);
} else {
print "Failed fetching request token, response was: " . $oauth->getLastResponse();
}
} catch(OAuthException $E) {
echo "Response: ". $E->lastResponse . "\n";
}
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [oauth_token] => some_token
    [oauth_token_secret] => some_token_secret
)

参考

  • OAuth::getLastResponse() - 直近のレスポンスを取得する
  • OAuth::getLastResponseInfo() - 直近のレスポンスの HTTP 情報を取得する

User Contributed Notes

bohwaz 29-Mar-2010 07:29
Please note that if you don't supply callback_url, the oauth parameter oauth_callback will not be sent to the server and will result in an error from the server, as this parameter is REQUIRED in the OAuth spec.


認証方式を設定する

  • ≪ OAuth::getRequestToken
  • OAuth::setCAPath ≫
  • PHP Manual
  • OAuth
  • 認証方式を設定する

OAuth::setAuthType

(PECL OAuth >= 0.99.1)

OAuth::setAuthType — 認証方式を設定する

説明

public OAuth::setAuthType(int $auth_type): bool

OAuth パラメータをどこで渡すかを設定します。

パラメータ

auth_type

auth_type は、次のフラグ (OAuth 1.0 section 5.2 において優先度の高い順) のいずれかです。

OAUTH_AUTH_TYPE_AUTHORIZATION
OAuth パラメータを HTTP Authorization ヘッダで渡します。
OAUTH_AUTH_TYPE_FORM
OAuth パラメータを HTTP POST リクエストの本文に追加します。
OAUTH_AUTH_TYPE_URI
OAuth パラメータをリクエスト URI に追加します。
OAUTH_AUTH_TYPE_NONE
何もなし。

戻り値

パラメータを正しく設定した場合に true を返します。 それ以外の場合 (無効な auth_type を渡した場合など) は false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。

User Contributed Notes

There are no user contributed notes for this page.


CA パスおよび情報を設定する

  • ≪ OAuth::setAuthType
  • OAuth::setNonce ≫
  • PHP Manual
  • OAuth
  • CA パスおよび情報を設定する

OAuth::setCAPath

(PECL OAuth >= 0.99.8)

OAuth::setCAPath — CA パスおよび情報を設定する

説明

public OAuth::setCAPath(string $ca_path = ?, string $ca_info = ?): mixed

認証局 (CA) のパスと情報を設定します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

ca_path

設定したい CA パス。

ca_info

設定したい CA 情報。

戻り値

成功した場合に true を返します。ca_path あるいは ca_info が無効な形式の場合は false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。

参考

  • OAuth::getCaPath() - CA 情報を取得する

User Contributed Notes

There are no user contributed notes for this page.


続くリクエスト用のノンスを設定する

  • ≪ OAuth::setCAPath
  • OAuth::setRequestEngine ≫
  • PHP Manual
  • OAuth
  • 続くリクエスト用のノンスを設定する

OAuth::setNonce

(PECL OAuth >= 0.99.1)

OAuth::setNonce — 続くリクエスト用のノンスを設定する

説明

public OAuth::setNonce(string $nonce): mixed

それ以降のすべてのリクエスト用のノンスを設定します。

パラメータ

nonce

oauth_nonce の値。

戻り値

成功した場合に true を返します。 nonce が無効な場合に false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。

参考

  • OAuth::setToken() - トークンと secret を設定する
  • OAuth::setAuthType() - 認証方式を設定する
  • OAuth::setVersion() - OAuth のバージョンを設定する

User Contributed Notes

There are no user contributed notes for this page.


setRequestEngine

  • ≪ OAuth::setNonce
  • OAuth::setRSACertificate ≫
  • PHP Manual
  • OAuth
  • setRequestEngine

OAuth::setRequestEngine

(PECL OAuth >= 1.0.0)

OAuth::setRequestEngine — setRequestEngine

説明

public OAuth::setRequestEngine(int $reqengine): void

HTTP リクエストの送信に使うリクエストエンジンを設定します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

reqengine

使いたいリクエストエンジン。OAUTH_REQENGINE_STREAMS は PHP のストリームを使い、OAUTH_REQENGINE_CURL は Curl を使います。

戻り値

値を返しません。

エラー / 例外

無効なリクエストエンジンを選んだ場合には OAuthException が発生します。

例

例1 OAuth::setRequestEngine() example

<?php
$consumer = new OAuth();

$consumer->setRequestEngine(OAUTH_REQENGINE_STREAMS);
?>

参考

  • Curl
  • PHP streams
  • OAuthException

User Contributed Notes

There are no user contributed notes for this page.


RSA 証明書を設定する

  • ≪ OAuth::setRequestEngine
  • OAuth::setSSLChecks ≫
  • PHP Manual
  • OAuth
  • RSA 証明書を設定する

OAuth::setRSACertificate

(PECL OAuth >= 1.0.0)

OAuth::setRSACertificate — RSA 証明書を設定する

説明

public OAuth::setRSACertificate(string $cert): mixed

RSA 証明書を設定します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

cert

RSA 証明書。

戻り値

成功した場合に true、失敗した場合 (RSA 証明書がパースできなかった場合はど) に false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。

例

例1 OAuth::setRsaCertificate() の例

<?php
$consume = new OAuth('1234', '', OAUTH_SIG_METHOD_RSASHA1);

$consume->setRSACertificate(file_get_contents('test.pem'));
?>

参考

  • OAuth::setCaPath() - CA パスおよび情報を設定する

User Contributed Notes

There are no user contributed notes for this page.


リクエストに固有の SSL チェックを調整する

  • ≪ OAuth::setRSACertificate
  • OAuth::setTimestamp ≫
  • PHP Manual
  • OAuth
  • リクエストに固有の SSL チェックを調整する

OAuth::setSSLChecks

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

OAuth::setSSLChecks — リクエストに固有の SSL チェックを調整する

説明

public OAuth::setSSLChecks(int $sslcheck): bool

リクエストに固有の SSL チェックを調整します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

sslcheck

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


タイムスタンプを設定する

  • ≪ OAuth::setSSLChecks
  • OAuth::setToken ≫
  • PHP Manual
  • OAuth
  • タイムスタンプを設定する

OAuth::setTimestamp

(PECL OAuth >= 1.0.0)

OAuth::setTimestamp — タイムスタンプを設定する

説明

public OAuth::setTimestamp(string $timestamp): mixed

それ以降のリクエスト用の OAuth タイムスタンプを設定します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

timestamp

タイムスタンプ。

戻り値

true を返します。 timestamp が無効な形式の場合は false を返します。

変更履歴

バージョン | 説明
PECL oauth 1.0.0 | 以前は、失敗したときに false ではなく null を返していました。

参考

  • OAuth::setNonce() - 続くリクエスト用のノンスを設定する

User Contributed Notes

There are no user contributed notes for this page.


トークンと secret を設定する

  • ≪ OAuth::setTimestamp
  • OAuth::setVersion ≫
  • PHP Manual
  • OAuth
  • トークンと secret を設定する

OAuth::setToken

(PECL OAuth >= 0.99.1)

OAuth::setToken — トークンと secret を設定する

説明

public OAuth::setToken(string $token, string $token_secret): bool

それ以降のリクエスト用のトークンと secret を設定します。

パラメータ

token

OAuth トークン。

token_secret

OAuth トークン secret。

戻り値

true

例

例1 OAuth::setToken() の例

<?php
$oauth = new OAuth(OAUTH_CONSUMER_KEY,OAUTH_CONSUMER_SECRET);
$oauth->setToken("token","token-secret");
?>

User Contributed Notes

There are no user contributed notes for this page.


OAuth のバージョンを設定する

  • ≪ OAuth::setToken
  • OAuthProvider ≫
  • PHP Manual
  • OAuth
  • OAuth のバージョンを設定する

OAuth::setVersion

(PECL OAuth >= 0.99.1)

OAuth::setVersion — OAuth のバージョンを設定する

説明

public OAuth::setVersion(string $version): bool

それ以降のリクエスト用の OAuth のバージョンを設定します。

パラメータ

version

OAuth のバージョン。デフォルトは常に "1.0"。

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


OAuthProvider クラス

(PECL OAuth >= 1.0.0)

はじめに

OAuth プロバイダを管理するクラスです。

別のサイトで公開されている詳細なチュートリアル » Writing an OAuth Provider Service には、このサービスを作成する方法がハンズオン形式で公開されています。 OAuth 拡張モジュールのソースの中には » OAuth プロバイダのサンプル もあります。

クラス概要

class OAuthProvider {
/* メソッド */
final public addRequiredParameter(string $req_params): bool
public callconsumerHandler(): void
public callTimestampNonceHandler(): void
public calltokenHandler(): void
public checkOAuthRequest(string $uri = ?, string $method = ?): void
public __construct(array $params_array = ?)
public consumerHandler(callable $callback_function): void
final public static generateToken(int $size, bool $strong = false): string
public is2LeggedEndpoint(mixed $params_array): void
public isRequestTokenEndpoint(bool $will_issue_request_token): void
final public removeRequiredParameter(string $req_params): bool
final public static reportProblem(string $oauthexception, bool $send_headers = true): string
final public setParam(string $param_key, mixed $param_val = ?): bool
final public setRequestTokenPath(string $path): bool
public timestampNonceHandler(callable $callback_function): void
public tokenHandler(callable $callback_function): void
}

目次

  • OAuthProvider::addRequiredParameter — 必須パラメータを追加する
  • OAuthProvider::callconsumerHandler — consumerNonceHandler コールバックをコールする
  • OAuthProvider::callTimestampNonceHandler — timestampNonceHandler コールバックをコールする
  • OAuthProvider::calltokenHandler — tokenNonceHandler コールバックをコールする
  • OAuthProvider::checkOAuthRequest — oauth リクエストをチェックする
  • OAuthProvider::__construct — 新しい OAuthProvider オブジェクトを作る
  • OAuthProvider::consumerHandler — consumerHandler コールバックを設定する
  • OAuthProvider::generateToken — ランダムなトークンを生成する
  • OAuthProvider::is2LeggedEndpoint — is2LeggedEndpoint
  • OAuthProvider::isRequestTokenEndpoint — isRequestTokenEndpoint を設定する
  • OAuthProvider::removeRequiredParameter — 必須パラメータを削除する
  • OAuthProvider::reportProblem — 問題を報告する
  • OAuthProvider::setParam — パラメータを設定する
  • OAuthProvider::setRequestTokenPath — リクエストトークンのパスを設定する
  • OAuthProvider::timestampNonceHandler — timestampNonceHandler コールバックを設定する
  • OAuthProvider::tokenHandler — tokenHandler コールバックを設定する

User Contributed Notes

There are no user contributed notes for this page.


必須パラメータを追加する

  • ≪ OAuthProvider
  • OAuthProvider::callconsumerHandler ≫
  • PHP Manual
  • OAuthProvider
  • 必須パラメータを追加する

OAuthProvider::addRequiredParameter

(PECL OAuth >= 1.0.0)

OAuthProvider::addRequiredParameter — 必須パラメータを追加する

説明

final public OAuthProvider::addRequiredParameter(string $req_params): bool

oauth プロバイダの必須パラメータを追加します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

req_params

必須パラメータ。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • OAuthProvider::removeRequiredParameter() - 必須パラメータを削除する

User Contributed Notes

me at thomashunter dot name 06-Jun-2013 03:03
This method can be used for adding non-standard parameters required by your application, as well as parameters within the spec.

<?php
$Provider->addRequiredParameter("permissions");
$Provider->addRequiredParameter("oauth_callback");


consumerNonceHandler コールバックをコールする

  • ≪ OAuthProvider::addRequiredParameter
  • OAuthProvider::callTimestampNonceHandler ≫
  • PHP Manual
  • OAuthProvider
  • consumerNonceHandler コールバックをコールする

OAuthProvider::callconsumerHandler

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

OAuthProvider::callconsumerHandler — consumerNonceHandler コールバックをコールする

説明

public OAuthProvider::callconsumerHandler(): void

コンシューマハンドラコールバックとして登録した関数をコールします。この関数は OAuthProvider::consumerHandler() で登録します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

エラー / 例外

コールバック関数をコールできなかったり、 あるいは定義されていなかったりした場合は E_ERROR レベルのエラーとなります。

参考

  • OAuthProvider::consumerHandler() - consumerHandler コールバックを設定する

User Contributed Notes

There are no user contributed notes for this page.


timestampNonceHandler コールバックをコールする

  • ≪ OAuthProvider::callconsumerHandler
  • OAuthProvider::calltokenHandler ≫
  • PHP Manual
  • OAuthProvider
  • timestampNonceHandler コールバックをコールする

OAuthProvider::callTimestampNonceHandler

(PECL OAuth >= 1.0.0)

OAuthProvider::callTimestampNonceHandler — timestampNonceHandler コールバックをコールする

説明

public OAuthProvider::callTimestampNonceHandler(): void

タイムスタンプハンドラコールバックとして登録した関数をコールします。この関数は OAuthProvider::timestampNonceHandler() で登録します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

エラー / 例外

コールバック関数をコールできなかったり、 あるいは定義されていなかったりした場合は E_ERROR レベルのエラーとなります。

参考

  • OAuthProvider::timestampNonceHandler() - timestampNonceHandler コールバックを設定する

User Contributed Notes

There are no user contributed notes for this page.


tokenNonceHandler コールバックをコールする

  • ≪ OAuthProvider::callTimestampNonceHandler
  • OAuthProvider::checkOAuthRequest ≫
  • PHP Manual
  • OAuthProvider
  • tokenNonceHandler コールバックをコールする

OAuthProvider::calltokenHandler

(PECL OAuth >= 1.0.0)

OAuthProvider::calltokenHandler — tokenNonceHandler コールバックをコールする

説明

public OAuthProvider::calltokenHandler(): void

トークンハンドラコールバックとして登録した関数をコールします。この関数は OAuthProvider::tokenHandler() でコールします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

エラー / 例外

コールバック関数をコールできなかったり、 あるいは定義されていなかったりした場合は E_ERROR レベルのエラーとなります。

参考

  • OAuthProvider::tokenHandler() - tokenHandler コールバックを設定する

User Contributed Notes

There are no user contributed notes for this page.


oauth リクエストをチェックする

  • ≪ OAuthProvider::calltokenHandler
  • OAuthProvider::__construct ≫
  • PHP Manual
  • OAuthProvider
  • oauth リクエストをチェックする

OAuthProvider::checkOAuthRequest

(PECL OAuth >= 1.0.0)

OAuthProvider::checkOAuthRequest — oauth リクエストをチェックする

説明

public OAuthProvider::checkOAuthRequest(string $uri = ?, string $method = ?): void

OAuth リクエストをチェックします。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

uri

オプションの URI、あるいはエンドポイント。

method

HTTP メソッド。 OAUTH_HTTP_METHOD_* OAuth 定数 のいずれかをオプションで渡します。

戻り値

値を返しません。

エラー / 例外

HTTP メソッドを検出できない場合には E_ERROR レベルのエラーが発生します。

参考

  • OAuthProvider::reportProblem() - 問題を報告する

User Contributed Notes

tim at timlytle dot net 17-Oct-2013 01:30
Seems this method can only be called once per instance (or gives the same result as the first call on repeat calls).

My use case is API endpoints that can be accessed by a user or with 2 legged auth. If normal oAuth failed, I was calling is2LeggedEndpoint(true) and running again.

For that to work the OAuth Provider needs to be created again, simply changing one of the flags seems to have no effect on the next call.
Lyuben Penkovski (l_penkovski at yahoo dot com) 23-Aug-2010 03:59
This function checks if OAuth request is valid and signed correctly.

$provider->checkOAuthRequest();

It does this by first calling timestampNonceHandler and expects result OAUHT_OK from it. If the result is different, an exception is thrown. It's up to you to write the code that checks timestamp/nonce combinations.

Secondly, it calls consumerHandler and expects your code in the consumerHandler function to set $provider->consumer_secret to the correct value (you should take it from your consumer storage location where it's saved with consumer key). If $provider->consumer_secret is not set, or is not set with the proper value an exception is thrown. Proper value means that it should be the same consumer key that was used to sign the request by the consumer before sending it to here (the provider). Again expected result from this function is OAUTH_OK or some OAUTH error code if you want to throw exception.

Third, it calls tokenHandler, but only WHEN you are requesting ACCESS token or requesting protected data with authorized ACCESS TOKEN. In order for the provider to call tokenHandler, before a call to the checkOAuthRequest function is made, the provider should call the method that says that this is not a request token endpoint (this is access token endpoint):

$provider->isRequestTokenEndpoint (false);
$provider->checkOAuthRequest();

Again here OAuthProvider is expecting your code in the tokenHandler to set $provider->token_secret to the correct value (you should take it from your token storage place) because during the signing process it uses CONSUMER SECRET (for request token) and CONSUMER SECRET AND TOKEN SECRET (for access token and fetch of protected data) to sign the request.

After these 3 handler functions are called and return good results (OAUTH_OK) and set the values of the required fields $provider->consumer_secret and $provider->token_secret, then the checkOAuthRequest function signs the request. If something goes wrong, it throws exception, otherwise there comes the place for your code to proceed and handle the request:

- you can create request token (if it's a first request for request token)
- you can create access token (if it's a request for access token)
- you can return protected data to the consumer (if it's a request to fetch protected data)

This is how the functions in my code look like, however please have in mind that I've just implemented it and it's possible that I have something missed or forgotten, but generally I think the idea should be clear:

$this->dbModel is the object for working with database and save/retrieve token and consumer data

<?php

public function timestampNonceHandler ( $provider )
{
    return $this->dbModel->checkTimestampNonce ( $provider->consumer_key,
                                                 $provider->token,
                                                 $provider->timestamp,
                                                 $provider->nonce );
}

public function consumerHandler ( $provider )
{
    $consumer = $this->dbModel->getConsumerSecrets ($provider->consumer_key);

    if($consumer['consumer_key'] != $provider->consumer_key)
    {
        return OAUTH_CONSUMER_KEY_UNKNOWN;
    }

    if( (int)$consumer['disabled'] != 0 )
    {
        return OAUTH_CONSUMER_KEY_REFUSED;
    }

    $provider->consumer_id = $consumer['consumer_id']; # this is not required by OAuthProvider but I use it later in tokenHandler
    $provider->consumer_secret = $consumer['consumer_secret']; # this is REQUIRED

    return OAUTH_OK;
}

public function tokenHandler ( $provider )
{
    $token = $this->dbModel->getToken( $provider->token );

    if( time() > $token['expire'] )
    {
        return OAUTH_TOKEN_EXPIRED;
    }

    if($token['consumer_id'] != $provider->consumer_id)
    {
        return OAUTH_TOKEN_REJECTED;
    }

    if( (int)$token['authorized'] == 0 )
    {
        return OAUTH_TOKEN_REJECTED;
    }

    if($token['token_type'] != 'access')
    {
        if($token['verifier'] != $provider->verifier)
            return OAUTH_VERIFIER_INVALID;
    }

    $provider->token_id = $token['token_id']; # not required to be set by OAuthProvider
    $provider->token_secret = $token['token_secret']; # this is REQUIRED

    return OAUTH_OK;
}

?>


新しい OAuthProvider オブジェクトを作る

  • ≪ OAuthProvider::checkOAuthRequest
  • OAuthProvider::consumerHandler ≫
  • PHP Manual
  • OAuthProvider
  • 新しい OAuthProvider オブジェクトを作る

OAuthProvider::__construct

(PECL OAuth >= 1.0.0)

OAuthProvider::__construct — 新しい OAuthProvider オブジェクトを作る

説明

public OAuthProvider::__construct(array $params_array = ?)

新しい OAuthProvider オブジェクトのインスタンスを作成します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

params_array

これらのオプションパラメータを設定できるのは CLI SAPI のみです。

戻り値

OAuthProvider オブジェクトを返します。

例

例1 OAuthProvider::__construct() の例

<?php
try {

$op = new OAuthProvider();

// ユーザー定義のコールバック関数を使います
$op->consumerHandler(array($this, 'lookupConsumer'));
$op->timestampNonceHandler(array($this, 'timestampNonceChecker'));
$op->tokenHandler(array($this, 'myTokenHandler'));

// foo_uri パラメータは無視します
$op->setParam('foo_uri', NULL);

// このエンドポイントにはトークンは不要です
$op->setRequestTokenPath('/v1/oauth/request_token');

$op->checkOAuthRequest();

} catch (OAuthException $e) {

echo OAuthProvider::reportProblem($e);
}
?>

参考

  • OAuthProvider::setParam() - パラメータを設定する

User Contributed Notes

There are no user contributed notes for this page.


consumerHandler コールバックを設定する

  • ≪ OAuthProvider::__construct
  • OAuthProvider::generateToken ≫
  • PHP Manual
  • OAuthProvider
  • consumerHandler コールバックを設定する

OAuthProvider::consumerHandler

(PECL OAuth >= 1.0.0)

OAuthProvider::consumerHandler — consumerHandler コールバックを設定する

説明

public OAuthProvider::consumerHandler(callable $callback_function): void

コンシューマハンドラコールバックを設定します。これは OAuthProvider::callConsumerHandler() でコールされる関数です。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

callback_function

callable 関数名。

戻り値

値を返しません。

例

例1 OAuthProvider::consumerHandler() コールバックの例

<?php
function lookupConsumer($provider) {

if ($provider->consumer_key === 'unknown') {
return OAUTH_CONSUMER_KEY_UNKNOWN;
} else if($provider->consumer_key == 'blacklisted' || $provider->consumer_key === 'throttled') {
return OAUTH_CONSUMER_KEY_REFUSED;
}

$provider->consumer_secret = "the_consumers_secret";

return OAUTH_OK;
}
?>

参考

  • OAuthProvider::callConsumerHandler() - consumerNonceHandler コールバックをコールする

User Contributed Notes

There are no user contributed notes for this page.


ランダムなトークンを生成する

  • ≪ OAuthProvider::consumerHandler
  • OAuthProvider::is2LeggedEndpoint ≫
  • PHP Manual
  • OAuthProvider
  • ランダムなトークンを生成する

OAuthProvider::generateToken

(PECL OAuth >= 1.0.0)

OAuthProvider::generateToken — ランダムなトークンを生成する

説明

final public static OAuthProvider::generateToken(int $size, bool $strong = false): string

擬似乱数を使ってランダムなバイトの文字列を生成します。

パラメータ

size

トークンの長さ。バイト単位で指定します。

strong

true に設定すると、エントロピーとして /dev/random を使います。 それ以外の場合は、ブロックされることのない /dev/urandom を使います。 このパラメータは、Windows では無視されます。

戻り値

生成されたトークンをバイト文字列で返します。

エラー / 例外

strong パラメータが true のときは、 (十分な量の初期ランダムデータがなかったなどの理由で) 代替 rand() 実装を使うことになった場合に E_WARNING レベルのエラーが発生します。

例

例1 OAuthProvider::generateToken() の例

<?php
$p = new OAuthProvider();

$t = $p->generateToken(4);

echo strlen($t), PHP_EOL;
echo bin2hex($t), PHP_EOL;

?>

上の例の出力は、 たとえば以下のようになります。

4
b6a82c27

注意

注意:

十分な量のランダムデータがシステムから得られなかった場合、この関数は PHP の rand() 関数の実装を使って残りのバイトを埋めます。

参考

  • openssl_random_pseudo_bytes() - 疑似ランダムなバイト文字列を生成する
  • mcrypt_create_iv() - Creates an initialization vector (IV) from a random source

User Contributed Notes

carlosouza at me dot com 28-Mar-2012 02:32
Be careful when setting the 'strong' parameter to true.

If you system doesn't have enough entropy your script will block which can cause timeouts in other parts of your code.

In my case, the most serious symptom was my script blocking when trying to read from /dev/random and causing a 'MySQL has gone away' error.

Hopefully this saves someone the trouble when deciding to use /dev/random entropy


is2LeggedEndpoint

  • ≪ OAuthProvider::generateToken
  • OAuthProvider::isRequestTokenEndpoint ≫
  • PHP Manual
  • OAuthProvider
  • is2LeggedEndpoint

OAuthProvider::is2LeggedEndpoint

(PECL OAuth >= 1.0.0)

OAuthProvider::is2LeggedEndpoint — is2LeggedEndpoint

説明

public OAuthProvider::is2LeggedEndpoint(mixed $params_array): void

2-legged フローあるいはリクエストの署名。トークンは不要です。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

params_array

戻り値

OAuthProvider オブジェクトを返します。

例

例1 OAuthProvider::is2LeggedEndpoint() の例

<?php

$provider = new OAuthProvider();

$provider->is2LeggedEndpoint(true);

?>

参考

  • OAuthProvider::__construct() - 新しい OAuthProvider オブジェクトを作る

User Contributed Notes

There are no user contributed notes for this page.


isRequestTokenEndpoint を設定する

  • ≪ OAuthProvider::is2LeggedEndpoint
  • OAuthProvider::removeRequiredParameter ≫
  • PHP Manual
  • OAuthProvider
  • isRequestTokenEndpoint を設定する

OAuthProvider::isRequestTokenEndpoint

(PECL OAuth >= 1.0.0)

OAuthProvider::isRequestTokenEndpoint — isRequestTokenEndpoint を設定する

説明

public OAuthProvider::isRequestTokenEndpoint(bool $will_issue_request_token): void

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

will_issue_request_token

リクエストトークンを発行するか否かを設定します。つまり OAuthProvider::tokenHandler() がコールされる必要があるかどうかを決めるということです。

戻り値

値を返しません。

参考

  • OAuthProvider::setRequestTokenPath() - リクエストトークンのパスを設定する
  • OAuthProvider::reportProblem() - 問題を報告する

User Contributed Notes

There are no user contributed notes for this page.


必須パラメータを削除する

  • ≪ OAuthProvider::isRequestTokenEndpoint
  • OAuthProvider::reportProblem ≫
  • PHP Manual
  • OAuthProvider
  • 必須パラメータを削除する

OAuthProvider::removeRequiredParameter

(PECL OAuth >= 1.0.0)

OAuthProvider::removeRequiredParameter — 必須パラメータを削除する

説明

final public OAuthProvider::removeRequiredParameter(string $req_params): bool

必須パラメータを削除します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

req_params

削除したい必須パラメータ。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • OAuthProvider::setParam() - パラメータを設定する
  • OAuthProvider::addRequiredParameter() - 必須パラメータを追加する

User Contributed Notes

There are no user contributed notes for this page.


問題を報告する

  • ≪ OAuthProvider::removeRequiredParameter
  • OAuthProvider::setParam ≫
  • PHP Manual
  • OAuthProvider
  • 問題を報告する

OAuthProvider::reportProblem

(PECL OAuth >= 1.0.0)

OAuthProvider::reportProblem — 問題を報告する

説明

final public static OAuthProvider::reportProblem(string $oauthexception, bool $send_headers = true): string

問題を、OAuthException 形式で渡します。設定できる問題については OAuth 定数 のセクションを参照ください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

oauthexception

OAuthException。

戻り値

値を返しません。

参考

  • OAuthProvider::checkOAuthRequest() - oauth リクエストをチェックする
  • OAuthProvider::isRequestTokenEndpoint() - isRequestTokenEndpoint を設定する

User Contributed Notes

There are no user contributed notes for this page.


パラメータを設定する

  • ≪ OAuthProvider::reportProblem
  • OAuthProvider::setRequestTokenPath ≫
  • PHP Manual
  • OAuthProvider
  • パラメータを設定する

OAuthProvider::setParam

(PECL OAuth >= 1.0.0)

OAuthProvider::setParam — パラメータを設定する

説明

final public OAuthProvider::setParam(string $param_key, mixed $param_val = ?): bool

パラメータを設定します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

param_key

パラメータのキー。

param_val

パラメータの値。

パラメータをシグネチャの検証から除外するには、この値を null にします。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • OAuthProvider::addRequiredParameter() - 必須パラメータを追加する

User Contributed Notes

There are no user contributed notes for this page.


リクエストトークンのパスを設定する

  • ≪ OAuthProvider::setParam
  • OAuthProvider::timestampNonceHandler ≫
  • PHP Manual
  • OAuthProvider
  • リクエストトークンのパスを設定する

OAuthProvider::setRequestTokenPath

(PECL OAuth >= 1.0.0)

OAuthProvider::setRequestTokenPath — リクエストトークンのパスを設定する

説明

final public OAuthProvider::setRequestTokenPath(string $path): bool

リクエストトークンのパスを設定します。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

path

パス。

戻り値

true

参考

  • OAuthProvider::tokenHandler() - tokenHandler コールバックを設定する

User Contributed Notes

There are no user contributed notes for this page.


timestampNonceHandler コールバックを設定する

  • ≪ OAuthProvider::setRequestTokenPath
  • OAuthProvider::tokenHandler ≫
  • PHP Manual
  • OAuthProvider
  • timestampNonceHandler コールバックを設定する

OAuthProvider::timestampNonceHandler

(PECL OAuth >= 1.0.0)

OAuthProvider::timestampNonceHandler — timestampNonceHandler コールバックを設定する

説明

public OAuthProvider::timestampNonceHandler(callable $callback_function): void

タイムスタンプ ノンス ハンドラコールバックを設定します。これは OAuthProvider::callTimestampNonceHandler() でコールされる関数です。タイムスタンプやノンスに関するエラーはこのコールバックにスローされます。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

callback_function

callable 関数名。

戻り値

値を返しません。

例

例1 OAuthProvider::timestampNonceHandler() コールバックの例

<?php
function timestampNonceChecker($provider) {

if ($provider->nonce === 'bad') {
return OAUTH_BAD_NONCE;
} elseif ($provider->timestamp == '0') {
return OAUTH_BAD_TIMESTAMP;
}

return OAUTH_OK;
}
?>

参考

  • OAuthProvider::callTimestampNonceHandler() - timestampNonceHandler コールバックをコールする

User Contributed Notes

There are no user contributed notes for this page.


tokenHandler コールバックを設定する

  • ≪ OAuthProvider::timestampNonceHandler
  • OAuthException ≫
  • PHP Manual
  • OAuthProvider
  • tokenHandler コールバックを設定する

OAuthProvider::tokenHandler

(PECL OAuth >= 1.0.0)

OAuthProvider::tokenHandler — tokenHandler コールバックを設定する

説明

public OAuthProvider::tokenHandler(callable $callback_function): void

トークンハンドラコールバックを設定します。これは OAuthProvider::callTokenHandler() でコールされる関数です。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

callback_function

callable 関数名。

戻り値

値を返しません。

例

例1 OAuthProvider::tokenHandler() コールバックの例

<?php
function tokenHandler($provider) {

if ($provider->token === 'rejected') {
return OAUTH_TOKEN_REJECTED;
} elseif ($provider->token === 'revoked') {
return OAUTH_TOKEN_REVOKED;
}

$provider->token_secret = "the_tokens_secret";
return OAUTH_OK;
}
?>

参考

  • OAuthProvider::callTokenHandler() - tokenNonceHandler コールバックをコールする

User Contributed Notes

There are no user contributed notes for this page.


OAuthException クラス

(PECL OAuth >= 0.99.1)

はじめに

この例外は、OAuth 拡張モジュールの使用中に例外エラーが発生したときにスローされます。 デバッグに有用な情報が含まれています。

クラス概要

class OAuthException extends Exception {
/* プロパティ */
public $lastResponse;
public $debugInfo;
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 継承したメソッド */
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

プロパティ

lastResponse

発生した例外のレスポンス (存在する場合)。

debugInfo

User Contributed Notes

There are no user contributed notes for this page.


SOAP

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • 実行時設定
  • 定義済み定数
  • SOAP 関数
    • is_soap_fault — SOAP コールが失敗したかどうかを調べる
    • use_soap_error_handler — SOAP エラーハンドラを使用するかどうかを設定する
  • SoapClient — SoapClient クラス
    • SoapClient::__call — SOAP 関数をコールする (非推奨)
    • SoapClient::__construct — SoapClient のコンストラクタ
    • SoapClient::__doRequest — SOAP リクエストを実行する
    • SoapClient::__getCookies — クッキーの一覧を取得する
    • SoapClient::__getFunctions — SOAP 関数の一覧を返す
    • SoapClient::__getLastRequest — 直近の SOAP リクエストを返す
    • SoapClient::__getLastRequestHeaders — 直近の SOAP リクエストヘッダを返す
    • SoapClient::__getLastResponse — 直近の SOAP レスポンスを返す
    • SoapClient::__getLastResponseHeaders — 直近の SOAP レスポンスヘッダを返す
    • SoapClient::__getTypes — SOAP 型の一覧を返す
    • SoapClient::__setCookie — SOAP リクエストと共に送信されるクッキーを設定する
    • SoapClient::__setLocation — 使用するウェブサービスの場所を設定する
    • SoapClient::__setSoapHeaders — 以降のコール用の SOAP ヘッダを設定する
    • SoapClient::__soapCall — SOAP 関数をコールする
  • SoapServer — SoapServer クラス
    • SoapServer::addFunction — SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する
    • SoapServer::addSoapHeader — SOAP ヘッダをレスポンスに追加する
    • SoapServer::__construct — SoapServer コンストラクタ
    • SoapServer::fault — エラーを示す SoapServer フォールト を発行する
    • SoapServer::getFunctions — 定義されている関数の一覧を返す
    • SoapServer::handle — SOAP リクエストを処理する
    • SoapServer::setClass — SOAP リクエストを処理するクラスを設定する
    • SoapServer::setObject — SOAP リクエストの処理に使用するオブジェクトを設定する
    • SoapServer::setPersistence — SoapServer の持続モードを設定する
  • SoapFault — SoapFault クラス
    • SoapFault::__construct — SoapFault コンストラクタ
    • SoapFault::__toString — SoapFault の文字列表現を取得する
  • SoapHeader — SoapHeader クラス
    • SoapHeader::__construct — SoapHeader コンストラクタ
  • SoapParam — SoapParam クラス
    • SoapParam::__construct — SoapParam コンストラクタ
  • SoapVar — SoapVar クラス
    • SoapVar::__construct — SoapVar コンストラクタ

User Contributed Notes

Luke 08-Sep-2015 07:21
Was calling an asmx method like $success=$x->AuthenticateUser($userName,$password) and this was returning me an error.

However i changed it and added the userName and password in an array and its now KAWA...
spectrumcat at gmail dot com 22-Feb-2015 04:19
In case you'll get a .p12 certificate for your SOAP client to use (or any other actually) make sure to convert it to PEM and merge with the private key.

Convert p12 to PEM with merged private key:
openssl pkcs12 -in supplied_cert.p12 -out php_soap_cert.pem -clcerts

Example:
$wsdl = "./mywsdl.wsdl"; // Or "http://provider.com/api/api.wsdl"

$options = [
        'location'      => "http://provider.com/api/",
        'local_cert'    => "./php_soap_cert.pem",
        'passphrase'    => "certificate_password",
];

try {
    $soapClient = new SoapClient($wsdl, $options);
} catch(Exception $e) {
    var_dump($e);
}
rafinskipg at gmail dot com 14-May-2012 02:54
Support for MTOM addign this code to your project:

<?php
class MySoapClient extends SoapClient
{
    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
        $response = parent::__doRequest($request, $location, $action, $version, $one_way);
        // parse $response, extract the multipart messages and so on

        //this part removes stuff
        $start=strpos($response,'<?xml');
        $end=strrpos($response,'>');
        $response_string=substr($response,$start,$end-$start+1);
        return($response_string);
    }
}

?>

Then you can do this
<?php
  new MySoapClient($wsdl_url);
?>
dennis at pleasedontspam dot clansman dot nl 02-Dec-2011 03:53
When you receive the soapfault message: "looks like we got no XML document" it might be that you're talking to a server that supports MTOM (http://www.w3.org/TR/soap12-mtom/).

MTOM is, as of yet (5.3.6), not supported by the SoapClient.
mariamr at gmail dot com 16-Oct-2010 06:38
"SOAP-ERROR: Parsing WSDL: Couldn't find in 'PATH/TO/YOUR/WSDL'"

This error occurs because some versions of PHP SOAP client  do not send the user name and password that you pass as the options input parameter of the SoapClient constructor  . Yu need to pass the credentials in the web service URL like this:
$soapClient =new SoapClient("http://user:password@example.com/blahblah.wsdl");
vishal dot thakkar at exateam dot com 22-Feb-2010 06:19
I was trying to figure out for days and days to make SOAP server return an associative array and NOT an object ....

To get an array (not object) in the SOAP response, just serialize the array before returning it to the clent..

hope it helps...
Thanks.....
Vishal Thakkar.
stephenlansell at gmail dot com 03-Feb-2010 07:19
Here is an example of a php client talking to a asmx server:

<?php

        $soapClient = new SoapClient("https://soapserver.example.com/blahblah.asmx?wsdl");

        // Prepare SoapHeader parameters
        $sh_param = array(
                    'Username'    =>    'username',
                    'Password'    =>    'password');
        $headers = new SoapHeader('http://soapserver.example.com/webservices', 'UserCredentials', $sh_param);

        // Prepare Soap Client
        $soapClient->__setSoapHeaders(array($headers));

        // Setup the RemoteFunction parameters
        $ap_param = array(
                    'amount'     =>    $irow['total_price']);

        // Call RemoteFunction ()
        $error = 0;
        try {
            $info = $soapClient->__call("RemoteFunction", array($ap_param));
        } catch (SoapFault $fault) {
            $error = 1;
            print("
            alert('Sorry, blah returned the following ERROR: ".$fault->faultcode."-".$fault->faultstring.". We will now take you back to our home page.');
            window.location = 'main.php';
            ");
        }

        if ($error == 0) {
            $auth_num = $info->RemoteFunctionResult;

            if ($auth_num < 0) {
                ....

                // Setup the OtherRemoteFunction() parameters
                $at_param = array(
                            'amount'        => $irow['total_price'],
                            'description'    => $description);

                // Call OtherRemoteFunction()
                $trans = $soapClient->__call("OtherRemoteFunction", array($at_param));
                $trans_result = $trans->OtherRemoteFunctionResult;
            ....
                } else {
                    // Record the transaction error in the database

                // Kill the link to Soap
                unset($soapClient);
            }
        }
    }
}

?>
moazzam at moazzam-khan dot com 05-Oct-2009 09:37
If anyone is trying to use this for accessing Sabre's web services, it won't work. Sabre checks the request header "Content-Type" to see if it is "text/xml" . If it is not text/xml then it sends an error back.

You will need to create a socket connection and use that to send the request over.
Raphal Gertz 18-Apr-2009 09:50
Juste a note to avoid wasting time on php-soap protocol and format support.

Until php 5.2.9 (at least) the soap extension is only capable of understanding wsdl 1.0 and 1.1 format.

The wsdl 2.0, a W3C recommendation since june 2007, ISN'T supported in php soap extension.
(the soap/php_sdl.c source code don't handle wsdl2.0 format)

The wsdl 2.0 is juste the 1.2 version renamed because it has substantial differences from WSDL 1.1.

The differences between the two format may not be invisible if you don't care a lot.

The wsdl 1.0 format structure (see http://www.w3.org/TR/wsdl) :
<definitions ...>
    <types ...>
    </types>
    <message ...>
        <part ...>
    </message>
    <portType ...>
        <operation ...>
            <input ... />
            <output ... />
            <fault ... />
        </operation>
    </portType>
    <binding ...>
        <operation ...>
            <input ... />
            <output ... />
            <fault ... />
        </operation>
    </binding>
    <service ...>
        <port ...>
    </service>
</definitions>

And the wsdl 2.0 format structure (see http://www.w3.org/TR/wsdl20/) :
<description ...>
    <types ...>
    </types>
    <interface ...>
        <fault ... />
        <operation ...>
            <input ... />
            <output ... />
            <fault ... />
        </operation>
    </interface>
    <binding ...>
        <fault ... />
        <operation ...>
            <input ... />
            <output ... />
            <fault ... />
        </operation>
    </binding>
    <service ...>
        <endpoint ...>
    </service>
</description>

The typical error message if you provide a wsdl 2.0 format file :
PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't find <definitions> in 'wsdl/example.wsdl' in /path/client.php on line 9
jeff at jeffrodriguez dot com 03-Feb-2009 01:37
Named parameters are actually super easy once you know how to do it. No need to bother with SoapParam or SoapVar for the most part.

The code:
<?php
$ws->getAsset(array(
  'assetId' => 5967
));
?>

Generates the following SOAP body: (formatted for readability)
<SOAP-ENV:Body>
  <ns1:getAsset>
    <assetId>5967</assetId>
  </ns1:getAsset>
</SOAP-ENV:Body>
beau dot scott at gmail dot com 22-Oct-2008 03:34
If you've been trying to send null to a service that considers empty property tags as empty strings rather than null, here's an extending class that fixes this using xsi:nil:

<?php
class XSoapClient extends SoapClient
{
    const XSI_NS = "http://www.w3.org/2001/XMLSchema-instance";
    const _NULL_ = "xxx_replacedduetobrokephpsoapclient_xxx";

    protected $mustParseNulls = false;

    public function __doRequest($request, $location, $action, $version, $one_way = null)
    {
        if($this->mustParseNulls)
        {
            $this->mustParseNulls = false;
            $request = preg_replace('/<ns1:(\w+)>'.self::_NULL_.'<\/ns1:\\1>/',
                        '<ns1:$1 xsi:nil="true"/>',
                        $request, -1, &$count);

            if ($count > 0)
            {
                $request = preg_replace('/(<SOAP-ENV:Envelope )/',
                    '\\1 xmlns:xsi="'.self::XSI_NS.'" ',
                    $request);
            }
        }
        return parent::__doRequest($request, $location, $action, $version, $one_way);
    }

    public function __call($method, $params)
    {
        foreach($params as $k => $v)
        {
            if($v === null)
            {
                $this->mustParseNulls = true;
                $params[$k] = self::_NULL_;
            }
        }
        return parent::__call($method, $params);
    }
}
?>
Ryan 22-Oct-2008 06:21
If you are having an issue where SOAP cannot find the functions that are actually there if you view the wsdl file, it's because PHP is caching the wsdl file (for a day at a time). To turn this off, have this line on every script that uses SOAP: ini_set("soap.wsdl_cache_enabled", "0"); to disable the caching feature.
ivan dot cubillas at xeridia dot com 08-Aug-2008 01:02
The problem with the PHP WebService Client

We've a JAVA WebService Server which could have attached documents. When the PHP Client send the dates, the Server take it correctly, but when
the server return it to the PHP Client, the client reply always that is not a XML valid document.

The problem could be than the JAVA Server adds (to this type of XML binary files)  the documentType head: xml+xop and the clean doesn't understand
this head as a XML document.

There is some possibility to solve this problem in the PHP Client without doing changes in the JAVA Server?
aeg at mallxs dot nl 28-May-2008 05:19
SoapFault exception: [SOAP-ENV:Client] looks like we got no XML document

This error can have to reasons:
1: Your server script has some hidden output like spaces before or afher <?php ... ?> or echoing some text
2: You have a bug in your server script;
    resulting in a error message output

Test your server script by calling it direct  from the browser.
The result should be a clean output like :

?<SOAP-ENV:Envelope>
?<SOAP-ENV:Body>
?<SOAP-ENV:Fault>
  <faultcode>SOAP-ENV:Server</faultcode>
  <faultstring>Bad Request. Can't find HTTP_RAW_POST_DATA</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

This tell's you there was a request but without data; This is OK
Now if you get the error when calling with your soap client;
remember that your server now will call other functions in the server.php script because it now has some data to process
nodkz at mail dot ru 24-May-2008 02:25
PROBLEM (with SOAP extension under PHP5) of transferring object, that contains objects or array of objects. Nested object would not transfer.

SOLUTION:
This class was developed by trial and error by me. So this 23 lines of code for most developers writing under PHP5 solves fate of using SOAP extension.

<?php
/*
According to specific of organization process of SOAP class in PHP5, we must wrap up complex objects in SoapVar class. Otherwise objects would not be encoded properly and could not be loaded on remote SOAP handler.

Function "getAsSoap" call for encoding object for transmission. After encoding it can be properly transmitted.
*/
abstract class SOAPable {
    public function getAsSOAP() {
        foreach($this as $key=>&$value) {
            $this->prepareSOAPrecursive($this->$key);
        }
        return $this;
    }

    private function prepareSOAPrecursive(&$element) {
        if(is_array($element)) {
            foreach($element as $key=>&$val) {
                $this->prepareSOAPrecursive($val);
            }
            $element=new SoapVar($element,SOAP_ENC_ARRAY);
        }elseif(is_object($element)) {
            if($element instanceof SOAPable) {
                $element->getAsSOAP();
            }
            $element=new SoapVar($element,SOAP_ENC_OBJECT);
        }
    }
}

// ------------------------------------------
//  ABSTRACT EXAMPLE
// ------------------------------------------

class PersonList extends SOAPable {
  protected $ArrayOfPerson; // variable MUST be protected or public!
}

class Person extends SOAPable {
   //any data
}

$client=new SoapClient("test.wsdl", array( 'soap_version'=>SOAP_1_2, 'trace'=>1, 'classmap' => array('Person' => "Person", 'PersonList' => "PersonList")  ));

$PersonList=new PersonList;

// some actions

$PersonList->getAsSOAP();

$client->someMethod($PersonList);

?>

So every class, which will transfer via SOAP, must be extends from class SOAPable.
As you can see, in code above, function prepareSOAPrecursive search another nested objects in parent object or in arrays, and if does it, tries call function getAsSOAP() for preparation of nested objects, after that simply wrap up via SoapVar class.

So in code before transmitting simply call $obj->getAsSOAP()


はじめに

SOAP拡張モジュールは、 SOAPサーバーおよびクライアントを書くために使用することができます。 本拡張モジュールは、» SOAP 1.1、 » SOAP 1.2 および » WSDL 1.1 規約のサブセットをサポートします。

User Contributed Notes

There are no user contributed notes for this page.


要件

この拡張モジュールを使うには libxml 拡張モジュールが必要です。つまり、 PHP 7.4 以降では --with-libxml、それより前のバージョンでは --enable-libxml も指定しなければならないということです。 しかし、libxml はデフォルトで有効になっているのでこのオプションは暗黙のうちに指定されています。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

SOAP サポートを有効にするには、--enable-soap を指定して PHP の configure を行います。

User Contributed Notes

c at cinqs dot net 16-Feb-2017 07:55
If you received a

    E: Couldn't find any package by regex 'php7.1-soap'

when using docker php:apache image

try

    apt-get install php-soap

instead
dbagnara 20-Aug-2016 10:02
for Ubuntu 16.04 LTS
sudo apt-get install php7.0-soap
sudo systemctl restart apache2.service


実行時設定

php.ini の設定により動作が変化します。

SOAP 設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
soap.wsdl_cache_enabled | 1 | INI_ALL |
soap.wsdl_cache_dir | /tmp | INI_ALL |
soap.wsdl_cache_ttl | 86400 | INI_ALL |
soap.wsdl_cache | 1 | INI_ALL |
soap.wsdl_cache_limit | 5 | INI_ALL |

以下に設定ディレクティブに関する 簡単な説明を示します。

soap.wsdl_cache_enabled int

WSDLキャッシュ機能有効または無効にします。

soap.wsdl_cache_dir string

SOAP 拡張モジュールがキャッシュファイルを置くディレクトリの名前を設定します。

soap.wsdl_cache_ttl int

キャッシュされたファイルが元のファイルの代わりに使用される秒数 (有効期間)を設定します。

soap.wsdl_cache int

soap.wsdl_cache_enabled が on の場合に、 この設定によってキャッシュ方式を決めます。 WSDL_CACHE_NONE (0)、 WSDL_CACHE_DISK (1)、 WSDL_CACHE_MEMORY (2) あるいは WSDL_CACHE_BOTH (3) のいずれかです。これは、 SoapClient や SoapServer のコンストラクタにおける配列 options で設定することもできます。

soap.wsdl_cache_limit int

WSDL ファイルのキャッシュに使用するメモリの最大数を設定します。 メモリキャッシュがいっぱいのときにさらにファイルを追加する場合は、 既存のキャッシュの中のいちばん古いファイルを削除します。

User Contributed Notes

michal-ok at o2 dot pl 06-Mar-2020 03:08
Be aware that wsdl cache may not be compatible across different PHP versions, which may be important to know when you upgrade your PHP on the same system or use a multi-PHP version setup where you run the same scripts from different PHP versions. In other words, when a SOAP request writes a file to the cache and then you make another SOAP request from another PHP version and this cache file is used then *sometimes* you may experience unexpected errors that you will not know where they come from.

I spent hours trying to figure out why I was getting "Encoding: Violation of encoding rules" errors every time I ran some of my SOAP scripts from PHP 7.3 just hours after switching from PHP 7.2. It turned out I needed to clear all cached wsdl files created by PHP 7.2. Downgrading from 7.3 to 7.2 caused the same errors and required clearing the cache, too.

When transitioning to a new PHP version you may turn off the cache or set a very short wsdl_cache_ttl period - if you can't delete the files yourself. If you need your scripts to run on multiple PHP versions with wsdl cache then you'd need to set wsdl_cache_dir that is different for each PHP version.
no dot tehwan dot spam at com dot nospam dot gmail 20-Aug-2014 08:05
Keep in mind if you have memory cache enabled that even if you use an updated WSDL file, it will still be using the one in memory. If you download the WSDL files yourself, avoid using memory cache as you will have no control over it, or set the TTL to a small value (default is 1 day).
martijn at netexpo dot nl 19-Oct-2012 01:37
Please note that these three ini settings will also affect the behaviour of your soap server (and clients as well) :

1. default_socket_timeout default 60 secs
Large or slow requests to your soap server or long processes at your soap server will return soap fault after 60 secs like : Error Fetching http headers.

2. max_execution_time default 30 secs
This can be the next bottleneck (but only when your default_socket_timeout is larger then this setting). Your soap server will not return anything, no faults no output, just an empty string.

3. memory_limit default 128M
Will throw fatal errors when the soap server script itself has low memory or will let your services return empty strings when the data it processes puts memory usage over this limit.

Other max POST settings luckily (but a bit suprisingly to me) have _no_ effect for your soap server. Those are :

max_input_time
max_input_nesting_level
max_input_vars
post_max_size
suhosin.post.max_array_depth
suhosin.post.max_array_index_length
suhosin.post.max_name_length
suhosin.post.max_totalname_length
suhosin.post.max_vars
suhosin.post.max_value_length
hpralow at users dot sf dot net 24-Jul-2008 07:40
If you want to dissable WSDL-caching, you can do so with
<?php
ini_set('soap.wsdl_cache_enabled', '0');
ini_set('soap.wsdl_cache_ttl', '0');
?>
However you must do this before creating a SOAP object (soap_client or soap_server).
Changing the settings like above does not have any effect on already existing soap-objects.

[EDIT BY danbrown AT php DOT net: Typofix provided by (james AT voodoo DOT co DOT uk) on 4-FEB-09.]


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

SOAP 定数
定数 | 値 | 説明
SOAP_1_1 (int) | 1 | soap_version オプションを SoapServer::__construct() や SoapClient::__construct() に渡す際、SOAP 1.1 を使うように指定します。
SOAP_1_2 (int) | 2 | soap_version オプションを SoapServer::__construct() や SoapClient::__construct() に渡す際、SOAP 1.2 を使うように指定します。
SOAP_PERSISTENCE_SESSION (int) | 1 |
SOAP_PERSISTENCE_REQUEST (int) | 2 |
SOAP_FUNCTIONS_ALL (int) | 999 |
SOAP_ENCODED (int) | 1 | use オプションを SoapClient::__construct() に渡す際、SOAP エンコーディングを使うように指定します。
SOAP_LITERAL (int) | 2 | use オプションを SoapClient::__construct() に渡す際、サービス特有のエンコーディングを使うように指定します。
SOAP_RPC (int) | 1 | style オプションを SoapClient::__construct() に渡す際、RPC スタイルのバインディングを使うように指定します。
SOAP_DOCUMENT (int) | 2 | style オプションを SoapClient::__construct() に渡す際、ドキュメントのバインディングを使うよに指定します。
SOAP_ACTOR_NEXT (int) | 1 |
SOAP_ACTOR_NONE (int) | 2 |
SOAP_ACTOR_UNLIMATERECEIVER (int) | 3 |
SOAP_COMPRESSION_ACCEPT (int) | 32 | compression オプション の一部を SoapClient::__construct() に渡す際、"Accept-Encoding" を使うことを指定します。
SOAP_COMPRESSION_GZIP (int) | 0 | compression オプション の一部を SoapClient::__construct() に渡す際、gzip 圧縮 を使うことを指定します。
SOAP_COMPRESSION_DEFLATE (int) | 16 | compression オプション の一部を SoapClient::__construct() に渡す際、deflate 圧縮 を使うことを指定します。
SOAP_AUTHENTICATION_BASIC (int) | 0 | authentication オプションを SoapClient::__construct() に渡す際、Basic 認証を使うことを指定します。
SOAP_AUTHENTICATION_DIGEST (int) | 1 | authentication オプションを SoapClient::__construct() に渡す際、Digest 認証を使うことを指定します。
SOAP_SSL_METHOD_TLS (int) | 0 | 推奨されていない ssl_methodオプション と一緒に、 SoapClient::__construct() で使います。
SOAP_SSL_METHOD_SSLv2 (int) | 1 | 推奨されていない ssl_methodオプション と一緒に、 SoapClient::__construct() で使います。
SOAP_SSL_METHOD_SSLv3 (int) | 2 | 推奨されていない ssl_methodオプション と一緒に、 SoapClient::__construct() で使います。
SOAP_SSL_METHOD_SSLv23 (int) | 3 | 推奨されていない ssl_methodオプション と一緒に、 SoapClient::__construct() で使います。
UNKNOWN_TYPE (int) | 999998 |
XSD_STRING (int) | 101 |
XSD_BOOLEAN (int) | 102 |
XSD_DECIMAL (int) | 103 |
XSD_FLOAT (int) | 104 |
XSD_DOUBLE (int) | 105 |
XSD_DURATION (int) | 106 |
XSD_DATETIME (int) | 107 |
XSD_TIME (int) | 108 |
XSD_DATE (int) | 109 |
XSD_GYEARMONTH (int) | 110 |
XSD_GYEAR (int) | 111 |
XSD_GMONTHDAY (int) | 112 |
XSD_GDAY (int) | 113 |
XSD_GMONTH (int) | 114 |
XSD_HEXBINARY (int) | 115 |
XSD_BASE64BINARY (int) | 116 |
XSD_ANYURI (int) | 117 |
XSD_QNAME (int) | 118 |
XSD_NOTATION (int) | 119 |
XSD_NORMALIZEDSTRING (int) | 120 |
XSD_TOKEN (int) | 121 |
XSD_LANGUAGE (int) | 122 |
XSD_NMTOKEN (int) | 123 |
XSD_NAME (int) | 124 |
XSD_NCNAME (int) | 125 |
XSD_ID (int) | 126 |
XSD_IDREF (int) | 127 |
XSD_IDREFS (int) | 128 |
XSD_ENTITY (int) | 129 |
XSD_ENTITIES (int) | 130 |
XSD_INTEGER (int) | 131 |
XSD_NONPOSITIVEINTEGER (int) | 132 |
XSD_NEGATIVEINTEGER (int) | 133 |
XSD_LONG (int) | 134 |
XSD_INT (int) | 135 |
XSD_SHORT (int) | 136 |
XSD_BYTE (int) | 137 |
XSD_NONNEGATIVEINTEGER (int) | 138 |
XSD_UNSIGNEDLONG (int) | 139 |
XSD_UNSIGNEDINT (int) | 140 |
XSD_UNSIGNEDSHORT (int) | 141 |
XSD_UNSIGNEDBYTE (int) | 142 |
XSD_POSITIVEINTEGER (int) | 143 |
XSD_NMTOKENS (int) | 144 |
XSD_ANYTYPE (int) | 145 |
XSD_ANYXML (int) | 147 |
APACHE_MAP (int) | 200 |
SOAP_ENC_OBJECT (int) | 301 |
SOAP_ENC_ARRAY (int) | 300 |
XSD_1999_TIMEINSTANT (int) | 401 |
XSD_NAMESPACE (string) | http://www.w3.org/2001/XMLSchema |
XSD_1999_NAMESPACE (string) | http://www.w3.org/1999/XMLSchema |
SOAP_SINGLE_ELEMENT_ARRAYS (int) | 1 | features オプション と一緒に、 SoapClient::__construct() で使います。
SOAP_WAIT_ONE_WAY_CALLS (int) | 2 | features オプション と一緒に、 SoapClient::__construct() で使います。
SOAP_USE_XSI_ARRAY_TYPE (int) | 4 | features オプション と一緒に、 SoapClient::__construct() で使います。
WSDL_CACHE_NONE (int) | 0 | SoapClient::__construct() や SoapServer::__construct() に渡す soap.wsdl_cache や wsdl_cache オプションで使う WDSL キャッシュを無効にします。
WSDL_CACHE_DISK (int) | 1 | SoapClient::__construct() や SoapServer::__construct() に渡す soap.wsdl_cache や wsdl_cache オプションで ディスク上の WDSL キャッシュだけを使うことを指定します。
WSDL_CACHE_MEMORY (int) | 2 | SoapClient::__construct() や SoapServer::__construct() に渡す soap.wsdl_cache や wsdl_cache オプションで オンメモリの WDSL キャッシュだけを使うことを指定します。
WSDL_CACHE_BOTH (int) | 3 | SoapClient::__construct() や SoapServer::__construct() に渡す soap.wsdl_cache や wsdl_cache オプションで オンメモリとディスク上の WDSL キャッシュを両方使うように指定します。

User Contributed Notes

User 01-Oct-2010 08:56
We are casting the values (float) to simulate the 64-bits long. seem to work fine, of course, the values we are using have no decimal point.


SOAP 関数

目次

  • is_soap_fault — SOAP コールが失敗したかどうかを調べる
  • use_soap_error_handler — SOAP エラーハンドラを使用するかどうかを設定する

User Contributed Notes

vIceBerg 23-Sep-2008 07:18
I have PHP 5.2.5 on my computer. I get this result:

Array
(
    [0] => stdClass Object
        (
            [Client] => stdClass Object
                (
                    [Nom] => LeNom:00000
                    [Prenom] => LePrenom:00000
                )

        )

My host have 5.1.6, the same call returns this result:
Array
(
    [0] => stdClass Object
        (
            [Client] => Array
                (
                    [0] => stdClass Object
                        (
                            [Nom] => LeNom:00000
                            [Prenom] => LePrenom:00000

                        )

5.2.5 is the good structure.

Take care of the version you're using. It can be a lot of work to change all the code
nodkz at mail dot ru 24-May-2008 02:28
PROBLEM (with SOAP extension under PHP5) of transferring object, that contains objects or array of objects. Nested object would not transfer.

SOLUTION:
This class was developed by trial and error by me. So this 23 lines of code for most developers writing under PHP5 solves fate of using SOAP extension.

<?php
/*
According to specific of organization process of SOAP class in PHP5, we must wrap up complex objects in SoapVar class. Otherwise objects would not be encoded properly and could not be loaded on remote SOAP handler.

Function "getAsSoap" call for encoding object for transmission. After encoding it can be properly transmitted.
*/
abstract class SOAPable {
    public function getAsSOAP() {
        foreach($this as $key=>&$value) {
            $this->prepareSOAPrecursive($this->$key);
        }
        return $this;
    }

    private function prepareSOAPrecursive(&$element) {
        if(is_array($element)) {
            foreach($element as $key=>&$val) {
                $this->prepareSOAPrecursive($val);
            }
            $element=new SoapVar($element,SOAP_ENC_ARRAY);
        }elseif(is_object($element)) {
            if($element instanceof SOAPable) {
                $element->getAsSOAP();
            }
            $element=new SoapVar($element,SOAP_ENC_OBJECT);
        }
    }
}

// ------------------------------------------
//  ABSTRACT EXAMPLE
// ------------------------------------------

class PersonList extends SOAPable {
  protected $ArrayOfPerson; // variable MUST be protected or public!
}

class Person extends SOAPable {
   //any data
}

$client=new SoapClient("test.wsdl", array( 'soap_version'=>SOAP_1_2, 'trace'=>1, 'classmap' => array('Person' => "Person", 'PersonList' => "PersonList")  ));

$PersonList=new PersonList;

// some actions

$PersonList->getAsSOAP();

$client->someMethod($PersonList);

?>

So every class, which will transfer via SOAP, must be extends from class SOAPable.
As you can see, in code above, function prepareSOAPrecursive search another nested objects in parent object or in arrays, and if does it, tries call function getAsSOAP() for preparation of nested objects, after that simply wrap up via SoapVar class.

So in code before transmitting simply call $obj->getAsSOAP()
rlee at melbournechapter dot net 01-May-2008 05:38
Just a note on "DTD not recognised..." faults. Check to make sure your wsdl file contains:

<?xml version ='1.0' encoding ='UTF-8' ?>

Also make sure you use full paths, to your service (in the wsdl, client and server)
...
<wsdlsoap:address location='http://www.mysite.com.au/web_services/myserver.php' />
...
<?php
// SOAP Server
$server = new SoapServer('http://www.mysite.com.au/web_services/hello.wsdl');
...
...
?>

<?php
// SOAP Client
 $client = new SoapClient('http://www.mysite.com.au/web_services/hello.wsdl');
...
...
?>

FYI im no SOAP expert but I hope this helps someone out ;)
Drydenmaker 13-Jan-2008 07:59
Working with a third party service I got: "SOAP-ERROR: Parsing Schema: unexpected <text> in restriction"

Thought it would be worth it to share.  What it is saying is that there is some text in an invalid place.  C# seems to ignore it, and if you are using nusoap it doesn't notice it either.  But what was causing my problem was something like:
<types>
    <schema ...

            <simpleType name="some type">
                <restriction base="xsd:string">
                    <enumeration value="foo"/>;
                </restriction>
            </simpleType>

Note the semicolon (;).  Filter that out and your good.
Dominik 07-Dec-2007 01:31
If you are working
- on localhost
- in WSDL mode
and encounter the following error when you try to connect the soap client with the soap server

Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host...

then change "localhost" to "127.0.0.1" in your WSDL file:
<soap:address location='http://127.0.0.1/soap-server.php'/>
AL13N 28-Nov-2007 04:05
this might be helpful, as it took quite some time for me to find this out:

if you're using some .wsdl and there's a sequence that can be there more than once (ie: maxOccurs > 1), you can specify an non-associative array for it if you have more than 1 items OR you could just specify the one item if there is only one:

<?php
'items' => array(
    array(
        'itemId' => 5,
        'name' => 'some name',
    ),
    array(
        'itemId' => 6,
        'name' => 'some other name',
    ),
),
?>

this also works:

<?php
'items' => array(
    'itemId' => 5,
    'name' => 'some name',
),
?>
Anonymous 26-Nov-2007 11:54
when dealing with wsdl and flash soap with php
(not exactly php, but proper wsdl - took me hours to figure it to work properly in flash webservice)

when naming definitions,
don't use "tns:" but use "typens:"

makesure your "definitions/targetNamespace"
is same as your "soap:body" namespace
example: "urn:mynamespace"

makesure your "binding/type" is declared with "typens"

makesure your service/port/binding is set to 'typens:...'

if you did not do it properly, you will end up with
WSDL.UnrecognizedNamespace - in flash
but seems okay in php soapclient...

happy coding :)
hope this help you to save your time on the wsdl :)
james at mercstudio dot com 24-Nov-2007 01:45
If you use wsdl,

makesure you define the input correctly.
if your method does not contain any input parameter,
you got to makesure that you:

 - do not create the message tag for the input..
 - do not put input within porttype / operation
 - do not put input within binding / operation

if not, you will get the error:
[Client] looks like we got no XML

d***, took me several hours figuring that out...
dirk at waferthin dot com 20-Jun-2007 04:31
I hope this will save someone time. When developing and testing your SOAP server, remember to disable WSDL caching in BOTH client and server:

$ini = ini_set("soap.wsdl_cache_enabled", 0);
jochen dot munz at municons dot com 11-Jun-2007 08:56
When encountering an error message like this

[faultstring] => Function ("yourMethod") is not a valid method for this service

although it is present in the WSDL etc., be aware that PHP caches the wsdl locally for better performance. You can disable the caching via php.ini/.htaccess completely or remove the cache file (/tmp/wsdl-.. if you are on Linux) to force regeneration of it.
albert at jool dot nl 27-Mar-2007 02:59
A note for ppl who use certificates with SOAP under a Windows config: it seems to be required to give the full path to the certificate file - and don't prepend 'file://' :

<?php

$wsdl = "test.wsdl";
$local_cert = "c:\htdocs\mycert.pem";
$passphrase = "xyz";

$client = new SoapClient($wsdl, array('local_cert' => $local_cert, 'passphrase' => $passphrase);

?>
kroesjnov at hotmail dot com 09-Feb-2007 07:38
If you dont want to manually maintain the classmap, make sure you use the same names for your PHP object classes and your WSDL complexTypes, and use the following code:

$classmap = array();
$tmpClient = new SoapClient("soapserver.wsdl");

foreach($tmpClient->__getTypes() as $type)
{
    $array = split(" ", $type);
    if($array[0] == "struct" && class_exists($array[1]))
    {
        $classmap[$array[1]] = $array[1];
    }
}
unset($tmpClient);

$server = new SoapServer("soapserver.wsdl", array("classmap" => $classmap));
unset($classmap);
$server->setClass("someclass");
$server->handle();
brephophagist 18-Jan-2007 09:45
For those working from a wsdl full of complex types that just want a class structure to hang your code on and not worry about typing in long parameter lists (or creating a script to do so): wsdl2php is a wonderful time-saver. Gets a structure going so you can go in and add what validation and special data munging you need: http://www.urdalen.no/wsdl2php/

Big up yourself, Knut.
Olaf Krische 21-Nov-2006 01:48
If you use SSL with a cert and password authentication:

$wsdl = "https://ws.ecopatz.de/ProductInfo?wsdl";
$pass = 'a password';
$certFile = "./mycert.pem";

  $client = new SoapClient($wsdl,
    array(
     'local_cert' => $certFile,
     'passphrase' => $pass
    )
  );

If you have problems with the certfile like this:

  Warning: SoapClient::__construct(): Unable to set local cert chain file `./mycert.pem'; Check that your cafile/capath settings include details of your certificate and its issuer in productinfo.php on line 27

then the certFile is probably in the "wrong format" (the wrong format for php maybe). It worked for me, when i appended the content of the private key file and the certificate file to a single file "mycert.pem":

  cat mycert.key >mycert.pem # mycert.key was the private key
  cat mycert.crt >>mycert.pem # mycert.crt was the signed certificate

Thanks to an author somewhere, who pointed to "curl --cert", where this little "so unimportant" dependency has been mentioned.
nico 25-Aug-2006 06:20
If you want to build a Soap Server for Microsoft Office's client (like Microsoft Office Research Service) you need to rewrite SOAP's namespaces :

<?php
// (...)

$server = new SoapServer($wsdl, array('uri' => $uri, 'classmap' => $classmap));
$server->setClass($class);
function callback($buffer)
{
    $s = array('<ns1:RegistrationResponse>', 'ns1:', 'xmlns:ns1="urn:Microsoft.Search"');
    $r = array('<RegistrationResponse xmlns="urn:Microsoft.Search">', '', '');
   return (str_replace($s, $r, $buffer));
}
ob_start('callback');
$server->handle();
ob_end_flush();

// (...)
?>

There are a complete example at this URL : http://touv.ouvaton.org/article.php3?id_article=104
mini at freebsd dot org 08-Jul-2006 04:54
wokan at cox dot net is incorrect about the security of URI-passed values to HTTPS URIs.  HTTPS connections are HTTP inside SSL -- all of the HTTP traffic, including the request, are encrypted.
adm 01-Mar-2006 11:27
Wondering why the function you just added to your WSDL file is not available to your SOAP client? Turn off WSDL caching, which (as the documentation says) is on by default.

At the top of your script, use:

$ini = ini_set("soap.wsdl_cache_enabled","0");
ckl at ecw dot de 16-Jan-2006 11:54
To debug a SOAP service using SoapServer(), a WSDL file and Zend Studio Client/Server, you have to append ?start_debug=1&amp;debug_port=10000 to the service location:
--- snip ---
... method / service definition ....

<service name="SOAPService">
  <port
    name="SOAPServicePort"
    binding="typens:SOAPServiceBinding">
   <soap:address
   location="$URL?start_debug=1&amp;debug_port=10000"/>
  </port>
</service>
--- snap ---
Rui Martins 18-Dec-2005 08:33
Here's an example on how to pass ArrayOfAnyType arguments
containing complex types.

Suppose your WSDL file defines "http://any.url.com/" as the default namespace and a complex type "SomeComplexType".

If you want to call a WebServices which takes an ArrayOfAnyType argument of "SomeComplexType"s you need to perform the following:

<?php
// complexTypes being an array containing several instances of SomeComplexType

myWSParameter = array();
foreach (complexTypes as ct)
{
   // Don't misspell the type or the namespace. Also note that php won't assume the default namespace defined in the WSDL file.
   myWSParameter []= new SoapVar(ct, 0, "SomeComplexType", "http://any.url.com/");
}
?>

On the other hand, when a WebService returns an ArrayOfAnyType you have to do the following to access each of its elements.

<?php
// Here, we will be echoing each return item
$res = $someWS->myFunction($myArgs)

// If only one element is returned, an array won't be built
if (is_array(myFunctionResult->anyType))
{
   foreach (myFunctionResult->anyType as $soapVar)
   {
      echo $soapVar->enc_value;
   }
}
else
{
   echo myFunctionResult->anyType->enc_value;
}
?>

This has all been tested using a .NET WebService.
ChrisB 23-Oct-2005 11:03
Heads up for anyone using PHP Soap + Sessions + PEAR DB classes.

Every time you make a call, via the soap client to your web service, your PEAR DB session is put to sleep and it doesnt by default wake upon the next request.

To fix this I simply called my particular database close call ifx_close() below my $soap->handle();
Bob 11-Oct-2005 01:17
If you are scratching your head why NuSOAP not working on PHP 5.x , the reason is this built-in SOAP Extenstion uses same soapclient() class name as Nusoap.

replace 'soapclient' with 'soapclient_xxx'  in nusoap.php and you are good to go...
johnjawed at gmail dot com 22-Sep-2005 09:29
For those wondering on how to set attributes on nodes with PHP5 SOAP, it would be done as such:

<... soap env/header>
<foo bar="blah">12345</foo>

array("foo" => array("_" => 12345, "bar" => "blah"));
Darryl 20-Jul-2005 11:46
Having trouble passing complex types over SOAP using a PHP SoapServer in WSDL mode?  Not getting decoded properly?  This may be the solution you're looking for!

When using ComplexType in the schema portion of the WSDL file, You need use an additional step to tell PHP SOAP how to encode the objects.  The first method would be to explicitely encapsulate the object in a SoapVar object - telling PHP to use generalized SOAP encoding rules (which encodes all ComplexTypes as Structs).  This won't work, though, if the client is expecting the objects to be encoded according to the WSDL's schema.  So, The actual way to do this is:

* First, define a specific PHP class which is actually just a data structure holding the various properties, and the appropriate  ComplexType in the WSDL.

<?php
 class MyComplexDataType {
     public $myProperty1;
     public $myProperty2;
 }
?>
 <complexType name="MyWSDLStructure">
 <sequence>
    <element name="MyProperty1" type="xsd:integer"/>
    <element name="MyProperty2" type="xsd:string"/>
 </sequence>
 </complexType>

* Next, Tell the SoapServer when you initialize it to map these two structures together.

<?php
 $classmap = array('MyWSDLStructure' => 'MyComplexDataType');
 $server = new SoapServer("http://MyServer/MyService.wsdl", array('classmap' => $classmap))
?>

* Finally, have your method return an instance of your class directly, and let the SoapServer take care of encoding!

<?php
 public function MySoapCall() {
     $o = new MyComplexDataType();

     $o->myProperty1 = 1;
     $o->myProperty2 = "MyString";

     return $o
 }
?>
Jim Plush 12-Jul-2005 04:45
If you're trying to use the SOAP Extension over SSL with a custom PEM file you need to do this:

$client->_local_cert = "C:\\path\myCert.pem";
flobee at gmail dot com 11-May-2005 01:25
wow, actually a cool program and soap is new for me.
I found out some interessting things i can not debug because the scripts exit without any error messages or notes. :-(

you may have problems with the memory and/or especially on "shared servers" when server load is high.
sometimes the script does the job, sometimes it just stopping at any unknown point.
these are the steps my script does:
* get data from remote server ( ~ 4.5 MB)
* parsing requested object and store the data in a database.

the return with debug messages was intressting:
-> check Mem limit: 30M
-> $client = new new SoapClient($url_wsdl, $options);
-> Memory usage: 185888
-> $client->[requested_method_to_get_data]();
-> check: __getLastResponseHeaders() - after:
-> HTTP/1.1 200 OK // remote server is fine with me :-)
-> Content-Length: 4586742  // I got the data
-> check: Memory usage now: 23098872 // ups !!! this can't be true!!

so, and if now someone on the server takes the rest of RAM  the walk thought the data breaks :-(

so, i need to store the xml tree ($client->client->__last_response) and parsing it by the classical way. (if you would request more RAM, you may get in trouble with the admin if you run a script like this more often! (on shared servers)
OrionI 18-Apr-2005 08:12
If you're having problems calling a .NET web service, see the comments over on http://php.net/soap_soapclient_soapcall (the __soapCall method).
kucerar at hhmi dot org 25-Mar-2005 12:04
Here are 73 test cases that detail the kinds of schemas that PHP5 currently supports and the structures you are expected to plug into them for the return value from your services.   Much better than trying to guess!

http://cvs.php.net/co.php/pecl/soap/tests/schema

You can cycle through the listings by changing the main index in the URL below,  rather than go in and out of the pages

http://cvs.php.net/co.php/pecl/soap/tests/schema/schema052.phpt?r=1.2

I downloaded the whole thing with this,  CVS might work too.
http://www.httrack.com/

With them all downloaded I just browse them with Textpad.
Norman Clarke <norman at dontblink dot com> 21-Feb-2005 04:29
Note that if you should need to set the timeout for your soap request,  you can use ini_set to change the value for the default_socket_timeout. I previously used NuSOAP, whose soap client class has a timeout option, and it took me a while to figure out that PHP's soap uses the same socket options as everything else.
wokan at cox dot net 05-Feb-2005 05:06
It's not good security practice to pass the username and password in the URI when the point of SSL is to prevent that information from being intercepted.  Putting that information in the URI makes it interceptable.  HTTPS-Posted values are safe because values passed in the headers are sent after the SSL handshake has been completed.
mikx at mikx dot de 29-Mar-2004 08:12
It took me a while to properly establish a password protected client connection via https on windows/apache1.3. Here my little guide:

1. The SOAP extension isn't activated by default (PHP5 RC1). Just add "extension=php_soap.dll" to the php.ini and don't forget to set the extension_dir properly (in most cases "c:\php\ext").

2. Add "extension=php_openssl.dll" to the php.ini. This module depends on libeay32.dll and ssleay32.dll - copy them from your php folder to your system32 folder.

3. Restart apache

4. The sourcecode

$client = new SoapClient("https://yourLogin:yourPassword@foo.com/bar.wsdl", array(
    "login"      => "yourLogin",
    "password"   => "yourPassword",
    "trace"      => 1,
    "exceptions" => 0));

$client->yourFunction();

print "<pre>\n";
print "Request: \n".htmlspecialchars($client->__getLastRequest()) ."\n";
print "Response: \n".htmlspecialchars($client->__getLastResponse())."\n";
print "</pre>";

Currently it seems to be necessary to add your login and password both in the uri and in the options array. Not sure if this is the expected behavior.


SOAP コールが失敗したかどうかを調べる

  • ≪ SOAP 関数
  • use_soap_error_handler ≫
  • PHP Manual
  • SOAP 関数
  • SOAP コールが失敗したかどうかを調べる

is_soap_fault

(PHP 5, PHP 7, PHP 8)

is_soap_fault — SOAP コールが失敗したかどうかを調べる

説明

is_soap_fault(mixed $object): bool

この関数は、SOAP コールが失敗したかどうかを調べたいが、例外を使用したくない 場合に有用です。 この関数を使用するには、オプション exceptions に ゼロまたは false を指定して SoapClient オブジェクトを作成する必要があります。 この場合、SOAP メソッドは、特別な SoapFault オブジェクトを返します。 このオブジェクトには、フォルトの詳細 (faultcode, faultstring, faultactor および faultdetails) が含まれています。

exceptions が設定されていない場合、 SOAPコールは、エラー時に例外をスローします。 is_soap_fault() は指定したパラメータ SoapFault オブジェクトであるかどうかを調べます。

パラメータ

object

検査するオブジェクト

戻り値

エラー時に true、それ以外の場合に false を返します。

例

例1 is_soap_fault() の例

<?php
$client = new SoapClient("some.wsdl", array('exceptions' => 0));
$result = $client->SomeFunction();
if (is_soap_fault($result)) {
trigger_error("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring})", E_USER_ERROR);
}
?>

例2 SOAP の標準的なエラーレポートメソッドは例外となる

<?php
try {
$client = new SoapClient("some.wsdl");
$result = $client->SomeFunction(/* ... */);
} catch (SoapFault $fault) {
trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}
?>

参考

  • SoapClient::__construct() - SoapClient のコンストラクタ
  • SoapFault::__construct() - SoapFault コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


SOAP エラーハンドラを使用するかどうかを設定する

  • ≪ is_soap_fault
  • SoapClient ≫
  • PHP Manual
  • SOAP 関数
  • SOAP エラーハンドラを使用するかどうかを設定する

use_soap_error_handler

(PHP 5, PHP 7, PHP 8)

use_soap_error_handler — SOAP エラーハンドラを使用するかどうかを設定する

説明

use_soap_error_handler(bool $enable = true): bool

この関数は、SOAP サーバーで SOAP エラーハンドラを使用するかどうかを設定します。 それまでに設定されていた値を返します。 true に設定すると、 SoapServer アプリケーションでのエラーの詳細が SOAP フォールトメッセージとしてクライアントに送信されます。 false の場合は PHP の標準エラーハンドラを使います。 デフォルトは、エラーを SOAP フォールトメッセージとしてクライアントに送信します。

パラメータ

enable

true に設定すると、エラーの詳細をクライアントに送信します。

戻り値

元の値を返します。

参考

  • set_error_handler() - ユーザー定義のエラーハンドラ関数を設定する
  • set_exception_handler() - ユーザー定義の例外ハンドラ関数を設定する

User Contributed Notes

There are no user contributed notes for this page.


SoapClient クラス

(PHP 5, PHP 7, PHP 8)

はじめに

SoapClient クラスは » SOAP 1.1、» SOAP 1.2 サーバー用のクライアントとなります。 WSDL モードあるいは non-WSDL モードで動作します。

クラス概要

class SoapClient {
/* プロパティ */
private ?string $uri = null;
private ?int $style = null;
private ?int $use = null;
private ?string $location = null;
private bool $trace = false;
private ?int $compression = null;
private ?resource $sdl = null;
private ?resource $typemap = null;
private ?resource $httpsocket = null;
private ?resource $httpurl = null;
private ?string $_login = null;
private ?string $_password = null;
private bool $_use_digest = false;
private ?string $_digest = null;
private ?string $_proxy_host = null;
private ?int $_proxy_port = null;
private ?string $_proxy_login = null;
private ?string $_proxy_password = null;
private bool $_exceptions = true;
private ?string $_encoding = null;
private ?array $_classmap = null;
private ?int $_features = null;
private int $_connection_timeout;
private ?resource $_stream_context = null;
private ?string $_user_agent = null;
private bool $_keep_alive = true;
private ?int $_ssl_method = null;
private int $_soap_version;
private ?int $_use_proxy = null;
private array $_cookies = [];
private ?array $__default_headers = null;
private ?SoapFault $__soap_fault = null;
private ?string $__last_request = null;
private ?string $__last_response = null;
private ?string $__last_request_headers = null;
private ?string $__last_response_headers = null;
/* メソッド */
public __construct(?string $wsdl, array $options = [])
public __call(string $name, array $args): mixed
public __doRequest(
string $request,
string $location,
string $action,
int $version,
bool $oneWay = false
): ?string
public __getCookies(): array
public __getFunctions(): ?array
public __getLastRequest(): ?string
public __getLastRequestHeaders(): ?string
public __getLastResponse(): ?string
public __getLastResponseHeaders(): ?string
public __getTypes(): ?array
public __setCookie(string $name, ?string $value = null): void
public __setLocation(?string $location = null): ?string
public __setSoapHeaders(SoapHeader|array|null $headers = null): bool
public __soapCall(
string $name,
array $args,
?array $options = null,
SoapHeader|array|null $inputHeaders = null,
array &$outputHeaders = null
): mixed
}

プロパティ

__default_headers

__last_request

__last_request_headers

__last_response

__last_response_headers

__soap_fault

_classmap

_connection_timeout

_cookies

_digest

_encoding

_exceptions

_features

_keep_alive

_login

_password

_proxy_host

_proxy_login

_proxy_password

_proxy_port

_soap_version

_ssl_method

_stream_context

_use_digest

_use_proxy

_user_agent

compression

httpsocket

httpurl

location

sdl

style

trace

typemap

uri

use

目次

  • SoapClient::__call — SOAP 関数をコールする (非推奨)
  • SoapClient::__construct — SoapClient のコンストラクタ
  • SoapClient::__doRequest — SOAP リクエストを実行する
  • SoapClient::__getCookies — クッキーの一覧を取得する
  • SoapClient::__getFunctions — SOAP 関数の一覧を返す
  • SoapClient::__getLastRequest — 直近の SOAP リクエストを返す
  • SoapClient::__getLastRequestHeaders — 直近の SOAP リクエストヘッダを返す
  • SoapClient::__getLastResponse — 直近の SOAP レスポンスを返す
  • SoapClient::__getLastResponseHeaders — 直近の SOAP レスポンスヘッダを返す
  • SoapClient::__getTypes — SOAP 型の一覧を返す
  • SoapClient::__setCookie — SOAP リクエストと共に送信されるクッキーを設定する
  • SoapClient::__setLocation — 使用するウェブサービスの場所を設定する
  • SoapClient::__setSoapHeaders — 以降のコール用の SOAP ヘッダを設定する
  • SoapClient::__soapCall — SOAP 関数をコールする

User Contributed Notes

spam at kacke dot de 09-Sep-2022 08:46
In case a soap response returns nodes with the attribute xsi:nil="false", they are currently not processed by php-soapclient.

This seems to be a bug (not correct).

Workaround:

class mySoapClient extends SoapClient {
        public function __doRequest($request, $location, $action, $version, $one_way = 0) {
        $response = parent::__doRequest($request, $location, $action, $version, $one_way);
        $response = str_replace('xsi:nil="false"',"",$response);
        return $response;
    }
}

Took me a day. Hope it can help
Toppi
David 15-Feb-2017 12:57
Under IIS and PHP 7, when creating an new SoapClient, it will through an internal 500 error.

This could be caused by invalid permissions to the wsdl cache directory when using 'cache_wsdl'=>WSDL_CACHE_DISK or WSDL_CACHE_BOTH.

This worked for me:
    try {
        $arrContextOptions=array("ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false,'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT));

        $options = array(
                'soap_version'=>SOAP_1_2,
                'exceptions'=>true,
                'trace'=>1,
                'cache_wsdl'=>WSDL_CACHE_NONE,
                'stream_context' => stream_context_create($arrContextOptions)
        );
        $client = new SoapClient('https://url/dir/file.wsdl', $options);

    } catch (Exception $e) {
        echo "<h2>Exception Error!</h2>";
        echo $e->getMessage();
    }
sheikh303 at gmail dot com 13-Jan-2017 07:51
What is the core method to call remote WSDL file while creating SoapClient object?
is it CURL, wget or anyother?
Ricardo Pedrassani 03-Jun-2016 01:53
If the XML have identities with same name in different levels there is a solution. You don´t have to ever submit a raw XML (this PHP SOAP object don´t allows send a RAW XML), so you have to always translate your XML to a array, like the example below:

$originalXML = "
<xml>
  <firstClient>
      <name>someone</name>
      <adress>R. 1001</adress>
  </firstClient>
  <secondClient>
      <name>another one</name>
      <adress></adress>
  </secondClient>
</xml>"

//Translate the XML above in a array, like PHP SOAP function requires
$myParams = array('firstClient' => array('name' => 'someone',
                                  'adress' => 'R. 1001'),
            'secondClient' => array('name' => 'another one',
                                  'adress' => ''));

$webService = new SoapClient($someURL);
$result = $webService->someWebServiceFunction($myParams);
mcinantyspam at fejm dot pl 13-May-2016 11:32
Please note, that if you provide values that contain illegal xml characters (ASCII codes 0-8,  11-12, 14-15 - or x0-x8, xB-xC, xE-xF in hex), php's SoapClient will do send them in request, although such request is improper because it does not meet XML 1.0 requirements.
You always have to replace or remove these characters in your data before supplying them to SoapClient
info at nospam x valiton x com 13-Apr-2015 08:06
CAUTION:
I had quite a bit of trouble trying to make a request with fopen through a proxy to a secure url.  I kept getting a 400 Bad Request back from the remote host.  It was receiving the proxy url as the SNI host.  In order to get around this I had to explicity set the SNI host to the domain I was trying to reach.  It's apparently the issue outlined in this bug:

https://bugs.php.net/bug.php?id=63519

<?php
$domain = parse_url($file, PHP_URL_HOST);
$proxy_string = "tcp://" . WP_PROXY_HOST  . ":" . WP_PROXY_PORT;
$opts = array(
    'http' => array( 'proxy' => $proxy_string ),
    'ssl' => array( 'SNI_enabled' => true, 'SNI_server_name' => $domain));
$context = stream_context_create($opts);
$handle = fopen( $file, 'r', false, $context );
?>

src:
http://php.net/manual/en/context.http.php#114314
acopantepuy at gmail dot com 11-Apr-2015 02:45
when they want to pass variables into the http header that is how it is done:

<?php

$aHTTP['http']['header'] =  "User-Agent: PHP-SOAP/5.5.11\r\n";

$aHTTP['http']['header'].= "username: XXXXXXXXXXX\r\n"."password: XXXXX\r\n";

$context = stream_context_create($aHTTP);

$client=new SoapClient("https://ocppws-cert.extra.bcv.org.ve:443/AltoValor/BancoUniversal?WSDL",array('trace' => 1,"stream_context" => $context));

$result = $client->jornadaActiva();
var_dump($result);
?>
acopantepuy at gmail dot com 11-Apr-2015 02:42
when they want to pass variables into the http header that is how it is done:

<?php

$aHTTP['http']['header'] =  "User-Agent: PHP-SOAP/5.5.11\r\n";

$aHTTP['http']['header'].= "username: C1040001760102\r\n"."password: bcv2020\r\n";

$context = stream_context_create($aHTTP);

$client=new SoapClient("https://ocppws-cert.extra.bcv.org.ve:443/AltoValor/BancoUniversal?WSDL",array('trace' => 1,"stream_context" => $context));

$result = $client->jornadaActiva();
var_dump($result);
?>
romuloum at hotmail dot com 19-Feb-2015 04:22
After migrating to PHP 5.6.5, the soap 1.2 did not work anymore. So I solved the problem by adding optional parameters SSL.
My error: failed to load external entity
How to solve:
        // options for ssl in php 5.6.5
        $opts = array(
            'ssl' => array('ciphers'=>'RC4-SHA', 'verify_peer'=>false, 'verify_peer_name'=>false)
        );
        // SOAP 1.2 client
        $params = array ('encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_2, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts) );
        $oSoapClient = new SoapClient ( $url . "?WSDL", $params );
softontherocks at gmail dot com 22-Nov-2014 08:32
I posted in this URL http://softontherocks.blogspot.com/2014/02/web-service-soap-con-php.html a full example of a nusoap web service.

There is defined the server and the cliente who calls the web service.

I hope it would be useful for you.
martin dot schenck at plugsurfing dot com 15-Sep-2014 03:34
If you want to connect to a server that only supports SSLv2/3 and/or TLS 1.0 (no TLS 2 or 3), tell the SOAP client if you get a connection error by setting the appropriate stream context:
<?php
  $opts = array(
    'ssl' => array('ciphers'=>'RC4-SHA')
  );

  $objSoapClient = new SoapClient(
    'https://example.com/?wsdl',
    array ( "encoding"=>"ISO-8859-1",
    'stream_context' => stream_context_create($opts)
    // your options
    );
?>

You might need to disable the SOAP caching of WSDLs in order for the SOAP client to use the new context.
Stefan 03-Jun-2014 11:04
There is a known bug with some versions of Xdebug which can cause SoapClient to not throw an exception but instead cause a fatal error.

Surround the SoapClient call with xdebug_disable(); and xdebug_enable();  to work around this problem.

For reference:

http://bugs.xdebug.org/view.php?id=249
https://bugs.php.net/bug.php?id=47584
Anonymous 12-Sep-2013 09:25
I got the following error when trying to load the WSDL file:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: <message> 'MessageName' already defined

In my case there was no double definitions but it was including other files - I think one of them contained a duplicate message with a different namespace (which SoapClient doesn't like).

I resolved it by loading the WSDL in SoapUI, right-clicking and selecting "Export definition". The WSDL that then got created worked fine. Hope this helps somebody.
Guillermo Prandi 20-Feb-2012 02:10
To make an HTTPS call with a client certificate, you can do it this way:

1) Create a file containing both the key and the signed certificate. I did this by concatenating my (.pem) key and the certificate I've got signed from my CA (also .pem format). The file looked like this:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKagQC1N27Ilb9pWil2NaX2qM8FquXBXK5T1AydOv7sCotsc8MAwbi7
......(snip)......
wAiOCD4K9TyMS76pIS8UyfJl/oIrn7EF24BUpaUfsh8=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIC/zCCAmigAwIBAgIEAIl1JzANBgkqhkiG9w0BAQQuADBQMQswCQYxVQQGEaJV
......(snip)......
eSPds1hLKYSg0bd3uI7LhaDLOC1PPgb77sYe/uYkUWuHBzllts5x/pfue0zaIBKG
Omjy
-----END CERTIFICATE-----

2) Reference your certificate in the creation of the SOAP client, like this:

$protected_url = "https://my-server/?wsdl";
$my_cert_file = "/my/path/to/mycert.pem";

$client = new SoapClient($protected_url, array('local_cert', $my_cert_file) );
egiardina at badatmath dot com 03-Aug-2011 06:05
This one drove me nuts... if you are connecting to a web service run on Cassini, (Visual Studio's web server) from php, you may not be able to call web service functions or load a WSDL out-of-the-box.

My set up is that I am using xampp on my windows development machine, and also using Visual Studio's built in web-server. I built a web service in visual studio. I wrote a simple PHP script, running under xampp, to access this service, so the two projects can 'talk' to each other. What I found was the WSDL was never loaded.

So I moved the WSDL local to the PHP file and accessed it directly. Still no calls. Turns out, PHP's SoapClient seems to have a problem with 'localhost' as a web service endpoint. So I hand-edited the web service endpoint URL to read 127.0.0.1 instead of localhost, and Voila! Web Service calls work:

Here is my PHP, now working:
<?php
$client = new SoapClient("http://localhost/code/soap.wsdl");
$something =  $client->HelloWorld(array());
echo $something->HelloWorldResult;
die();

?>

Here is my modified WSDL:
  <wsdl:service name="MyService">
    <wsdl:port name="MyServiceSoap" binding="tns:MyServiceSoap">
      <soap:address location="http://127.0.0.1:55274/MyService/MyService.asmx" />
....

    </wsdl:port>
stepan dot zarubin at gmail dot com 30-Jun-2011 11:51
Well, this example works fine:

<?php
try {
    $x = @new SoapClient("non-existent.wsdl");
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

Just make sure use NEW with @.
jjlopez 09-Mar-2011 11:36
If you are making soap calls in WSDL mode , and the address of your web service includes a port different from 80 (like http://my_ip_address:8080//service.asmx?wsdl), the WSDL file is fetched correctly, but all subsequent requests are made without any port in the host field. This causes a SoapFault exception when trying to call any of the service's methods.

You need to redefine the soapClient class and force the port in each call.

See this example:

http://www.victorstanciu.ro/php-soapclient-port-bug-workaround/
hugues at zonereseau dot com 17-Feb-2011 09:17
When you need to connect to services requiring to send extra header use this method.

Here how we can to it with PHP and SoapClient

<?php
class exampleChannelAdvisorAuth
{
    public $DeveloperKey;
    public $Password;

    public function __construct($key, $pass)
    {
        $this->DeveloperKey = $key;
        $this->Password = $pass;
    }
}

$devKey        = "";
$password    = "";
$accountId    = "";

// Create the SoapClient instance
$url         = "";
$client     = new SoapClient($url, array("trace" => 1, "exception" => 0));

// Create the header
$auth         = new ChannelAdvisorAuth($devKey, $password);
$header     = new SoapHeader("http://www.example.com/webservices/", "APICredentials", $auth, false);

// Call wsdl function
$result = $client->__soapCall("DeleteMarketplaceAd", array(
    "DeleteMarketplaceAd" => array(
        "accountID"        => $accountId,
        "marketplaceAdID"    => "9938745"        // The ads ID
    )
), NULL, $header);

// Echo the result
echo "<pre>".print_r($result, true)."</pre>";
if($result->DeleteMarketplaceAdResult->Status == "Success")
{
    echo "Item deleted!";
}
?>
fourat dot zouari at tritux dot com 20-Jun-2009 08:08
In addition to the KeepAlive trick which is a "server-side" modification, on the "client side" default_socket_timeout should be increased from its default value (60) when you deal with ~slow SOAP servers.
As for the KeepAlive, if creating a new separate vhost for the soap api is not possible, you can add this to your existing vhost: BrowserMatch "^PHP-SOAP" nokeepalive
where PHP-SOAP is the agent name of your soap client, if you dont know what agent name your client use, just checkout the access.log of your apache.
peter dot hansen at fastit dot net 01-May-2009 06:57
When you get errors like:
"Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in"
after a few (time intensive) SOAP-Calls, check your webserver-config.

Sometimes the webservers "KeepAlive"-Setting tends to result in this error. For SOAP-Environments I recommend you to disable KeepAlive.

Hint: It might be tricky to create a dedicated vhost for your SOAP-Gateways and disable keepalive just for this vhost because for normal webpages Keepalive is a nice speed-boost.


SOAP 関数をコールする (非推奨)

  • ≪ SoapClient
  • SoapClient::__construct ≫
  • PHP Manual
  • SoapClient
  • SOAP 関数をコールする (非推奨)

SoapClient::__call

(PHP 5, PHP 7, PHP 8)

SoapClient::__call — SOAP 関数をコールする (非推奨)

説明

public SoapClient::__call(string $name, array $args): mixed

このメソッドを直接呼ぶのは推奨しません。 通常、SOAP の関数は SoapClient オブジェクトのメソッドとして呼べるようになっています。 それができない場合、あるいは追加オプションを指定する必要がある場合は、 SoapClient::__soapCall() を使いましょう。

パラメータ

name

コールするSOAP関数の名前。

args

関数に渡す引数の配列。 連想配列でも、数値添字形式の配列でも構いません。 ほとんどのSOAPサーバーに対しては、 引数の名前を指定することが必須であり、 その場合は、連想配列を指定する必要があることに注意して下さい。

戻り値

SOAP 関数は、一つまたは複数の値を返す可能性があります。 SOAP 関数から値をひとつだけ返す場合は、 返り値はスカラーになります。 複数の値を返す場合は、出力パラメータの名前がついた連想配列を返します。

エラーが発生した場合、 かつ SoapClient の exceptions を false に設定した場合は、 SoapFault オブジェクトを返します。

User Contributed Notes

philipp dot gruber at catchoftheday dot com dot au 07-Apr-2014 12:27
If you are using a WSDL, the library will strip out anything from your parameters that is not defined in WSDL, without giving you any notice about this.

So if your parameters are not fully matching the WSDL, it will simply send no parameters at all.
This can be a bit hard to debug if you don't have access to the target server.

__soapCall() expects parameters in an array called 'parameters' as opposed to calling the function via it's WSDL name, where it accepts the parameters as a plain array.

I.e. if a function called sendOrder expects a parameter (array) called orderDetails, you can call it like this:

$orderDetails = array(/* your data */);
$soap->sendOrder(array('orderDetails' => $orderDetails));

Which is equivalent to:

$client->__soapCall('sendOrder', array('parameters' => array('orderDetails' => $orderDetails)));

Note the additional 'parameters' key used in __soapCall().
KRavEN 17-Jun-2009 06:56
extend of __call thats adds a retry to handle the occasional 'Could not connect to host' exceptions

<?php
class LocalSoapClient extends SoapClient
{

  public function __call($function_name, $arguments)
  {
    $result = false;
    $max_retries = 5;
    $retry_count = 0;

    while(! $result && $retry_count < $max_retries)
    {
      try
      {
        $result = parent::__call($function_name, $arguments);
      }
      catch(SoapFault $fault)
      {
        if($fault->faultstring != 'Could not connect to host')
        {
          throw $fault;
        }
      }
      sleep(1);
      $retry_count ++;
    }
    if($retry_count == $max_retries)
    {
      throw new SoapFault('Could not connect to host after 5 attempts');
    }
    return $result;
  }
}
?>
bananos at dev dot co dot ua 11-Apr-2008 05:13
I'm writing PHP SOAP client (based on php_soap extension) which uses Google AdService,
today, I tried to create sample Ad using   AdService::addAds()  and discovered that my SOAP library does not pass
"headline", "description1", "description2"  parameters in SOAP request.

First, I thought that this was something wrong with my data, coz I was getting validation errors like
"One or more input elements failed validation."   Then I decided to take a look at WSDL description
https://adwords.google.com/api/adwords/v11/AdService?wsdl

And voila !  I've found this:

<complexType name="Ad" abstract="true">
<sequence>
  <element name="adGroupId" type="xsd:int"/>
  <element name="adType" nillable="true" minOccurs="0" type="impl:AdType"/>
  <element name="destinationUrl" nillable="true" minOccurs="0" type="xsd:string"/>
  <element name="disapproved" type="xsd:boolean"/>
  <element name="displayUrl" nillable="true" minOccurs="0" type="xsd:string"/>
  <element name="exemptionRequest" nillable="true" minOccurs="0" type="xsd:string"/>
  <element name="id" type="xsd:long"/>
  <element name="status" nillable="true" minOccurs="0" type="impl:AdStatus"/>
</sequence>

</complexType>

There is no any ''description", "headline1", "headline2", however there is another complexType

<complexType name="TextAd">
    <complexContent>
    <extension base="impl:Ad">
    <sequence>

<element name="description1" nillable="true" type="xsd:string"/>
<element name="description2" nillable="true" type="xsd:string"/>
<element name="headline" nillable="true" type="xsd:string"/>
</sequence>

</extension>
</complexContent>
</complexType>

So, the thing is when you are working with php_soap be aware of complexType extensions which does not work in php_soap when you try to do things like:

<?php

$client = new
    SoapClient(
       "https://adwords.google.com/api/adwords/v11/AdService?wsdl",
        array(  'trace'      => true,
                'exceptions' => true,
             )

    );

$entropy     = substr(md5(rand(0, time())), 0, 10);
//create Ad test structure
$sample_ad =  array(
               "id" => 0,
               "adGroupId" => 0,
               "adType" => 'TextAd',
               "disapproved" => false,
               "destinationUrl" => 'http://test.com',
               "displayUrl" => 'www.Test.com',
               "status" => "Paused", //  Enabled / Disabled
               "descr_iption1" => 'D1_'.$entropy,
               "des_cription2" => 'D2_'.$entropy,
               "head_line" => 'H_'.$entropy
        );

$client->addAds(array('ads' => array($sample_ad) );
?>
Samil Abud 19-Dec-2007 12:00
Hi,
This is a good example, for the SOAP function "__call".
However it is deprecated.

<?php
$wsdl = "http://webservices.tekever.eu/ctt/?wsdl";
$int_zona = 5;
$int_peso = 1001;
$cliente = new SoapClient($wsdl);
print "<p>Envio Internacional: ";
$vem = $cliente->__call('CustoEMSInternacional',array($int_zona, $int_peso));
print $vem;
print "</p>";
?>


SoapClient のコンストラクタ

  • ≪ SoapClient::__call
  • SoapClient::__doRequest ≫
  • PHP Manual
  • SoapClient
  • SoapClient のコンストラクタ

SoapClient::__construct

(PHP 5, PHP 7, PHP 8)

SoapClient::__construct — SoapClient のコンストラクタ

説明

public SoapClient::__construct(?string $wsdl, array $options = [])

SOAP サービスに接続するための SoapClient オブジェクトを生成します。

パラメータ

wsdl

サービスを記述した WSDL ファイルまたは URI。 これは自動的にクライアントを設定します。 指定されない場合、クライアントは 非WSDL モードで動作します。

注意:

デフォルトでは、 WSDL ファイルはパフォーマンスのためキャッシュされます。 このキャッシュ機能を無効にしたり、設定を変更する場合は、 SOAP 設定オプション や cache_wsdl オプション を参照ください。

options

SOAP クライアントに指定する追加オプションを連想配列で指定します。 wsdl が指定された場合、 このパラメータはオプションです。 指定されない場合、 location とurl オプションを指定する必要があります。

location string

リクエストを送信する SOAP サーバーのURL

wsdl パラメータが指定されない場合、 必須です。 wsdl と location が指定された場合、 location オプションは WSDL ファイルで指定されたあらゆる location を上書きします。

uri string

SOAP サービスのターゲット名前空間です。

wsdl が指定されていない場合、このパラメータは必須です。 そうでない場合、この値は無視されます。

style int

SOAP_RPC と SOAP_DOCUMENT を使うと、 このクライアントで使うバインディングスタイルを指定します。 SOAP_RPC は RPCスタイルのバインディングを指定します。 この場合の SOAP リクエストのボディには、 関数コールの標準エンコーディングが含まれます。 SOAP_DOCUMENT は ドキュメントスタイルのバインディングを指定します。 この場合の SOAP リクエストのボディには、 サービス定義を記した XML ドキュメントが含まれます。

wsdl が指定された場合、 このオプションは無視され、 スタイルは WDSL ファイルから読み込まれます。

このオプションと wsdl パラメータ を両方指定しなかった場合、 RPCスタイルを使います。

use int

SOAP_ENCODED や SOAP_LITERAL を使うと、 このクライアントで使うエンコーディングスタイルを指定します。 SOAP_ENCODED は、 SOAP 仕様で定義された型を使い、エンコーディングを指定します。 SOAP_LITERAL は、 サービスで定義されたスキームを使い、 エンコーディングを指定します。

wsdl が指定された場合、 このオプションは無視され、 エンコーディングは WDSL ファイルから読み込まれます。

このオプションと wsdl パラメータ を両方指定しなかった場合、 "encoded" スタイルを使います。

soap_version int

使用する SOAP プロトコルのバージョンを指定します: SOAP 1.1 の場合は SOAP_1_1 を指定します。 SOAP 1.2 の場合は SOAP_1_2 を指定します。

省略した場合は、SOAP 1.1 を使います。

authentication int

HTTP 認証をリクエスト時に使う際の、 認証方法を指定します。 SOAP_AUTHENTICATION_BASIC と SOAP_AUTHENTICATION_DIGEST が指定できます。

省略された場合、 かつ login オプションが指定されると Basic 認証を使います。

login string

Basic 認証と、Digest 認証で使うユーザー名を指定します。

password string

Basic 認証と、Digest 認証で使うパスワードを指定します。

HTTPS クライアント認証で使う passphrase と混同しないようにして下さい。

local_cert string

HTTPS 認証で使うクライアント証明書のパス。 証明書ファイルは、 証明書と秘密鍵が両方入った状態で、 PEMエンコードされている必要があります。

このファイルには、発行者のチェインも含めることができます。 それらを含める場合、クライアント証明書の後に置く必要があります。

stream_context でも設定できます。 この場合、秘密鍵のファイルは別に指定できます。

passphrase string

local_cert オプションで指定したクライアント証明書のための パスフレーズ。

Basic 認証や Digest 認証で使う password と混同しないようにして下さい。

stream_context でも設定できます。

proxy_host string

HTTPリクエスト時に使う、 プロキシサーバーとして用いるホスト名を指定します。

proxy_port オプションも指定する必要があります。

proxy_port int

proxy_host で指定したプロキシサーバーに接続する際に使うポート番号。

proxy_login string

proxy_host で指定したプロキシサーバーに接続する際に、 Basic 認証で用いるオプションのユーザー名

proxy_password string

proxy_host で指定したプロキシサーバーに接続する際に、 Basic 認証で用いるオプションのパスワード

compression int

SOAP リクエストとレスポンスの圧縮を有効にします。

この値は、3つの値を ビット演算のOR で指定します: オプションの SOAP_COMPRESSION_ACCEPT は、"Accept-Encoding" ヘッダを指定します。 SOAP_COMPRESSION_GZIP や SOAP_COMPRESSION_DEFLATE は、使用する圧縮アルゴリズムと、 リクエストで使う圧縮レベルを 1 から 9 の間の数値で指定します。 たとえば、双方向の gzip 圧縮を最高の圧縮レベルで行う場合は、 SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9 を指定します。

encoding string

内部的な文字エンコーディングを指定します。 リクエストはここで指定されたエンコーディングから、 常に UTF-8 に変換して送られ、 レスポンスはこのエンコーディングに変換されます。

trace bool

リクエストやレスポンスのキャプチャを行います。 キャプチャした情報は SoapClient::__getLastRequest(), SoapClient::__getLastRequestHeaders(), SoapClient::__getLastResponse(), SoapClient::__getLastResponseHeaders(). を使ってアクセスできます。

省略した場合のデフォルト値は false です。

classmap array

WSDL 型を PHP クラスにマッピングするために使用可能です。 このオプションには、キーとしてWSDL 型、 値として PHP クラスの名前を持つ配列を指定する必要があります。 型の名前は、 要素の(タグ)名前と一致させる必要はないことに注意して下さい。

指定するクラス名は、常に 名前空間 で完全修飾されているべきですし、 \ で始まってはいけません。 正しい名前は、 ::class を使えば生成できます。

クラスのインスタンスを生成する場合、 コンストラクタはコールされず、 個別のプロパティに対して マジックメソッド __set() と __get() が コールされる点にも注意して下さい。

typemap array

ユーザー定義のコールバック関数を使って、 型マッピングを定義します。 型マッピングは配列で定義され、 キーは type_name (XML 要素型を指定した文字列)、 type_ns (名前空間URI を指定した文字列)、 from_xml (文字列を受け取り、 オブジェクトを返す callable)、 to_xml (オブジェクトをひとつ受け取り、 文字列を返す callable) です。

exceptions bool

エラーが起きた際に、 SoapFault をスローするかどうかを指定します。

デフォルトは true です。

connection_timeout int

SOAP サービスに接続する際のタイムアウト秒数を指定します。 これを使用しても、 レスポンスが遅いサービスのタイムアウトを定義することはできません。 サービスのコールが完了するまでの待ち時間を制限するには、 default_socket_timeout が使えます。

cache_wsdl int

wsdl を指定した場合、 かつ soap.wsdl_cache_enabled が有効になっている場合に、 このオプションはキャッシュのタイプを指定します。 WSDL_CACHE_NONE, WSDL_CACHE_DISK, WSDL_CACHE_MEMORY, WSDL_CACHE_BOTH のいずれかが指定できます。

ふたつのタイプのキャッシュが利用できます。 WSDL を現在のプロセスのメモリにキャッシュする インメモリのキャッシュと、 WSDL をディスク上にキャッシュし、 全てのプロセスと共有するディスクキャッシュがあります。 ディスクキャッシュで使うディレクトリは soap.wsdl_cache_dir で指定できます。 どちらのタイプのキャッシュでも、 soap.wsdl_cache_ttl で指定した寿命があります。 インメモリキャッシュの場合、 soap.wsdl_cache_limit でキャッシュエントリの数の最大値も指定できます。

この値を指定しない場合、 soap.wsdl_cache オプションの値を使います。

user_agent string

リクエストをする際に User-Agent で使う値。

stream_context でも指定できます。

この値を指定しない場合、 "PHP-SOAP/" の後に、 PHP_VERSION の値を付けたものを使います。

stream_context resource

追加のオプションを設定できる stream context。 これは stream_context_create() で生成できます。

このコンテキストには、 socket context options, SSL context options, HTTP context options が含まれます: content_type, header, max_redirects, protocol_version, user_agent が設定できます。

'header' コンテキストオプションで指定された場合、以下のHTTPヘッダは自動生成され、無視されることに注意して下さい: host, connection, user-agent, content-length, content-type, cookie, authorization, proxy-authorization

features int

以下の機能を有効にするための、ひとつ以上のビットマスク:

SOAP_SINGLE_ELEMENT_ARRAYS

レスポンスを配列にデコードする際には、 特定の親要素の中で要素名が一度または複数回現れるかをデフォルトで自動検知します。 一度しか現れない要素については、 オブジェクトのプロパティを通じてコンテンツに直接アクセスできます。 複数回現れる要素については、 プロパティには配列が含まれ、 マッチする要素の内容の配列が入ります。

SOAP_SINGLE_ELEMENT_ARRAYS が有効になった場合、 一度しか現れない要素は要素数がひとつの配列になります。 これは全ての要素と一貫性を保つためです。 これは、レスポンスにスキーマを含んでいるWSDLを使っている場合にのみ意味があります。具体的には、以下の例を参照ください。

SOAP_USE_XSI_ARRAY_TYPE

use オプション を使ったり、 WSDL プロパティを encoded に設定した場合に、 配列の型をスキーマ特有のそれにするのではなく、 SOAP-ENC:Array にします。

SOAP_WAIT_ONE_WAY_CALLS

WDSL が一方向のリクエストを指定していた場合であっても、 レスポンスを待つ。

keep_alive bool

Connection: Keep-Alive ヘッダや Connection: close を送信するかどうかを boolean で指定します。

デフォルトは true です。

ssl_method string

セキュアな HTTP 接続で用いる、 SSL または TLS のバージョンを指定します。 SOAP_SSL_METHOD_SSLv2 や SOAP_SSL_METHOD_SSLv3 を指定すると、 それぞれ SSL 2、 SSL 3 を強制的に使います。 SOAP_SSL_METHOD_SSLv23 を指定しても意味がありません。 これは後方互換のためだけに存在しています。 PHP 7.2 以降では、 SOAP_SSL_METHOD_TLS を指定しても同様に意味がありません。 これより前のバージョンでは、 この定数を指定すると TLS 1.0 を強制的に使っていました。

SSL バージョン 2 と 3 はセキュアでないとみなされています。 よってインストール済みの OpenSSL ライブラリではサポートされていない可能性があることに注意しましょう。

このオプションは PHP 8.1.0 以降では 推奨されません。 個別の TLS のバージョンを指定できる、 より柔軟性に富んだ代替があります。 stream_context オプションを 'crypto_method' コンテキストパラメータと一緒に使うようにして下さい。

例1 TLS 1.3 だけを指定する

<?php
$context = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT
]
]);
$client = new SoapClient("some.wsdl", ['context' => $context]);

エラー / 例外

SoapClient::__construct() は、 非 WSDL モードで location や uri オプションを指定しなかったときに E_ERROR エラーとなります。

wsdl URI が読み込めなかった場合に SoapFault をスローします。

例

例2 SoapClient::__construct() の例

<?php

$client = new SoapClient("some.wsdl");

$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_2));

$client = new SoapClient("some.wsdl", array('login' => "some_name",
'password' => "some_password"));

$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080));

$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080,
'proxy_login' => "some_name",
'proxy_password' => "some_password"));

$client = new SoapClient("some.wsdl", array('local_cert' => "cert_key.pem"));

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/",
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL));

$client = new SoapClient("some.wsdl",
array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9));

$client = new SoapClient("some.wsdl", array('encoding'=>'ISO-8859-1'));

class MyBook {
public $title;
public $author;
}

$client = new SoapClient("books.wsdl", array('classmap' => array('book' => "MyBook")));

$typemap = array(
array("type_ns" => "http://schemas.example.com",
"type_name" => "book",
"from_xml" => "unserialize_book",
"to_xml" => "serialize_book")
);
$client = new SoapClient("books.wsdl", array('typemap' => $typemap));

?>

例3 SOAP_SINGLE_ELEMENT_ARRAYS の機能を使う

/* Assuming a response like this, and an appropriate WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:example">
<SOAP-ENV:Body>
<response>
<collection>
<item>Single</item>
</collection>
<collection>
<item>First</item>
<item>Second</item>
</collection>
</response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*/

echo "Default:\n";

$client = new TestSoapClient(__DIR__ . '/temp.wsdl');
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );

echo "\nWith SOAP_SINGLE_ELEMENT_ARRAYS:\n";

$client = new TestSoapClient(__DIR__ . '/temp.wsdl', ['features' => SOAP_SINGLE_ELEMENT_ARRAYS]);
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );

上の例の出力は以下となります。

Default:
string(6) "Single"
array(2) {
  [0] =>
  string(5) "First"
  [1] =>
  string(6) "Second"
}

With SOAP_SINGLE_ELEMENT_ARRAYS:
array(1) {
  [0] =>
  string(6) "Single"
}
array(2) {
  [0] =>
  string(5) "First"
  [1] =>
  string(6) "Second"
}

User Contributed Notes

turabgarip at gmail dot com 06-Jun-2024 09:21
Two notes about the steam_context option:

1- In the example of the documentation, it says:

<?php
$client = new SoapClient("some.wsdl", ['context' => $context]);
?>

This is wrong. As it is stated in the parameters list, it must be "stream_context" and NOT "context".

2- The HTTP Context manual here: https://www.php.net/manual/en/context.http.php

It says header can either be of type array or string. This is also wrong. It may not necessarily be optional because it might depend on your PHP compile time configuration.

If your instance is compiled --with-curlwrappers option, you should use array type for header in the HTTP context and if not; you should use a string separated by new line (\n) for the header. I am not sure if SoapClient respects curl_wrappers option because although it is enabled in my instance and although I am using arrays for the headers to create HTTP context for non-Soap operations; SoapClient required me to use a string. It otherwise just dropped the stream_context altogether.

So with SoapClient, you better use a string for the HTTP header like:

<?php

$context = stream_context_create(array(
    'http' => array(
        'user_agent' => 'My App',
        'header' =>
            "Custom-Header: Value\n" .
            "Another Header: Surprise"
    )
));

$client = new SoapClient('some.wsdl', ['stream_context' => $context]);
?>


SOAP リクエストを実行する

  • ≪ SoapClient::__construct
  • SoapClient::__getCookies ≫
  • PHP Manual
  • SoapClient
  • SOAP リクエストを実行する

SoapClient::__doRequest

(PHP 5, PHP 7, PHP 8)

SoapClient::__doRequest — SOAP リクエストを実行する

説明

public SoapClient::__doRequest(
string $request,
string $location,
string $action,
int $version,
bool $oneWay = false
): ?string

HTTP 上で SOAP リクエストを実行します。

異なるトランスポート層や追加の XML を処理する、もしくは他の目的のために サブクラスでこのメソッドをオーバーライドする事ができます。

パラメータ

request

XML SOAP リクエスト

location

リクエスト先の URL

action

SOAP アクション

version

SOAP バージョン

oneWay

oneWay に true を設定すると、このメソッドは何も返しません。 レスポンスが不要なときにこれを使用します。

戻り値

XML SOAP レスポンス

変更履歴

バージョン | 説明
8.0.0 | oneWay の型は bool になりました。 これより前のバージョンでは、int でした。

例

例1 SoapClient::__doRequest() の例

<?php
function Add($x, $y) {
return $x + $y;
}

class LocalSoapClient extends SoapClient {
private $server;

function __construct($wsdl, $options) {
parent::__construct($wsdl, $options);
$this->server = new SoapServer($wsdl, $options);
$this->server->addFunction('Add');
}

function __doRequest($request, $location, $action, $version, $one_way = false): ?string {
ob_start();
$this->server->handle($request);
$response = ob_get_contents();
ob_end_clean();
return $response;
}

}

$x = new LocalSoapClient(NULL, ['location'=>'test://', 'uri'=>'http://testuri.org']);
var_dump($x->Add(3, 4));
?>

User Contributed Notes

tschallacka 22-Mar-2016 02:01
I just wanted to note in plain english how to build up this request, because I made some assumptions by just misterpreting the parameters.

This is for future reference(for myself) and others that might end up a bit mistified by just not understanding the finesses of soap and are trying to learn.

    $this->__doRequest(string $request , string $location , string $action , int $version [, int $one_way = 0 ] );

$request = The XML Soap enveloppe
$location = The url to the WSDL file. No matter that you defined this before when setting up the object, you need to reuse it here.
$action = the soap action to be performed. This is defined in the wsdl file and can be in the form of a single form or an url. it's just a parameter and might not be an actual valid url
$version = SOAP_1_1 =  content headers (Content-Type: text/xml; CHARSET=shift-jis?)
                  SOAP_1_2 = content headers (Content-Type: application/soap+xml; CHARSET=shift-jis; action="somesoapaction defined in $action")

If you send a SOAP_1_2 request to a SOAP_1_1 server you might get a reply in the following form

    HTTP/1.1 415 Cannot process the message because the content type 'application/soap+xml; CHARSET=shift-jis; action="somesoapaction defined in $action"' was not the expected type 'text/xml; CHARSET=shift-jis'.

You need to switch down to SOAP_1_1 in that case to get the proper formatting the server can understand
tbernard at qcsupply dot com 02-Feb-2015 05:08
If you're having trouble connecting to an authenticated SOAP service there's something important to note here.

__doRequest() is only used when a SOAPClient function is called, NOT when the WSDL if fetched and parsed.  That means if your WSDL file is not publicly accessible but also resides behind your authentication it won't be accessible by default.  Instead you'll have to create an overloaded stream wrapper and register it for whatever protocol (probably HTTP) you'll be using.
darren dot yee at emc dot com 13-Mar-2013 10:45
Note when extending __doRequest, calling __getLastRequest will probably report incorrect information unless you make sure to update the internal __last_request variable. Save yourself some headaches.

function __doRequest($request, $location, $action, $version) {
      $request = preg_replace('/abc/', 'def', $request);
      $ret = parent::__doRequest($request, $location, $action, $version);
      $this->__last_request = $request;
      return $ret;
}
alireza dot meskin at gmail 02-Apr-2012 12:29
Change Blocking mode for Socket stream and set Timeout for Soap requests

<?php

class TimeoutSoapClient extends SoapClient
{
    const TIMEOUT = 20;
    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
        $url_parts = parse_url($location);
        $host = $url_parts['host'];
        $http_req = 'POST '.$location.' HTTP/1.0'."\r\n";
        $http_req .= 'Host: '.$host."\r\n";
        $http_req .= 'SoapAction: '.$action."\r\n";
        $http_req .= "\r\n";
        $http_req .= $request;
        $port = 80;
        if ($url_parts['scheme'] == 'https')
        {
            $port = 443;
            $host = 'ssl://'.$host;
        }
        $socket = fsockopen($host, $port);
        fwrite($socket, $request);
        stream_set_blocking($socket, false);
        $response = '';
        $stop = microtime(true) + self::TIMEOUT;
        while (!feof($socket))
        {
            $response .= fread($socket, 2000);
            if (microtime(true) > $stop)
            {
                throw new SoapFault('Client', 'HTTP timeout');
            }
        }
        return $response;
    }
}
bwhitehead at tableausoftware dot no dot com dot spam 12-Aug-2011 02:49
Note that the SoapClient.__doRequest() method circumvents the throwing of SoapFault exceptions.

Specifically, if you call the __doRequest() method and it fails, it would normally throw a SoapFault exception.  However, the __doRequest() method doesn't actually throw the exception. Instead, the exception is saved in a class attribute called SoapFault.__soap_fault, and is actually thrown AFTER the __doRequest method completes (but the call stack will show that the exception was created inside the __doRequest method.

I successfully used the following code to query the locally cached exception object that was not thrown:

<?php
$exception = null;
try {
    $result = parent::__doRequest($request, $location, $action, $version, $one_way);
}
catch (SoapFault $sf) {
    //this code was not reached
    $exception = $sf;
}
catch (Exception $e) {
    //nor was this code reached either
    $exception = $e;
}
if((isset($this->__soap_fault)) && ($this->__soap_fault != null)) {
    //this is where the exception from __doRequest is stored
    $exception = $this->__soap_fault;
}

//decide what to do about the exception here
// [enter code here]
//or throw the exception
if($exception != null) {
    throw $exception;
}
//note: you may want to unset the __soap_fault value if you don't want it thrown again up the call stack
?>
psfere at hotmail dot com 21-Sep-2010 09:52
I was needing to add a blank soap header (<SOAP-ENV:Header /> and found no other place that has done this.  The only way I was able to support this was to extend SoapClient and re-define __doRequest.  Hope this helps someone or if there is support for this in the library, please point me in the right direction:

<?php
class MySoapCli extends SoapClient {
  function __doRequest($request, $location, $action, $version) {
    $dom = new DomDocument('1.0', 'UTF-8');
    $dom->preserveWhiteSpace = false;
    $dom->loadXML($request);
    $hdr = $dom->createElementNS('http://schemas.xmlsoap.org/soap/envelope/', 'SOAP-ENV:Header');
    $dom->documentElement->insertBefore($hdr, $dom->documentElement->firstChild);
    $request = $dom->saveXML();
    return parent::__doRequest($request, $location, $action, $version);
  }
}
?>
lepidosteus 19-Nov-2009 02:59
If you happen to get an error during your request which says "SOAP-ERROR: Encoding: Can't decode apache map, only Strings or Longs are allowd as keys", the reason seems to be the response xml using integer for keys and php failling to understand them

Here is something that worked for me (converts integer keys to strings):

<?php
class mySoap extends SoapClient
{
    public function __doRequest($request, $location, $action, $version)
    {
        $result = parent::__doRequest($request, $location, $action, $version);
        $result = str_replace('<key xsi:type="xsd:int">', '<key xsi:type="xsd:string">', $result);
        return $result;
    }
}

// $soap = new mySoap(...
?>
Artur Graniszewski 08-Nov-2009 04:35
Beware of PHP incosistent behaviour in __doRequest() method. It seems that some arguments passed to this method are passed by reference!

If you try to create your own __doRequest() method and store it's arguments as SoapClient properties you will find that after __soapCall all of them will be null or unknown.

<?php
    protected $__soapAction = '';

    public function __doRequest($request, $location, $action, $version, $oneWay = 0) {
        ob_start();
        $this->server->handle($request);
        $response = ob_get_contents();
        ob_end_clean();
        $this->__soapAction = $action;
        return $response;
    }
?>

In above example $this->__soapAction will be null after $obj->__soapCall()..

To store $action value, you must cast it to a string (so PHP will be forced to create a new variable with different memory pointer):

<?php
    public function __doRequest($request, $location, $action, $version, $oneWay = 0) {
        ob_start();
        $this->server->handle($request);
        $response = ob_get_contents();
        ob_end_clean();
        $this->__soapAction = (string)$action;
        return $response;
    }
?>
james dot ellis at gmail dot com 04-Feb-2008 04:12
If your application interacts with SOAP services and you wish to cache the responses for consumption later, then overriding SoapClient::__doRequest is the way to go.

For instance, if you know that the information presented doesn't change that often and you don't want to do a superfluous HTTP request, you can grab a response from a local cache and let SoapClient do the transformation to PHP data types.

<?php
class YourNamespace_SoapClient_Local extends SoapClient {
    protected $cacheDocument = "";
    public function __construct($wsdl, $options) {
        parent::__construct($wsdl, $options);
    }

    /**
     * SetCacheDocument() sets the previously cached document contents
     */
    public function SetCacheDocument($document) {
        $this->cacheDocument = $document;
    }

    /**
     * __doRequest() overrides the standard SoapClient to handle a local request
     */
    public function __doRequest() {
        return $this->cacheDocument;
    }
}

//---- code snippet showing usage within a class
//$document is a cached SOAP response document from a previous request, saved with SoapClient::__getLastResponse() to some cache somewhere
//for the purpose of this example, it is assumed that $this->wsdl, $this->options, $this->method and $this->params are set.

public function SoapRequest($document) {
    $method = $this->method;
    if($document == "") {
        //uncached
        try {
            //default options
            $client = new SoapClient($this->wsdl, $this->options);
            $result = $client->$method($this->params);
            //send the response to the cache
            $this->CacheResponse($client->__getLastResponse());
        } catch(SoapFault $fault) {
            //log something
            return FALSE;
        }
    } else {
        //cached document
        try {
            /**
             * the WSDL needs to be set to allow the method to be called on the client object
             * and to trigger SoapClient to decode the response to native data types
             */
            $client = new YourNamespace_SoapClient_Local($this->wsdl, $this->options);
            $client->SetCacheDocument($document);
            $result = $client->$method($this->params);
        } catch (SoapFault $fault) {
            //log something
            return FALSE;
        }
    }
    return $result;
}
?>

I'll leave you to work out the caching, plenty of options there.. ;)
albert at jool dot nl 26-Mar-2007 06:28
If you want to communicate with a default configured ASP.NET server with SOAP 1.1 support, override your __doRequest with the following code. Adjust the namespace parameter, and all is good to go.

<?php
class MSSoapClient extends SoapClient {

    function __doRequest($request, $location, $action, $version) {
        $namespace = "http://tempuri.com";

        $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1);
        $request = preg_replace('/<ns1:(\w+)/', '<$1', $request);
        $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request);

        // parent call
        return parent::__doRequest($request, $location, $action, $version);
    }
}

$client = new MSSoapClient(...);
?>

Hope this will save people endless hours of fiddling...
jfitz at spacelink dot com 05-Dec-2006 09:56
Note that __getLastRequest() data are buffered _before_ the call to __doRequest().  Thus any modifications you make to the XML while in __doRequest() will not be visible in the output of __getLastRequest().   This is so in at least v5.2.0
06-Jul-2006 01:17
Do you have problems with the PHP5 SoapClient when you need to send a request to a service with a ComplexType parameter?

Maybe because my service is build in Delphi with REMObjects SDK 3.0 I had the problems, maybe not. Anyway, this was my remedy:
<?php
$versie = new stdClass();//define a basic class object
$versie->versieID = $aVersie->versieID();//fill it with the exact attributes as your complextype Object in the wsdl is
$versie->versieNummer = $aVersie->versieNummer();
$versie->isActief = $aVersie->isActief();

$soapVersieType = new SoapVar($versie , SOAP_ENC_OBJECT, "Versie", "http://127.0.0.1:8999/SOAP?wsdl"); //create the complex soap type, Versie is the name of my complex type in the wsdl, the latter url beeing the location of my wsdl.

try{
  $result =  $soapClient->BewaarVersie($this->sessieId,$soapVersieType); //BewaarVersie is a function derived from my WSDL with two params.
}
catch(SoapFault $e){
  trigger_error('Something soapy went wrong: '.$e->faultstring,E_USER_WARNING);            }
?>
After some more testing i found out that the conversion to the StdClass() object was not required. My 'Versie' local object has the attributes for the 'Versie' wsdl complex type defined as private vars and give no pain when i create the SoapVar with an instance of the local 'Versie' Object.
metator at netcabo dot pt 20-Oct-2005 04:32
You can use this method to correct the SOAP request before sending it, if necessary. You can use the DOM API to accomplish that.

<?php

public ExtendedClient extends SoapClient {

   function __construct($wsdl, $options = null) {
      parent::__construct($wsdl, $options);
   }

   function __doRequest($request, $location, $action, $version) {
      $dom = new DOMDocument('1.0');

      try {

         //loads the SOAP request to the Document
         $dom->loadXML($request);

      } catch (DOMException $e) {
         die('Parse error with code ' . $e->code);
      }

      //create a XPath object to query the request
      $path = new DOMXPath($dom);

      //search for a node
      $nodesToFix = $path->query('//SOAP-ENV:Envelope/SOAP-ENV:Body/path/to/node');

      //check if nodes are ok
      $this->checkNodes($path, $nodesToFix);

      //save the modified SOAP request
      $request = $dom->saveXML();

      //doRequest
      return parent::__doRequest($request, $location, $action, $version);
   }

   function checkNodes(DOMXPath $path, DOMNodeList $nodes) {
      //iterate through the node list
      for ($i = 0; $ < $nodes->length; $i++) {
         $aNode = $nodes->item($i);

         //just an example
         if ($node->nodeValue == null) {
            //do something. For instance, let's remove it.
            $node->parentNode->removeChild($node);
         }
      }
   }
}
?>

This gives the developer the chance to solve interoperability problems with a web service.


クッキーの一覧を取得する

  • ≪ SoapClient::__doRequest
  • SoapClient::__getFunctions ≫
  • PHP Manual
  • SoapClient
  • クッキーの一覧を取得する

SoapClient::__getCookies

(PHP 5 >= 5.4.30, PHP 7, PHP 8)

SoapClient::__getCookies — クッキーの一覧を取得する

説明

public SoapClient::__getCookies(): array

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


SOAP 関数の一覧を返す

  • ≪ SoapClient::__getCookies
  • SoapClient::__getLastRequest ≫
  • PHP Manual
  • SoapClient
  • SOAP 関数の一覧を返す

SoapClient::__getFunctions

(PHP 5, PHP 7, PHP 8)

SoapClient::__getFunctions — SOAP 関数の一覧を返す

説明

public SoapClient::__getFunctions(): ?array

ウェブサービスの WSDL に記述されている関数の配列を返します。

注意:

この関数は WSDL モードでのみ動作します。

パラメータ

この関数にはパラメータはありません。

戻り値

SOAP 関数のプロトタイプ、戻り値の型、関数名、引数の型情報を含めた配列を返します。

例

例1 SoapClient::__getFunctions() の例

<?php
$client = new SoapClient('http://soap.amazon.com/schemas3/AmazonWebServices.wsdl');
var_dump($client->__getFunctions());
?>

上の例の出力は以下となります。

array(26) {
  [0]=>
  string(70) "ProductInfo KeywordSearchRequest(KeywordRequest $KeywordSearchRequest)"
  [1]=>
  string(79) "ProductInfo TextStreamSearchRequest(TextStreamRequest $TextStreamSearchRequest)"
  [2]=>
  string(64) "ProductInfo PowerSearchRequest(PowerRequest $PowerSearchRequest)"
...
  [23]=>
  string(107) "ShoppingCart RemoveShoppingCartItemsRequest(RemoveShoppingCartItemsRequest $RemoveShoppingCartItemsRequest)"
  [24]=>
  string(107) "ShoppingCart ModifyShoppingCartItemsRequest(ModifyShoppingCartItemsRequest $ModifyShoppingCartItemsRequest)"
  [25]=>
  string(118) "GetTransactionDetailsResponse GetTransactionDetailsRequest(GetTransactionDetailsRequest $GetTransactionDetailsRequest)"
}

参考

  • SoapClient::__construct() - SoapClient のコンストラクタ

User Contributed Notes

jvanoort at simplexis dot nl 05-Jan-2016 03:32
_getFunctions can return null, not only array. This happens if the WSDL has not been parsed yet. This may be helpful to someone debugging, just like I was a few minutes ago when writing an extension to SoapClient.
Beebs 13-Nov-2013 02:26
The following code works for me while it appears soap.amazon.com has been deprecated and taken out of service. http://webservices.amazon.com has replaced Amazon's SOAP.

<?php
$client = new SoapClient('http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl');
var_dump($client->__getFunctions());
?>
hasegeli at arebt dot com 02-Jun-2009 12:19
This function did not work if schema is not in wsdl file.


直近の SOAP リクエストを返す

  • ≪ SoapClient::__getFunctions
  • SoapClient::__getLastRequestHeaders ≫
  • PHP Manual
  • SoapClient
  • 直近の SOAP リクエストを返す

SoapClient::__getLastRequest

(PHP 5, PHP 7, PHP 8)

SoapClient::__getLastRequest — 直近の SOAP リクエストを返す

説明

public SoapClient::__getLastRequest(): ?string

直近の SOAP リクエストで送信された XML を返します。

注意:

このメソッドは、オプション trace を指定して SoapClient が作成されている場合のみ使用可能です。

パラメータ

この関数にはパラメータはありません。

戻り値

直近の SOAP リクエストを XML 文字列で返します。

例

例1 SoapClient::__getLastRequest() の例

<?php
$client = new SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
?>

参考

  • SoapClient::__getLastRequestHeaders() - 直近の SOAP リクエストヘッダを返す
  • SoapClient::__getLastResponse() - 直近の SOAP レスポンスを返す
  • SoapClient::__getLastResponseHeaders() - 直近の SOAP レスポンスヘッダを返す

User Contributed Notes

hejdavladislav at gmail dot com 15-Sep-2016 10:20
Note that when you create SoapClient with option "trace" set to FALSE or omit it, than "__getLastRequest()" always returns NULL.
LZhang 11-Jul-2014 08:22
Creating an xml file and link to the file is my way.

$outputxml = '/output.xml';

file_put_contents($_SERVER['DOCUMENT_ROOT'] . $outputxml, $client->__getLastRequest());

echo '<a href="' . $outputxml . '">here</a>';
mayurvirkar at gmail dot com 09-Sep-2013 08:37
Just to make it a bit more readable

echo "REQUEST:\n" . htmlentities(str_ireplace('><', ">\n<", $client->__getLastRequest())) . "\n";
echo "Response:\n" . htmlentities(str_ireplace('><', ">\n<", $client->__getLastResponse())) . "\n";

PS: If you are using \n then you need to enclose above statements in <pre>. You can also use <br />, but it gets a bit messy.
Anonymous 26-Jan-2010 01:32
Adding htmlentities() can be helpful since it makes the XML visible in your browser without needing to view the source.

<?php

echo "REQUEST:\n" . htmlentities($client->__getLastRequest()) . "\n";

?>
Ersin DOGAN 12-Apr-2009 10:40
I guess many peoples calls getLastRequest and it returns nothing. "Heey where is the my last request". Now we will see our request,  when you created a SoapClient instance, you should give a option parameter as below :

<?php
// below $option=array('trace',1);
// correct one is below
$option=array('trace'=>1);

$client=new SoapClient('some.wsdl',$option);

try{
  $client->aMethodAtRemote();
}catch(SoapFault $fault){
  // <xmp> tag displays xml output in html
  echo 'Request : <br/><xmp>',
  $client->__getLastRequest(),
  '</xmp><br/><br/> Error Message : <br/>',
  $fault->getMessage();
}
?>

"trace" parameter enables output of request. Now, you should see SOAP request.
Omar Nabil 12-Nov-2008 06:14
the getLastResult function doesn't require that the server answers.
as my browser handled and hided the xml code I thought the function doesn't return the last request


直近の SOAP リクエストヘッダを返す

  • ≪ SoapClient::__getLastRequest
  • SoapClient::__getLastResponse ≫
  • PHP Manual
  • SoapClient
  • 直近の SOAP リクエストヘッダを返す

SoapClient::__getLastRequestHeaders

(PHP 5, PHP 7, PHP 8)

SoapClient::__getLastRequestHeaders — 直近の SOAP リクエストヘッダを返す

説明

public SoapClient::__getLastRequestHeaders(): ?string

直近の SOAP リクエストヘッダを返します。

注意:

このメソッドは、オプション trace を指定して SoapClient が作成されている場合のみ使用可能です。

パラメータ

この関数にはパラメータはありません。

戻り値

直近の SOAP リクエストヘッダ

例

例1 SoapClient::__getLastRequestHeaders() の例

<?php
$client = SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "REQUEST HEADERS:\n" . $client->__getLastRequestHeaders() . "\n";
?>

参考

  • SoapClient::__getLastResponseHeaders() - 直近の SOAP レスポンスヘッダを返す
  • SoapClient::__getLastRequest() - 直近の SOAP リクエストを返す
  • SoapClient::__getLastResponse() - 直近の SOAP レスポンスを返す

User Contributed Notes

mischa molhoek 02-Jun-2015 08:48
it seems to me that is does not return the SOAP headers as it states in the explanation, but the request headers....


直近の SOAP レスポンスを返す

  • ≪ SoapClient::__getLastRequestHeaders
  • SoapClient::__getLastResponseHeaders ≫
  • PHP Manual
  • SoapClient
  • 直近の SOAP レスポンスを返す

SoapClient::__getLastResponse

(PHP 5, PHP 7, PHP 8)

SoapClient::__getLastResponse — 直近の SOAP レスポンスを返す

説明

public SoapClient::__getLastResponse(): ?string

直近の SOAP レスポンスで受信した XML を返します。

注意:

このメソッドは、オプション trace を指定して SoapClient が作成されている場合のみ使用可能です。

パラメータ

この関数にはパラメータはありません。

戻り値

直近の SOAP レスポンスを XML 文字列で返します。

例

例1 SoapClient::__getLastResponse() の例

<?php
$client = SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "Response:\n" . $client->__getLastResponse() . "\n";
?>

参考

  • SoapClient::__getLastResponseHeaders() - 直近の SOAP レスポンスヘッダを返す
  • SoapClient::__getLastRequest() - 直近の SOAP リクエストを返す
  • SoapClient::__getLastRequestHeaders() - 直近の SOAP リクエストヘッダを返す

User Contributed Notes

mayurvirkar at gmail dot com 09-Sep-2013 08:38
Just to make it a bit more readable

echo "REQUEST:\n" . htmlentities(str_ireplace('><', ">\n<", $client->__getLastRequest())) . "\n";
echo "RESPONSE:\n" . htmlentities(str_ireplace('><', ">\n<", $client->__getLastResponse())) . "\n";

PS: If you are using \n then you need to enclose above statements in <pre>. You can also use <br />, but it gets a bit messy.
bshafs at gmail dot com 22-Jun-2011 12:45
You don't need to surround SoapClient in a try-catch block.  Just set the "exceptions" option to false, and the SoapFault instance will be returned instead of thrown.
ceo at l-i-e dot com 04-Jan-2006 01:31
D'oh!
That example needs:
$soapClient = new SoapClient($url, array('trace'=>1));
to turn ON tracing in the first place.
ceo at l-i-e dot com 04-Jan-2006 01:30
You almost for sure will need to wrap a try/catch block around your SOAP call in order to use these to debug something that's not working.

Otherwise, PHP throws a fatal error before you can execute this function.

For example:
<?php
    $soapClient = new SoapClient($url);
    echo htmlentities($soapClient->__getFunctions());
    //Assume that has output 'someFunction' (among others)
    try {
        $results = $soapClient->someFunction(...);
    }
    catch (SoapFault $soapFault) {
        var_dump($soapFault);
        echo "Request :<br>", htmlentities($soapClient->__getLastRequest()), "<br>";
        echo "Response :<br>", htmlentities($soapClient->__getLastResponse()), "<br>";
    }
?>

Without try/catch, your just get the Fatal Error and PHP commits suicide before you can call __getLastRequest/__getLastResponse


直近の SOAP レスポンスヘッダを返す

  • ≪ SoapClient::__getLastResponse
  • SoapClient::__getTypes ≫
  • PHP Manual
  • SoapClient
  • 直近の SOAP レスポンスヘッダを返す

SoapClient::__getLastResponseHeaders

(PHP 5, PHP 7, PHP 8)

SoapClient::__getLastResponseHeaders — 直近の SOAP レスポンスヘッダを返す

説明

public SoapClient::__getLastResponseHeaders(): ?string

直近の SOAP レスポンスヘッダを返します。

注意:

このメソッドは、オプション trace を指定して SoapClient が作成されている場合のみ使用可能です。

パラメータ

この関数にはパラメータはありません。

戻り値

直近の SOAP レスポンスヘッダ

例

例1 SoapClient::__getLastResponse() の例

<?php
$client = SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "RESPONSE HEADERS:\n" . $client->__getLastResponseHeaders() . "\n";
?>

参考

  • SoapClient::__getLastRequestHeaders() - 直近の SOAP リクエストヘッダを返す
  • SoapClient::__getLastRequest() - 直近の SOAP リクエストを返す
  • SoapClient::__getLastResponse() - 直近の SOAP レスポンスを返す

User Contributed Notes

noncey 30-Sep-2015 12:33
For long running scripts which may be set to a longer timeout in the PHP script, be aware that the IIS connection timeout settings do not restart when you initiate a SOAP call even though you are using a new web address than your current running script.

Because of this, we noted a SOAP call that seemed to not return headers from a Web Service. It was found to be related to IIS timing out. This was in IIS 7.5. The resolution was to increase the connection timeout for IIS at the website/domain level.

There were no faults or exceptions captured when this occurred so your only indicator is that you have no header information.
jeroen{at}asystance{dot}nl 17-Aug-2009 03:20
Note SoapClient does not wait for a response for one-way operations (i.e. <wsdl:operation>s that do not have a <wsdl:response>)! To see if a request failed, use
$sc = new SoapClient( 'some.wsdl', array('features'=>SOAP_WAIT_ONE_WAY_CALLS));

See http://bugs.php.net/bug.php?id=36083 and http://bugs.php.net/bug.php?id=49278


SOAP 型の一覧を返す

  • ≪ SoapClient::__getLastResponseHeaders
  • SoapClient::__setCookie ≫
  • PHP Manual
  • SoapClient
  • SOAP 型の一覧を返す

SoapClient::__getTypes

(PHP 5, PHP 7, PHP 8)

SoapClient::__getTypes — SOAP 型の一覧を返す

説明

public SoapClient::__getTypes(): ?array

ウェブサービスの WSDL で定義されている型の配列を返します。

注意:

この関数は WSDL モードでのみ動作します。

パラメータ

この関数にはパラメータはありません。

戻り値

SOAP 型の配列を返します。すべての構造や型が含まれています。

例

例1 SoapClient::__getTypes() の例

<?php
$client = new SoapClient('http://soap.amazon.com/schemas3/AmazonWebServices.wsdl');
var_dump($client->__getTypes());
?>

上の例の出力は以下となります。

array(88) {
  [0]=>
  string(30) "ProductLine ProductLineArray[]"
  [1]=>
  string(85) "struct ProductLine {
 string Mode;
 string RelevanceRank;
 ProductInfo ProductInfo;
}"
  [2]=>
  string(105) "struct ProductInfo {
 string TotalResults;
 string TotalPages;
 string ListName;
 DetailsArray Details;
}"
...
  [85]=>
  string(32) "ShortSummary ShortSummaryArray[]"
  [86]=>
  string(121) "struct GetTransactionDetailsRequest {
 string tag;
 string devtag;
 string key;
 OrderIdArray OrderIds;
 string locale;
}"
  [87]=>
  string(75) "struct GetTransactionDetailsResponse {
 ShortSummaryArray ShortSummaries;
}"
}

参考

  • SoapClient::__construct() - SoapClient のコンストラクタ

User Contributed Notes

Serge Liatko 28-Dec-2022 05:40
Here is the fixed version of my previous code (@moderators , please delete my previous note )

Returns a more comprehensive array of SOAP Client types as an array

<?PHP
/**
 * @param \SoapClient $soap
 *
 * @return array The WSDL types data as an array.
 */
function read_wsdl_types( SoapClient $soap ): array {
    $wsdl_types = $soap->__getTypes();
    $lookup     = array();
    $regexes    = array(
        'atomic' => '/^([\w_]+)\s([\w_]+)$/mi',
        'list'   => '/^([\w_]+)\s([\w_]+)[ {]+([\w_]+)[ }]+$/mi',
        'struct' => '/([\w_]+)\s([\w_]+)[\s{]?([\w_]+)*[\s;}]?/mi',
    );
    foreach ( array_reverse( $wsdl_types ) as $wsdl_type ) {
        $matches = array();
        foreach ( $regexes as $type => $regex ) {
            if ( preg_match_all( $regex, $wsdl_type, $matches ) ) {
                break;
            }
        }
        if ( !empty( $matches[1] ) && !empty( $matches[2] ) ) {
            switch ( $type ) {
                case 'atomic':
                    $name            = array_shift( $matches[2] );
                    $data_type       = array_shift( $matches[1] );
                    $lookup[ $name ] = array(
                        'name'      => $name,
                        'type'      => $type,
                        'data_type' => $data_type,
                        'items'     => array(),
                    );
                    break;
                case 'list':
                    $name            = array_shift( $matches[2] );
                    $type            = array_shift( $matches[1] );
                    $items           = array_shift( $matches[3] );
                    $lookup[ $name ] = array(
                        'name'      => $name,
                        'type'      => $type,
                        'data_type' => $items,
                        'items'     => array(
                            array(
                                'name'      => '',
                                'data_type' => $items,
                            ),
                        ),
                    );
                    break;
                case 'struct':
                    $name  = array_shift( $matches[2] );
                    $type  = array_shift( $matches[1] );
                    $items = array();
                    foreach ( $matches[2] as $key => $item_name ) {
                        $items[ $key ] = array(
                            'name'      => $item_name,
                            'data_type' => $matches[1][ $key ],
                        );
                    }
                    $lookup[ $name ] = array(
                        'name'      => $name,
                        'type'      => $type,
                        'data_type' => $name,
                        'items'     => $items,
                    );
                    break;
            }
        }

    }

    array_walk( $lookup, function ( &$type, $key, $data ) {
        if ( !empty( $type['items'] ) ) {
            array_walk( $type['items'], function ( &$item, $key, $data ) {
                if ( !empty( $item['data_type'] ) ) {
                    $old_data_type     = $item['data_type'];
                    $item['type']      = $data[ $old_data_type ]['type'] ?? 'atomic';
                    $item['data_type'] = $data[ $old_data_type ]['data_type'] ?? $old_data_type;
                    $item['from']      = $data[ $old_data_type ]['name'] ?? '';
                }
            }, $data );
        }
    }, $lookup );

    return array_reverse( $lookup );
}
?>
felipe dot cwb at hotmail dot com 21-Jul-2014 06:50
<?php
// to see formated types

$soap = new SoapClient('http://domain.com/ws.php?WSDL');

echo '<pre>';
echo '<h2>Types:</h2>';
$types = $soap->__getTypes();
foreach ($types as $type) {
    $type = preg_replace(
        array('/(\w+) ([a-zA-Z0-9]+)/', '/\n /'),
        array('<font color="green">${1}</font> <font color="blue">${2}</font>', "\n\t"),
        $type
    );
    echo $type;
    echo "\n\n";
}
echo '</pre>';


SOAP リクエストと共に送信されるクッキーを設定する

  • ≪ SoapClient::__getTypes
  • SoapClient::__setLocation ≫
  • PHP Manual
  • SoapClient
  • SOAP リクエストと共に送信されるクッキーを設定する

SoapClient::__setCookie

(PHP 5 >= 5.0.4, PHP 7, PHP 8)

SoapClient::__setCookie — SOAP リクエストと共に送信されるクッキーを設定する

説明

public SoapClient::__setCookie(string $name, ?string $value = null): void

SOAP リクエストと共に送信されるクッキーを定義します。

注意:

このメソッドをコールすることで、その後のすべての SoapClient メソッドコール に影響します。

パラメータ

name

クッキーの名前

value

クッキーの値。指定されない場合、クッキーは削除されます。

戻り値

値を返しません。

変更履歴

バージョン | 説明
8.0.0 | value は、nullable になりました。

User Contributed Notes

Jaygiri Goswami 17-Dec-2011 01:22
You can access the cookies sent by SOAP server using $client->_cookies

Most you need to send session cookies back to server.
lukasz at szostak dot biz 14-Aug-2006 10:53
On the server side you can access the cookie via $_COOKIE['cookie_name'].

Also remember that since HTTP is a stateless protocol, you have to send the cookie with every single SOAP call in order for it to be visible at server site.

It seems obvious but might save one a lot of time.


使用するウェブサービスの場所を設定する

  • ≪ SoapClient::__setCookie
  • SoapClient::__setSoapHeaders ≫
  • PHP Manual
  • SoapClient
  • 使用するウェブサービスの場所を設定する

SoapClient::__setLocation

(PHP 5 >= 5.0.4, PHP 7, PHP 8)

SoapClient::__setLocation — 使用するウェブサービスの場所を設定する

説明

public SoapClient::__setLocation(?string $location = null): ?string

それ以降の SOAP リクエストで使用するエンドポイント URL を設定します。 これは、SoapClient を作成する際に location オプションを指定するのと同じことです。

注意:

このメソッドのコールは必須ではありません。SoapClient は、デフォルトで WSDL ファイルから取得したエンドポイントを使用します。

パラメータ

location

新しいエンドポイント URL。

戻り値

それまでのエンドポイント URL を返します。

変更履歴

バージョン | 説明
8.0.3 | location は、nullable になりました。

例

例1 SoapClient::__setLocation() の例

<?php
$client = new SoapClient('http://example.com/webservice.php?wsdl');

$client->__setLocation('http://www.somethirdparty.com');

$old_location = $client->__setLocation(); // location オプションの設定を解除します

echo $old_location;

?>

上の例の出力は、 たとえば以下のようになります。

http://www.somethirdparty.com

参考

  • SoapClient::__construct() - SoapClient のコンストラクタ

User Contributed Notes

maoneid at gmail dot com 24-May-2018 07:24
for some cases , ignoring location from initialization throw exception

PHP Fatal error:  Uncaught SoapFault exception: [HTTP] Could not connect to host

Better call and define the end point location manually.


以降のコール用の SOAP ヘッダを設定する

  • ≪ SoapClient::__setLocation
  • SoapClient::__soapCall ≫
  • PHP Manual
  • SoapClient
  • 以降のコール用の SOAP ヘッダを設定する

SoapClient::__setSoapHeaders

(PHP 5 >= 5.0.5, PHP 7, PHP 8)

SoapClient::__setSoapHeaders — 以降のコール用の SOAP ヘッダを設定する

説明

public SoapClient::__setSoapHeaders(SoapHeader|array|null $headers = null): bool

SOAP リクエストで送信するヘッダを定義します。

注意:

このメソッドをコールすると、それまでの値はすべて上書きされます。

パラメータ

headers

設定したいヘッダ。SoapHeader オブジェクト、あるいは SoapHeader オブジェクトの配列です。 省略したり null を設定したりした場合はヘッダが削除されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 SoapClient::__setSoapHeaders() の例

<?php

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$header = new SoapHeader('http://soapinterop.org/echoheader/',
'echoMeStringRequest',
'hello world');

$client->__setSoapHeaders($header);

$client->__soapCall("echoVoid", null);
?>

例2 複数のヘッダの設定

<?php

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$headers = array();

$headers[] = new SoapHeader('http://soapinterop.org/echoheader/',
'echoMeStringRequest',
'hello world');

$headers[] = new SoapHeader('http://soapinterop.org/echoheader/',
'echoMeStringRequest',
'hello world again');

$client->__setSoapHeaders($headers);

$client->__soapCall("echoVoid", null);
?>

User Contributed Notes

mlconnor at yahoo dot com 11-Nov-2010 01:28
Does anyone know how to get the response headers?  The getLastResponseHeader returns a string response, not the complex object I was expecting...
peamik1953 at NOSPAM dot btinternet dot com 12-Jul-2010 11:06
You cannot add an additional header. If you want two headers, and one already exists, first delete it with $client->__setSoapHeaders(NULL). Then issue $client->__setSoapHeaders($headers) where $headers is an array of soapHeader() objects.
kedar dot purohit @ mavs dot uta dot edu 10-Sep-2009 12:58
To create complex SOAP Headers, you can do something like this:

Required SOAP Header:

<soap:Header>
    <RequestorCredentials xmlns="http://namespace.example.com/">
      <Token>string</Token>
      <Version>string</Version>
      <MerchantID>string</MerchantID>
      <UserCredentials>
        <UserID>string</UserID>
        <Password>string</Password>
      </UserCredentials>
    </RequestorCredentials>
</soap:Header>

Corresponding PHP code:

<?php

$ns = 'http://namespace.example.com/'; //Namespace of the WS.

//Body of the Soap Header.
$headerbody = array('Token' => $someToken,
                    'Version' => $someVersion,
                    'MerchantID'=>$someMerchantId,
                      'UserCredentials'=>array('UserID'=>$UserID,
                                             'Password'=>$Pwd));

//Create Soap Header.
$header = new SOAPHeader($ns, 'RequestorCredentials', $headerbody);

//set the Headers of Soap Client.
$soap_client->__setSoapHeaders($header);

?>
jayrajput at gmail dot com 30-Mar-2009 01:07
With multiple SOAP headers, when using SoapVar for creation of SoapHeader the PHP code just terminates (command terminated). I am not sure if that is a bug.

Without the SOAPVar the code worked fine for me

There are different way to creart SoapHeader I was using SoapVar and the code was not working. I am still a novice with this SOAP stuff.

Tried using normal strings and it worked fine. SoapHeader can take SoapVar or string as the third argument.

my code:

<?php
// first soap header.
$var = new SoapVar($header, XSD_ANYXML);
$soapHeader = new SoapHeader(NAME_SPACE, "Security", $var);
// second soap header.
$var2 = new SoapVar($header2, XSD_ANYXML);
$soapHeader2 = new SoapHeader(DIFF_NAME_SPACE, "ID", $var2);

$client = new SoapClient($wsdl, array("location" => $location));

$headers = array();
$headers[] = $soapHeader;
$headers[] = $soapHeader2;

// Here my code was just terminating.
$client->__setSoapHeaders($headers);
?>


SOAP 関数をコールする

  • ≪ SoapClient::__setSoapHeaders
  • SoapServer ≫
  • PHP Manual
  • SoapClient
  • SOAP 関数をコールする

SoapClient::__soapCall

(PHP 5, PHP 7, PHP 8)

SoapClient::__soapCall — SOAP 関数をコールする

説明

public SoapClient::__soapCall(
string $name,
array $args,
?array $options = null,
SoapHeader|array|null $inputHeaders = null,
array &$outputHeaders = null
): mixed

本メソッドは、SOAP コールを行う低レベル API 関数です。 通常、WSDL モードでは、SOAP 関数を SoapClient のメソッドとして簡単にコールすることができます。 本メソッドは、soapaction が不明な場合や、 uri がデフォルトと異なっていたり、 SOAP ヘッダを送受信したい場合に、非 WSDL モードを使用する際に有用です。

エラーの場合に SOAP 関数を呼び出すと、PHP の例外が発生するか、例外が無効な場合には SoapFault オブジェクトが返されます。 この関数コールが失敗したかどうかを調べるには、 SoapFault 例外をキャッチするか、is_soap_fault() の結果を調べてください。

パラメータ

name

コールしたい SOAP 関数の名前。

args

関数に渡す引数の配列。これは、数値添字配列あるいは連想配列のどちらの形式でもかまいません。 たいていの SOAP サーバーは、パラメータ名を指定しないといけないことに注意しましょう。 そんな場合は、連想配列でないといけません。

options

クライアントに渡すオプションの連想配列。

location はリモートウェブサービスの URL です。

uri は SOAP サービスのターゲット名前空間です。

soapaction はコールしたいアクションです。

inputHeaders

SOAP リクエストで送信するヘッダの配列。

outputHeaders

指定すると、この配列に SOAP レスポンスのヘッダが書き込まれます。

戻り値

SOAP 関数は、一つまたは複数の値を返す可能性があります。 SOAP 関数から値をひとつだけ返す場合は、 返り値はスカラーになります。 複数の値を返す場合は、出力パラメータの名前がついた連想配列を返します。

エラーが発生した場合、 かつ SoapClient の exceptions を false に設定した場合は、 SoapFault オブジェクトを返します。

例

例1 SoapClient::__soapCall() の例

<?php

$client = new SoapClient("some.wsdl");
$client->SomeFunction($a, $b, $c);

$client->__soapCall("SomeFunction", array($a, $b, $c));
$client->__soapCall("SomeFunction", array($a, $b, $c), NULL,
new SoapHeader(), $output_headers);

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$client->SomeFunction($a, $b, $c);
$client->__soapCall("SomeFunction", array($a, $b, $c));
$client->__soapCall("SomeFunction", array($a, $b, $c),
array('soapaction' => 'some_action',
'uri' => 'some_uri'));
?>

参考

  • SoapClient::__construct() - SoapClient のコンストラクタ
  • SoapParam::__construct() - SoapParam コンストラクタ
  • SoapVar::__construct() - SoapVar コンストラクタ
  • SoapHeader::__construct() - SoapHeader コンストラクタ
  • SoapFault::__construct() - SoapFault コンストラクタ
  • is_soap_fault() - SOAP コールが失敗したかどうかを調べる

User Contributed Notes

arturklesun at gmail dot com 10-Aug-2016 06:16
Sharing my experience cuz i believe it is most important for you if you decide to use this Soap Client implementation.

At php 7.0.8 the stdClass generated by SoapClient from the response does not use "minOccurs" and "maxOccurs" WSDL modifiers to distinct properties in stdClass-es (aka keys in "associative arrays") and elements in arrays ("aka indexed arrays").

Instead, the implementation decides whether tag is _a key in associative array_ or _one of elements with same tag in indexed array_ by simply the fact whether there is just one element with such tag in the sequence or many.

Consider alive example from my case:
<?php
response xml:
...
<ValidatingCarrier>
    <Alternate>AA</Alternate>
</ValidatingCarrier>
...
<ValidatingCarrier>
    <Alternate>AA</Alternate>
    <Alternate>AY</Alternate>
</ValidatingCarrier>
...

response structure generated by SoapClient:
...
[ValidatingCarrier] => stdClass Object(
    [Alternate] => AA // here it is a string
)
...
[ValidatingCarrier] => stdClass Object (
    [Alternate] => Array ( // and here this is an array
        [0] => AA
        [1] => AY
    )
)
...

field XSD definition:
<xs:element name="Alternate" type="CarrierCode" minOccurs="0" maxOccurs="24">
?>

You see, the definition in XSD tells us this tag can be repeated up to 24 times, what means it would be an indexed array, but SoapClient does not take that into account and treats the first <Alternate> in example as a value instead of array containing this value.

Undoubtedly, a value should be a property in the stdClass (a key in associative array) _only_ when maxOccurs is 1 or less or not specified (default is 1, see https://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints). Hope this info will be useful for you when you will be implementing your own, correctly working, SoapClient.
ub at sturmundbraem dot ch 11-Jun-2016 12:51
To avoid the SOAP client returning sometimes objects and sometimes arrays of objects, there's a setting:

   $this->soapClient = new \SoapClient($wsdlUrl, array(
    'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
    'trace' => DEBUG_SOAP
   ));
pmeth at softersoftware dot com 12-May-2014 04:44
Note, when trying to overload the __soapCall function, you should not use type hints or STRICT_STANDARDS will complain.
The correct signature is as follows:

<?php
class MySoapClient extends \SoapClient
{
    ...
    public function __soapCall($function_name, $arguments, $options = null, $input_headers = null, &$output_headers = null)
     {
        ...
    }
    ....
}
?>
vb 17-Oct-2012 04:23
Note that calling __soapCall and calling the generated method from WSDL requires specifying parameters in two different ways.

For example, if you have a web service with method login that takes username and password, you can call it the following way:
<?php
$params = array('username'=>'name', 'password'=>'secret');
$client->login($params);
?>

If you want to call __soapCall, you must wrap the arguments in another array as follows:
<?php
$client->__soapCall('login', array($params));
?>
snuufix+nospam at gmail dot com 11-Feb-2011 03:23
I am using SOAP call response headers to sign request results.

After alot of hours, I finally got the best way to get SOAP response headers (other than parsing __getLastResponse() witch requires trace option enabled) is using __soapCall() wrapper.

You can extend SoapClient class and wrap some functions to make sure you get the headers.

<?php

class API extends SoapClient
{

    // ... Constructor, etc.

    // Get SOAP Server response headers
    public function __soapCall($function, $arguments, $options = array(), $input_headers = null, &$output_headers = null)
    {
        parent::__soapCall($function, $arguments, $options, $input_headers, $output_headers);

        print_r($output_headers); // Array of response headers
    }

    // If you are using WSDL you need this, so you still can call functions directly without calling __soapCall manualy
    public function __call($func, $args)
    {
        return $this->__soapCall($func, $args);
    }

?>
niko dot hujanen at gmail dot com 09-Nov-2010 11:06
I was integrating a local warehouse system with a SOAP to our system and noticed some things.

1) Service uses "dot-namespacing" (fe. Item.Price) I classmapped this to Item_Price and used magical __get() and __set() to strip off 'Item.' from variable names. Works like a charm.

Example:
<Item.Price>1.52</Item.Price>

<?php
class Item_Price {
    public $price;
    public function __get($field) { $field = str_replace('Item.', '', $field); return $this->$field; }
    public function __set($field, $value) { $field = str_replace('Item.', '', $field); $this->$field = $value; }
?>

2) I noticed that classmapping a segment with attributes and value is possible. Class uses variables as attributes and $_ is the value.

Example:
<?php
class Foo {
    public $item = 'Bar';
    public $_ = 'Value here';
}
?>
Turns to <Foo item="Bar">Value here</Foo>

Example of using classes with soapcalls:
<?php
    $client = ExtendSoapClient::getInstance();
    $foo = new Foo();
    $response = $client->sendFoo($foo);
?>

Posted these since I think the documentation is lacking and very obsolete. Hopefully someone's burden eases.
james dot ellis at gmail dot com 09-Jun-2010 07:12
If you are using this method, remember that the array of arguments need to be passed in with the ordering being the same order that the SOAP endpoint expects.

e.g
<?php
//server expects: Foo(string name, int age)

//won't work
$args = array(32, 'john');
$out = $client->__soapCall('Foo', $args);

//will work
$args = array('john', 32);
$out = $client->__soapCall('Foo', $args);
?>
lesley at casbah dot com dot au 21-Apr-2009 06:55
If you are calling a weblogic service with a certificate and you are getting this error on the soap method call statement:

[EJB:010160]Security Violation: User: '<anonymous>' has insufficient permission to access EJB: type=<ejb>, application=app2_0_52_3, module=appsejb.jar, ejb=AppMethod, method=AppMethod, methodInterface=Remote, signature={java.lang.String}.

then check the wsdl in the soap open call - it must be https.  Supplied with an http wsdl this took some time to figure out.

<?php
    $client = new SoapClient("https://example.com/AppWs/Service?WSDL",
                array('trace'=>true,
                      'exceptions'=>true,
                      'local_cert' => "/var/www/html/app/newcert.pem",
                      'passphrase' => "thepassphrase"));
    $response = $client->__soapCall("MyMethod", array("param1" => $value1));
?>

Thanks to the authors for their comments on enabling openssl and curl by uncommenting extension=php_opensll.dll and extension=php_curl.dll in php.ini.  Also for Olaf's instructions "append the content of the private key file and the certificate file to a single file". I did this using copy command on the DOS prompt:

copy mycert.pem+mykey.pem newcert.pem
Tim Williams 08-Apr-2009 06:55
One little gotcha when passing the parameters where you need to have attributes and a simpletype value:

To get the xml

<foo bar="moo">cheese</foo>

You'd pass in:

<?php
array("foo" => array("_" => "cheese", "bar"=>"moo"));
?>

See that "_" bit? It really wasn't obvious from the documentation.
deWarlock 02-Apr-2009 04:10
The most annoying thing is that you'll get no warning trying to pass object not matching wsdl e.g. if server expects smth like $Object->expName->... and you would pass $Object->otherName the client will send empty request without notifying you.
Also pay attention that names are key sensitive.

In my case I spent hours trying to pass $Post->Lead->... object instead of $Post->lead-> ...
Shto 03-Mar-2009 03:17
One thing to note.

This happened to me and it took a while until I discovered what the problem was.

I was trying to get .NET objects from a provided web service, however it always seemed to return empty objects. It did return the backbone, but nothing within the objects that made up the structure.

Anyhow, it seems that you have to be very precise with the arrays when calling these functions. Par example, do this:

<?php
$obj = $client->__soapCall($SOAPCall, array('parameters'=>$SoapCallParameters));
?>

meaning that you must put an array as the second argument with 'parameters' as the key and the soap call parameters as the value.

Also make sure that the parameter variable, in my case $SoapCallParameters is in the form of what is requested by the webservice.

So, don't just make an array of the form:
<?php

(
   [0] => 'Mary',
   [1] => 1983
)

?>

but if the webservice requests a 'muid' variable as 'Mary' and a 'birthyear' as 1983, then make your array like this:

<?php

(
   [muid] => 'Mary',
   [birthyear] => 1983
)

?>

The above arrays refer to the $SoapCallParameters variable.

Hope this helps somebody, not having to spend too much time figuring out the problems.
Alejandro Cavallo 19-Mar-2008 07:38
I get the same problem reported above by ryan:
"ryan at grunt dot tv
22-Sep-2005 01:38
If you want to pass an xml document node as a function parameter, your need to create a SoapVar object with a text represention of the xml node and the XSD_ANYXML encoding constant. However, this constant is not exported by the extension and is not documented for some unknown reason."

When defined variable soapVar I assigned the type XSD_STRING rather than as XSD_ANYXML.
And when calls to the function you must pass the soapVar in an associative array.

For example if the function (called myFunc) expect a parameter called xmlInput you should do something like this:
$soapvar = new SoapVar($query, XSD_STRING);
$result = $client->myFunc(array('xmlInput'=>$soapvar));

This XML fragment are wrapped around xmlImput tags.-
stefan at datax dot biz 24-Oct-2007 07:28
The call to __soapCall returned an object to me either. This is the function which makes my life easier:

function obj2array($obj) {
  $out = array();
  foreach ($obj as $key => $val) {
    switch(true) {
        case is_object($val):
         $out[$key] = obj2array($val);
         break;
      case is_array($val):
         $out[$key] = obj2array($val);
         break;
      default:
        $out[$key] = $val;
    }
  }
  return $out;
}

Usage:
...
$response = $client ->__soapCall("track", array('parameters' => $request));
$response = obj2array($response);

Hope it helps.
temp at mailinator dot com 30-Jan-2007 04:43
The options in the third argument is documented in http://php.net/manual/en/function.soap-soapclient-construct.php
paulsjv at gmail dot com 11-Jan-2006 07:44
I was working with SOAP for the first time and I had to create a client that sent a date range to a WSDL (Web Services Description Language) to return some information I needed.  I didn't know how to pass the params and there really was no documentation about it.  The main thing you have to make sure to do is when you pass params to a method that is definied by the WSDL that you are calling is that you use the same param name for the key of the array or the object variable as shown below.  Also, if you don't know what the methods/functions that a WSDL has or the params that you need to pass it you can use the __getFunctions() and __getTypes() methods after you declare your new SoapClient.

<?php
// From and to are the two params that the execute function needs
// when called from the WSDL so make you to have them as the
// key to an array like below
$params["From"] = "06/01/2005"; // also can use $params->From = "date";
$params["to"] = "12/31/2005"; // also can use $params->to = "date";

$client = new SoapClient("some.wsdl");

try {
        print($client->execute($params));
} catch (SoapFault $exception) {
        echo $exception;
}
?>
ryan at grunt dot tv 21-Sep-2005 09:38
If you want to pass an xml document node as a function parameter, your need to create a SoapVar object with a text represention of the xml node and the XSD_ANYXML encoding constant. However, this constant is not exported by the extension and is not documented for some unknown reason.

Therefore, to get this to work you must either register the XSD_ANYXML #define as a PHP constant, or use the integer value of the constant when creating the SoapVar, which is 147.

$soapvar = new SoapVar($xml_text, 147);

$params = array("ItemXml" => $soapvar, "PropertyView" => "blah");
$result = $this->soapclient->__soapCall("SaveItem", array("parameters"=>$params), null, $this->soapheaders);

However, this still doesnt give the correct result. For some reason, the ItemXml parameter node is not wrapped around the associated xml parameter in the soap request, and the following soap is produced (assumming '<item>blah</item>' is used as the $xml_text):

<SOAP-ENV:Envelope xmlns:SOAP-ENV="..." xmlns:ns1="...">
<SOAP-ENV:Header>...</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:SaveItem>
<item>blah</item>
<ns1:PropertyView>blah</ns1:PropertyView>
</ns1:SaveItem>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
DesmondJ 04-May-2005 03:36
Following OrionI's example:

<?php
 $client = new SoapClient("http://server/sumservice.asmx?WSDL");
 $params->a = 2;
 $params->b = 3;
 $objectresult = $client->Sum($params);
 $simpleresult = $objectresult->SumResult;
 print($simpleresult); //produces "-1"
?>

Please note that the lines:

"$client->Sum($params);"

and

"$simpleresult = $objectresult->SumResult;"

are based off of each other. If your web service function is called "Sum", then add "Result" to the end of it to get the results of the call.

EG:

<?php
 $client = new SoapClient("http://server/mathservice.asmx?WSDL");
 $params->a = 2;
 $params->b = 3;
 $objectresult = $client->Minus($params); // note the name of the function is "Minus"
 $simpleresult = $objectresult->MinusResult; // note the name of the result is referenced as "MinusResult"
 print($simpleresult); //produces "5"
?>
OrionI 18-Apr-2005 07:27
Correction on the previously submitted code snippet...the incoming parameter for .NET also has to be in object or array form for it to be correctly converted to the XML form that .NET expects (as already mentioned by Llu?s P?mies). The full example (when using WSDL) should be like this:
<?php
 $client = new SoapClient("http://server/myservice.asmx?WSDL");
 $params->param1 = $value1;
 $params->param2 = $value2;
 $objectresult = $client->MyMethod($params);
 $simpleresult = $objectresult->MyMethodResult;
?>
So if you have a C# function like this:
//sumservice.asmx
...
[WebMethod]
public int Sum(int a, int b)
{
  return a + b;
}
...
The PHP client would be this:
<?php
 $client = new SoapClient("http://server/sumservice.asmx?WSDL");
 $params->a = 2;
 $params->b = 3;
 $objectresult = $client->Sum($params);
 $simpleresult = $objectresult->SumResult;
 print($simpleresult); //produces "5"
?>
OrionI 15-Apr-2005 11:46
When calling over SOAP to a .NET application, you may end up with an object as a result instead of a simple type, even if you're just grabbing a simple type (like a boolean result). Use a property accessor to get the actual result, like this:
<?php
 $client = new SoapClient("http://server/myservice.asmx?WSDL");
 $objectresult = $client->MyMethod($param1, $param2);
 $simpleresult = $objectresult->MyMethodResult;
?>
Note that .NET seems to name the result MethodNameResult for method MethodName.
Llu?s P?mies 17-Feb-2005 03:19
If your service is a .NET doc/lit, which means the input message has a single part named 'parameters' that is a structure that wraps the parameters.  Your call should look like this:

<?php

$params = array('param_name_1'=>$val_1,'param_name_2'=>$val_2);
$client->call('MethodName', array('parameters' => $params));

?>


SoapServer クラス

(PHP 5, PHP 7, PHP 8)

はじめに

SoapServer クラスは » SOAP 1.1 および » SOAP 1.2 プロトコル用のサーバーとなります。 WSDL サービス記述を使用することもしないこともできます。

クラス概要

class SoapServer {
/* プロパティ */
private ?SoapFault $__soap_fault = null;
/* メソッド */
public __construct(?string $wsdl, array $options = [])
public addFunction(array|string|int $functions): void
public addSoapHeader(SoapHeader $header): void
public fault(
string $code,
string $string,
string $actor = "",
mixed $details = null,
string $name = ""
): void
public getFunctions(): array
public handle(?string $request = null): void
public setClass(string $class, mixed ...$args): void
public setObject(object $object): void
public setPersistence(int $mode): void
}

プロパティ

service

__soap_fault

目次

  • SoapServer::addFunction — SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する
  • SoapServer::addSoapHeader — SOAP ヘッダをレスポンスに追加する
  • SoapServer::__construct — SoapServer コンストラクタ
  • SoapServer::fault — エラーを示す SoapServer フォールト を発行する
  • SoapServer::getFunctions — 定義されている関数の一覧を返す
  • SoapServer::handle — SOAP リクエストを処理する
  • SoapServer::setClass — SOAP リクエストを処理するクラスを設定する
  • SoapServer::setObject — SOAP リクエストの処理に使用するオブジェクトを設定する
  • SoapServer::setPersistence — SoapServer の持続モードを設定する

User Contributed Notes

mail at borisd dot ru 08-Feb-2019 12:43
If you want to run dummy SoapServer as a daemon for tests on linux, you need to:

1. Set up location "localhost:12312/soapServer.php" in your wsdl like:

<wsdl:service name="ServiceName">
        <wsdl:port name="ServiceNamePort" binding="tns:ServiceNameBinding">
            <soap:address location="http://localhost:12312/soapServer.php" />
        </wsdl:port>
</wsdl:service>

2. Write your test server like:

<?php
/*
  * Server
  */
class TestSoapServer
{
    public function getMessage()
    {
        return 'Hello, World!';
    }
}
$options = ['uri' => 'http://localhost:12312/'];
$server = new SoapServer(null, $options);
$server->setClass('TestSoapServer');
$server->handle();

?>

3. Run it with `php -S localhost:12312` (in the same folder)

Whenever you make a request according to your wsdl, it will end up at your "server".
softontherocks at gmail dot com 29-Oct-2014 06:20
I posted in this URL http://softontherocks.blogspot.com/2014/02/web-service-soap-con-php.html a full example of a nusoap web service.

There is defined the server and the cliente who calls the web service.

I hope it would be useful for you.
s at dumdeedum dot com 12-Sep-2013 05:32
I was running PHP 5.3.2 and couldn't for the life of me get SOAP headers to work, no matter how carefully I built my class/wsdl/client.  What finally fixed it was updating to the latest PHP.  No idea if there was a bug somewhere or what, but it's never a bad idea to stay current and it might save you weeks of frustration!
phpman dot fulter47 at recursor dot net 04-Jul-2012 05:36
For those (like me) coming from other SOAP frameworks and getting confused:

- A PHP SOAP server application created using the SoapServer class can not be used as a standalone SOAP server.
It needs an HTTP server to receive SOAP requests, which must run a PHP engine to execute the PHP SOAP server script as a CGI.

- For this reason, there are no settings in PHP that control the Interface/Port under which the SOAP server will wait for requests - it is the HTTP server who is responsible for that.

- The "uri" parameter is an "id value", used as the namespace for the SOAP response. It is only required if no WSDL file is used (that contains this setting), i.e. "wsdl" is set to NULL. It does _not_ control the Hostname/Port under which the HTTP server will be reachable for requests.
php1221 at klox dot net 18-Aug-2011 01:39
While there are plenty of mentions online that SoapServer doesn't support SOAP Headers, this isn't true.

In your class, if you declare a function with the name of the header, the function will be called when that header is received.

<?php
class MySoapService {
  private $user_is_valid;

  function MyHeader($header) {
    if ((isset($header->Username)) && (isset($header->Password))) {
      if (ValidateUser($header->Username, $header->Password)) {
        $user_is_valid = true;
      }
    }
  }

  function MySoapRequest($request) {
    if ($user_is_valid) {
      // process request
    }
    else {
      throw new MyFault("MySoapRequest", "User not valid.");
    }
  }
}
?>
hawky83 at googlemail dot com 21-Jan-2011 02:46
Another simple example for SOAP_SERVER with errorhandling an params and wsdl:

SERVER (soap_all_srv.php):

<?php
// PEAR::SOAP einbinden
require_once "SOAP/Server.php";
$skiptrace =& PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
$skiptrace = true;

// Service-Class
class mytimeserv {

  // __dispatch_map
  public $__dispatch_map = array ();

  // In/Out param -> __dispatch_map
  public function __construct() {
    $this->__dispatch_map["now"] =
      array ("in" => array("format" => "string"),
             "out" => array("time" => "string"));
  }

  // get back __dispatch_map in __dispatch
  public function __dispatch($methodname) {

    if (isset($this->__dispatch_map[$methodname])) {
      return $this->__dispatch_map[$methodname];
    }

    return NULL;
  }

  // servicemthod with parameters
  function now ($format) {

    // formaterror?
    if (($format == null) || (trim($format) == "")) {

      // send errormessage
      return new SOAP_Fault("Kein Parameter angegeben","0815", "Client");
    }

    date_default_timezone_set('Europe/Berlin');

    $time = date ($format);

    // return SOAP-Obj.
    return (new SOAP_Value('time','string', $time));
  }
}

// service-class
$service = new mytimeserv();

// server
$ss = new SOAP_Server();

// add service with name
$ss->addObjectMap (&$service,"urn:mytimeserv");

// service or wsdl
if (isset($_SERVER["REQUEST_METHOD"])&& $_SERVER["REQUEST_METHOD"] == "POST") {

    // postdata -> service
    $ss->service ($HTTP_RAW_POST_DATA);

} else {

  // wsdl-param in url
  if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'],'wsdl') == 0) {

    // DISCO_Server for WSDL
    require_once "SOAP/Disco.php";
    $disco = new SOAP_DISCO_Server ($ss,"mytimeserv","My Time Service");

    // set HTML-Header
    header("Content-type: text/xml");

    // return wsdl
    print $disco->getWSDL ();
  }
}

?>

CLIENT (soap_all_client.php) (for wsdl: http://example.com/soap_all_srv.php?wsdl):
<?php

require_once "SOAP/Client.php";

// SOAP/WSDL
$sw = new SOAP_WSDL ("http://example.com/soap_all_srv.php?wsdl");

// Proxy-Obj.
$proxy = $sw->getProxy ();

// servicemthod
$erg = $proxy->now ("H:i:s");

// return
print $erg."\n";

?>
mikkel at nsales dot dk 02-Jun-2010 03:15
If you want to return a custom object array from a nusoap webservice, you have to cast the objects to arrays like so:

<?php
$users = array();
while($res = $db_obj->fetch_row())
{
  $user = new user();
  $user->Id = $res['id'];
  $user->Username = $res['username'];
  $user->Email = $res['email'];

  $users[] = (array) $user;
}

return ($users);
?>
junk2cm at gmx dot de 25-May-2010 12:54
As the SoapServer class lacks the possibility of dealing with SOAP-Headers, my following workaround is suitable to my needs when I had to do authentication via the SOAP-Headers:
1. Use a class which handles SOAP requests and let the constructor of this class take the sent headers.
2. Before invoking the SoapServer extract the SOAP-Header from the incoming raw data.
3. When using setClass pass the extracted header to the handling class.

In Your Server-Skript do things like this
<?php
$hdr = file_get_contents("php://input");
if (strpos($hdr,'<s:Header>')===false) {
    $hdr = null;
} else {
    $hdr = explode('<s:Header>',$hdr);
    $hdr = explode('</s:Header>',$hdr[1]);
    $hdr = $hdr[0];
}
$srv = new SoapServer('Your_wsdl');
$srv->setClass("ServiceClass",$hdr);
$srv->handle();
?>

And the service class is like this:
<?php
class ServiceClass {
    var $IsAuthenticated;

    function __construct($hdr) {
        $this->IsAuthenticated = false;
        if ($hdr!=null) {
            $this->header = simplexml_load_string($hdr);
            //Your authentication stuff goes here...
        }
    }

    function SomeFunctionOfTheService($a) {
        if ($this->IsAuthenticated) {
            //here Your function...
        }
    }

}
?>
carlos dot vini at gmail dot com 20-May-2010 01:55
SoapServer does not support WSDL with literal/document. I have a class:

<?php
class My_Soap {
    /**
     * Returns Hello World.
     *
     * @param string $world
     * @return string
     */
    public function getInterAdmins($world) {
        return 'hello' . $world;
    }
}
?>

To fix this I had to create proxy class:
<?php
class My_Soap_LiteralDocumentProxy {
   public function __call($methodName, $args) {
       $soapClass = new My_Soap();
       $result = call_user_func_array(array($soapClass, $methodName),  $args[0]);
       return array($methodName . 'Result' => $result);
   }
}
?>

Now make sure that the WSDL is created using My_Soap. And that the Server is created using My_Soap_LiteralDocumentProxy:

<?php

if (isset($_GET['wsdl'])) {
    $wsdl = new Zend_Soap_AutoDiscover(); // It generates the WSDL
    $wsdl->setOperationBodyStyle(array(
        'use' => 'literal'
    ));
    $wsdl->setBindingStyle(array(
        'style' => 'document'
    ));
    $wsdl->setClass('My_Soap');
    $wsdl->handle();
} else {
    $server = new Zend_Soap_Server('http://localhost/something/webservice.php?wsdl');
    $server->setClass('My_Soap_LiteralDocumentProxy');
    $server->handle();
}

?>
dsubar at interna dot com 25-Dec-2009 09:49
Do not put a SoapServer and a SoapClient in the same PHP file. This seems to cause arbitrary behavior. On the PHP interpreter in Eclipse, everything worked fine. Under MAMP, I got an undocumented error. In moving the client from the same file as the server, everything worked fine.


SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する

  • ≪ SoapServer
  • SoapServer::addSoapHeader ≫
  • PHP Manual
  • SoapServer
  • SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する

SoapServer::addFunction

(PHP 5, PHP 7, PHP 8)

SoapServer::addFunction — SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する

説明

public SoapServer::addFunction(array|string|int $functions): void

リモートクライアント用に単一もしくは複数の関数をエクスポートします。

パラメータ

functions

単一の関数をエクスポートするには、 このパラメータに文字列として関数名を渡してください。

いくつかの関数をエクスポートするには、関数名の配列を渡してください。

全ての関数をエクスポートする場合、特別な定数 SOAP_FUNCTIONS_ALL を渡してください。

注意:

functions は、全ての入力引数を WSDL ファイルで定義されている順序と同じ順序で受け取る必要があり (これらの関数は出力パラメータを引数として受け取ることはありません) 、一つまたは複数の値を返す必要があります。 複数の値を返すには、名前付き出力パラメータの配列を返す必要があります。

戻り値

値を返しません。

例

例1 SoapServer::addFunction() の例

<?php

function echoString($inputString)
{
return $inputString;
}

$server->addFunction("echoString");

function echoTwoStrings($inputString1, $inputString2)
{
return array("outputString1" => $inputString1,
"outputString2" => $inputString2);
}
$server->addFunction(array("echoString", "echoTwoStrings"));

$server->addFunction(SOAP_FUNCTIONS_ALL);

?>

参考

  • SoapServer::__construct() - SoapServer コンストラクタ
  • SoapServer::setClass() - SOAP リクエストを処理するクラスを設定する

User Contributed Notes

dotpointer at gmail dot com 26-Oct-2007 06:52
Be careful with SOAP_FUNCTIONS_ALL, as it adds ALL availiable PHP functions to your server.

This can be a potential security threat, imagine clients doing this:

echo $client->file_get_contents("c:\\my files\\my_passwords.doc");

And voila, they have the contents of your file my_passwords.doc.


SOAP ヘッダをレスポンスに追加する

  • ≪ SoapServer::addFunction
  • SoapServer::__construct ≫
  • PHP Manual
  • SoapServer
  • SOAP ヘッダをレスポンスに追加する

SoapServer::addSoapHeader

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

SoapServer::addSoapHeader — SOAP ヘッダをレスポンスに追加する

説明

public SoapServer::addSoapHeader(SoapHeader $header): void

現在のリクエストから返されるレスポンスに SOAP ヘッダを追加します。

パラメータ

header

返すヘッダ。

戻り値

値を返しません。

User Contributed Notes

vladimir at bashkirtsev dot com 21-Nov-2016 09:30
Notably addSoapHeaders() must be called within handling class/object.

If you call addSoapHeaders() like this:

$server = new SoapServer("some.wsdl");
$server->setObject(new Service());
$server->addSoapHeaders(new SoapHeader("ns", "Header", "value"));
$server->handle();

Your SOAP header will not be added to the server response as it will be overwritten by result of handle() function.

If you want to add SOAP headers to the resulting response you should make $server global/static variable and then call addSoapHeaders() from within of the method of Service class which will handle the request.


SoapServer コンストラクタ

  • ≪ SoapServer::addSoapHeader
  • SoapServer::fault ≫
  • PHP Manual
  • SoapServer
  • SoapServer コンストラクタ

SoapServer::__construct

(PHP 5, PHP 7, PHP 8)

SoapServer::__construct — SoapServer コンストラクタ

説明

public SoapServer::__construct(?string $wsdl, array $options = [])

このコンストラクタにより SoapServer オブジェクトを WSDL または非 WSDL モードで作成することが可能です。

パラメータ

wsdl

WSDL モードの場合、これに WSDL ファイルの URI を指定する必要があります。 WSDL モードでない場合、null を指定し、uri オプションを設定する必要があります。

options

デフォルトの SOAP バージョン (soap_version), 内部の文字エンコーディング (encoding), アクターの URI (actor) を指定することができます。

classmap オプションにより、WSDL 型を PHP のクラスにマッピングすることが可能です。 このオプションには、キーとしてWSDL 型、値として PHP クラスの名前を持つ配列を指定する必要があります。

typemap オプションは、型マッピングの配列です。 この配列のキーは type_name、 type_ns (名前空間 URI)、from_xml (引数として文字列をひとつ受け取るコールバック) そして to_xml (引数としてオブジェクトをひとつ受け取るコールバック) です。

cache_wsdl オプションは、 WSDL_CACHE_NONE、 WSDL_CACHE_DISK、 WSDL_CACHE_MEMORY あるいは WSDL_CACHE_BOTH のいずれかです。

その他に features というオプションもあり、 SOAP_WAIT_ONE_WAY_CALLS、 SOAP_SINGLE_ELEMENT_ARRAYS、 SOAP_USE_XSI_ARRAY_TYPE を設定することができます。

send_errors オプションを false にすると、 個別のエラーメッセージではなく汎用的なメッセージ ("Internal error") を送信できます。

例

例1 SoapServer::__construct() の例

<?php

$server = new SoapServer("some.wsdl");

$server = new SoapServer("some.wsdl", array('soap_version' => SOAP_1_2));

$server = new SoapServer("some.wsdl", array('actor' => "http://example.org/ts-tests/C"));

$server = new SoapServer("some.wsdl", array('encoding'=>'ISO-8859-1'));

$server = new SoapServer(null, array('uri' => "http://test-uri/"));

class MyBook {
public $title;
public $author;
}

$server = new SoapServer("books.wsdl", array('classmap' => array('book' => "MyBook")));

?>

参考

  • SoapClient::__construct() - SoapClient のコンストラクタ

User Contributed Notes

Anonymous 10-Jun-2012 02:35
// Workin Server with Client for localhost

// server.php

<?php
class MyClass {
  public function helloWorld() {

    return 'Hallo Welt '. print_r(func_get_args(), true);
  }
}

try {
  $server = new SOAPServer(
    NULL,
    array(
     'uri' => 'http://localhost/soap/server.php'
    )
  );

  $server->setClass('MyClass');
  $server->handle();
}

catch (SOAPFault $f) {
  print $f->faultstring;
}

?>

// client.php:

<?php
$client = new SoapClient(null, array(
      'location' => "http://localhost/soap/server.php",
      'uri'      => "http://localhost/soap/server.php",
      'trace'    => 1 ));

echo $return = $client->__soapCall("helloWorld",array("world"));
?>

// Hope you like it


エラーを示す SoapServer フォールト を発行する

  • ≪ SoapServer::__construct
  • SoapServer::getFunctions ≫
  • PHP Manual
  • SoapServer
  • エラーを示す SoapServer フォールト を発行する

SoapServer::fault

(PHP 5, PHP 7, PHP 8)

SoapServer::fault — エラーを示す SoapServer フォールト を発行する

説明

public SoapServer::fault(
string $code,
string $string,
string $actor = "",
mixed $details = null,
string $name = ""
): void

現在のリクエストに対するレスポンスとして、エラーを表す内容をクライアントに送信します。

注意:

これは、リクエストを処理する際にのみコールされます。

パラメータ

code

返したいエラーコード。

string

エラーについての簡単な説明。

actor

フォールトを引き起こしたアクターをあらわす文字列。

details

フォールトについての詳細。

name

フォールトの名前。これは WSDL ファイルにある名前を使うことができます。

戻り値

値を返しません。

参考

  • SoapFault::__construct() - SoapFault コンストラクタ

User Contributed Notes

christian at cmjdesign dot dk 06-Jun-2013 10:41
hi,
to control the fault output one may do the following

/**
 * mySoapServer class
 */
class mySoapServer extends SoapServer {
    public function __construct($wsdl, array $options = null) {
        parent::SoapServer($wsdl, $options);
    }
    public function fault ($code, $string, $actor = null, $details = null, $name = null) {
        throw new SoapFault($code, $string, $actor, $details, $name);
    }
}

Use:
try {
    $server = new mySoapServer(null, array('uri' => $_SERVER['REQUEST_URI']));
    $server->setClass('mySoapAPI');
    $server->handle();
} catch (SoapFault $exc) {
    echo $exc->getTraceAsString();
}

that how i did this,
hope iot can help some one.
brian dot reynolds at risaris dot com 21-Feb-2012 09:44
Example Usage:

return new SoapFault( "Client", "foo or bar must be supplied");

SOAP Fault Codes

VersionMismatch: Found an invalid namespace for the SOAP Envelope element
MustUnderstand    : An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood
Client: The message was incorrectly formed or contained incorrect information
Server: There was a problem with the server so the message could not proceed
dub357 at gmail dot com 08-Feb-2012 08:01
This function also sends a 500 response code back to the client with the request.
This was causing issues with an Apache Axis 1.2 client I had so I instead implemented by own fault handling:

<?php
header("Content-Type: text/xml");
header("Status: 200");
die("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\\"http://schemas.xmlsoap.org/soap/envelope/\\">
  <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
      <faultcode>500</faultcode>
      <faultstring>".$ex->getMessage())."</faultstring>
    </SOAP-ENV:Fault>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>");
?>
Amr Mostafa 09-Sep-2009 06:16
This function currently terminates execution as well, which may be undesirable. See: http://bugs.php.net/bug.php?id=49513
Anonymous 16-Jul-2008 12:12
If you use Adobe Flex, Flash or AIR as SOAP client and are unable to get the error message in case of a soap fault, upgrade to PHP 5.2.6.

Details in:
http://bugs.php.net/bug.php?id=43507


定義されている関数の一覧を返す

  • ≪ SoapServer::fault
  • SoapServer::handle ≫
  • PHP Manual
  • SoapServer
  • 定義されている関数の一覧を返す

SoapServer::getFunctions

(PHP 5, PHP 7, PHP 8)

SoapServer::getFunctions — 定義されている関数の一覧を返す

説明

public SoapServer::getFunctions(): array

SoapServer オブジェクトで定義されている関数の一覧を返します。 このメソッドは、 SoapServer::addFunction() もしくは SoapServer::setClass() で追加された全ての関数の一覧を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

定義されている関数の配列を返します。

例

例1 SoapServer::getFunctions() の例

<?php
$server = new SoapServer(NULL, array("uri" => "http://test-uri"));
$server->addFunction(SOAP_FUNCTIONS_ALL);
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$server->handle();
} else {
echo "This SOAP server can handle following functions: ";
$functions = $server->getFunctions();
foreach($functions as $func) {
echo $func . "\n";
}
}
?>

参考

  • SoapServer::__construct() - SoapServer コンストラクタ
  • SoapServer::addFunction() - SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する
  • SoapServer::setClass() - SOAP リクエストを処理するクラスを設定する

User Contributed Notes

There are no user contributed notes for this page.


SOAP リクエストを処理する

  • ≪ SoapServer::getFunctions
  • SoapServer::setClass ≫
  • PHP Manual
  • SoapServer
  • SOAP リクエストを処理する

SoapServer::handle

(PHP 5, PHP 7, PHP 8)

SoapServer::handle — SOAP リクエストを処理する

説明

public SoapServer::handle(?string $request = null): void

SOAP リクエストを処理し、必要な関数をコールし、レスポンスを返送します。

パラメータ

request

SOAP リクエスト。もし引数が省略された場合、 HTTP リクエストで POST されたデータの中にリクエストがあるとみなします。

戻り値

値を返しません。

変更履歴

バージョン | 説明
8.0.0 | request は、nullable になりました。

例

例1 SoapServer::handle() の例

<?php
function test($x)
{
return $x;
}

$server = new SoapServer(null, array('uri' => "http://test-uri/"));
$server->addFunction("test");
$server->handle();
?>

参考

  • SoapServer::__construct() - SoapServer コンストラクタ

User Contributed Notes

Bas van Dorst 19-Feb-2014 02:58
Additional information to the comment of "Joeri Thissen" (http://www.php.net/manual/en/soapserver.handle.php#113866)

In some cases the replacements generates a timeout (looks like it is in combination with Nginx). The problem is that PHP has already sent a content-length, and the webserver is still waiting for new content.

To fix this you have to reset the HTTP Content-Length with the right value:

<?php
ob_start();
$soapServer->handle();
$result = ob_get_contents();
ob_end_clean();

$result = str_replace("abcdef", "abc", $result);
$length = strlen($result);

header("Content-Length: ".$length);
echo $result;
Joeri Thissen 11-Dec-2013 10:59
Sometimes returned data can contain characters which are not valid in xml 1.0. This causes the xml being output by SoapServer::handle to be invalid. Although it's probably better to sanitize the data ealier, a combination of output buffering and a simple regular expression can be used as a quick fix to make sure the output is indeed valid xml.

For example:

<?php
    ob_start();
    $soapServer->handle();
    $soapXml = ob_get_contents();
    ob_end_clean();
    $soapXml = preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $soapXml);
    echo $soapXml;
?>
dub357 at gmail dot com 08-Feb-2012 10:54
After much headache and looking through PHP source code, I finally found out why the handle() function would immediately send back a fault with the string "Bad Request".
Turns out that my client was sending valid XML, but the first line of the XML was the actual XML declaration:

<?xml version="1.0" encoding="UTF-8"?>

When the "handle" function in the SoapServer class is called, it first tries to parse the XML.  When the XML document can't be parsed, a "Bad Request" fault is returned and execution of the script immediately stops.  I assume that the XML parser built into PHP (libxml2) already assumes the document to be XML and when it finds the declaration, it thinks it isn't valid.

I added some XML parsing calls to my service before the handle() function is called to check for valid XML and avoid the "Bad Request" fault.  This also allows me to send back a more suitable error message:

<?php
$parser = xml_parser_create("UTF-8");
if (!xml_parse($parser,$HTTP_RAW_POST_DATA,true)){
   $webService->fault("500", "Cannot parse XML: ".
      xml_error_string(xml_get_error_code($parser)).
       " at line: ".xml_get_current_line_number($parser).
       ", column: ".xml_get_current_column_number($parser));
}
?>
prenaud at profideo dot com 09-Jan-2012 02:23
Please note that when defining several services in one wsdl file, and calling one of those services, you may always get the response for your first service.

This is a known bug. You will find its description and some workarounds here  : https://bugs.php.net/bug.php?id=49169
Artur Graniszewski 15-Nov-2009 10:19
Be aware that SoapServer::handle(); method sends additional HTTP headers to the browser. One of them is "Content-Type: application/soap+xml". If you want to execute SOAP methods locally as a part of SoapClient::__doRequest() (see example at http://pl2.php.net/manual/en/soapclient.dorequest.php ) you may need to reset (override) this header back to "Content-Type: text/html" like so:

<?php
function Add($x,$y) {
  return $x+$y;
}

class LocalSoapClient extends SoapClient {

  function __construct($wsdl, $options) {
    parent::__construct($wsdl, $options);
    $this->server = new SoapServer($wsdl, $options);
    $this->server->addFunction('Add');
  }

  function __doRequest($request, $location, $action, $version) {
    ob_start();
    $this->server->handle($request);
    $response = ob_get_contents();
    ob_end_clean();
    return $response;
  }

}

$x = new LocalSoapClient(NULL,array('location'=>'test://',
                                   'uri'=>'http://testuri.org'));

header("Content-Type: text/html");

var_dump($x->Add(3,4));

?>
tom at backslashinteractive dot com 03-Oct-2008 10:54
In response to Blizzke:

Sometimes this problem can be hidden by an Apache segmentation fault along with an HTTP headers error SoapFault thrown to the client.

If you get either of those 2, try checking to make sure that style="rpc" in your WSDL file's soap:operation's.

-T
Blizzke at gmail dot com 12-Mar-2008 04:39
Seems pretty logical once you find the solution, but it took me quite a while to figure this one out:
If you are using WSDL based SOAP requests and you have more than one operation in your binding (with the same parameters), make sure the <soap:operation> style is set to rpc, NOT body!

When you specify 'body' here, all that will be transmitted in the request is the parameters for the function call, and SoapServer->handle() will use the first function it finds with the same parameter-makeup to handle the call.

ie If you have 2 functions:
<?php
function One ( string $blah );
function Two ( string $blah );
?>
Making a client call with SoapClient -> Two ( 'test' ); will result in One ( ) being called when your 'type' is set to 'body'

The actual method to call will only be included in the request when your type is set to 'rpc', resulting in the expected behavior
king dot maxemilian at noos dot fr 21-Aug-2007 09:23
Sometime, it happens that PHP does not detect anything in $HTTP_RAW_POST_DATA.

To solve this problem and make it work in any case:

function soaputils_autoFindSoapRequest()    {
    global $HTTP_RAW_POST_DATA;

    if($HTTP_RAW_POST_DATA)
        return $HTTP_RAW_POST_DATA;

    $f = file("php://input");
    return implode(" ", $f);
}

$server = new SoapServer($wsdl);
$server->setClass($MyClass);

$server->handle(soaputils_autoFindSoapRequest());


SOAP リクエストを処理するクラスを設定する

  • ≪ SoapServer::handle
  • SoapServer::setObject ≫
  • PHP Manual
  • SoapServer
  • SOAP リクエストを処理するクラスを設定する

SoapServer::setClass

(PHP 5, PHP 7, PHP 8)

SoapServer::setClass — SOAP リクエストを処理するクラスを設定する

説明

public SoapServer::setClass(string $class, mixed ...$args): void

指定されたクラスから全てのメソッドをエクスポートします。

このオブジェクトは SoapServer::setPersistence() メソッドにより指定した PHP セッションに関するリクエストをまたがる 持続性を持たせることができます

パラメータ

class

エクスポートするクラス名

args

これらのオプションパラメータは、 オブジェクト作成時にデフォルトのクラスコンストラクタに渡されます。

戻り値

値を返しません。

参考

  • SoapServer::__construct() - SoapServer コンストラクタ
  • SoapServer::addFunction() - SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する
  • SoapServer::setPersistence() - SoapServer の持続モードを設定する

User Contributed Notes

funky2step at gmail dot com 25-Nov-2011 01:54
When passing arguments to the default class constructor, make sure that you don't try and use the magic __construct method because that won't work.

<?php

class MyClass
{
  function MyClass($arg1, $arg2)
  {

  }
}

// Not:

class MyClass
{
  function __construct($arg1, $arg2)
  {

  }
}

?>
christiaan at oakfox dot net 04-May-2009 04:21
You can also retrieve object properties the following way while using __autoload($class_name).

<?php

# Start Session
session_start();

# Auto Load Class as Required
function __autoload($class_name)
{
    require_once "/var/www/example/class/". $class_name. ".php";
}

//service

$_SESSION[_bogus_session_name] = unserialize($_SESSION[_bogus_session_name]);
$server = new SoapServer('service.wsdl');
$server->setClass("MyClass");
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
$_SESSION[_bogus_session_name] = serialize($_SESSION[_bogus_session_name])

?>
Ariz Jacinto 04-Dec-2008 04:38
If you want your SOAP client to be able to save and then retrieve the object properties, you need to set the SOAP server to be persistent by setting session.auto_start=0, invoking session_start(), and SoapServer->setPersistence(SOAP_PERSISTENCE_SESSION) in the following manner:

<?php
  //set ini
  ini_set("soap.wsdl_cache_enabled", 0);
  ini_set("session.auto_start", 0);

  //class file
  require_once('MyClass.php');

  //for persistent session
  session_start();

  //service
  $server = new SoapServer('service.wsdl');
  $server->setClass("MyClass");
  $server->setPersistence(SOAP_PERSISTENCE_SESSION);
  $server->handle();
?>


SOAP リクエストの処理に使用するオブジェクトを設定する

  • ≪ SoapServer::setClass
  • SoapServer::setPersistence ≫
  • PHP Manual
  • SoapServer
  • SOAP リクエストの処理に使用するオブジェクトを設定する

SoapServer::setObject

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

SoapServer::setObject — SOAP リクエストの処理に使用するオブジェクトを設定する

説明

public SoapServer::setObject(object $object): void

SOAP リクエストを処理するハンドラとして、SoapServer::setClass() のような単なるクラスではなく特定のオブジェクトを設定します。

パラメータ

object

リクエストを処理するオブジェクト。

戻り値

値を返しません。

参考

  • SoapServer::setClass() - SOAP リクエストを処理するクラスを設定する

User Contributed Notes

There are no user contributed notes for this page.


SoapServer の持続モードを設定する

  • ≪ SoapServer::setObject
  • SoapFault ≫
  • PHP Manual
  • SoapServer
  • SoapServer の持続モードを設定する

SoapServer::setPersistence

(PHP 5, PHP 7, PHP 8)

SoapServer::setPersistence — SoapServer の持続モードを設定する

説明

public SoapServer::setPersistence(int $mode): void

この関数により、SoapServer オブジェクトの永続状態をリクエスト間で変更できるようになります。 この関数は、リクエスト間でのデータの保存に PHP のセッションを使います。 このメソッドが SoapServer に影響を及ぼすのは、SoapServer::setClass() を使って関数をエクスポートした後となります。

注意:

持続モード SOAP_PERSISTENCE_SESSION は、そのクラスのオブジェクトについてのみ持続させます。 クラスのスタティックなデータについては対象となりません。 self::$bar ではなく $this->bar を使用しましょう。

注意:

SOAP_PERSISTENCE_SESSION は、クラスのオブジェクト上のデータもリクエスト間でシリアライズします。 リソース (PDO など) を適切に扱うには、マジックメソッド __wakeup() および __sleep() を使う必要があります。

パラメータ

mode

SOAP_PERSISTENCE_XXX 定数のうちの一つ

SOAP_PERSISTENCE_REQUEST - SoapServer のデータはリクエスト間で持続しません。 これは、SoapServer オブジェクトで setClass をコールした直後のデフォルトの挙動です。

SOAP_PERSISTENCE_SESSION - SoapServer のデータをリクエスト間で持続させます。 これを実現するために、SoapServer クラスのデータをシリアライズして $_SESSION['_bogus_session_name'] に格納します。 そのため、このモードを設定する前に session_start() をコールしておく必要があります。

戻り値

値を返しません。

例

例1 SoapServer::setPersistence() の例

<?php
class MyFirstPersistentSoapServer {
private $resource; // (Such as PDO, mysqli, etc..)
public $myvar1;
public $myvar2;

public function __construct() {
$this->__wakeup(); // We're calling our wakeup to handle starting our resource
}

public function __wakeup() {
$this->resource = CodeToStartOurResourceUp();
}

public function __sleep() {
// We make sure to leave out $resource here, so our session data remains persistent
// Failure to do so will result in the failure during the unserialization of data
// on the next request; thus, our SoapObject would not be persistent across requests.
return array('myvar1','myvar2');
}
}

try {
session_start();
$server = new SoapServer(null, array('uri' => $_SERVER['REQUEST_URI']));
$server->setClass('MyFirstPersistentSoapServer');
// setPersistence MUST be called after setClass, because setClass's
// behavior sets SESSION_PERSISTENCE_REQUEST upon enacting the method.
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
} catch(SoapFault $e) {
error_log("SOAP ERROR: ". $e->getMessage());
}
?>

参考

  • SoapServer::setClass() - SOAP リクエストを処理するクラスを設定する

User Contributed Notes

csnaitsirch at web dot de 01-Apr-2010 05:25
I want to give one example for the order of commands if you want to use a class in persistence mode.

<?php
// 1. class definition or include
class UserService
{
    public function __construct() { }
}

// 2. start the session after defining or including the class!!
session_start();

// 3. instanciate the server
$server = new SoapServer(null, array("something"));

// 4. set the class to use
$server->setClass('UserService');

// 5. set persistance mode
$server->setPersistence(SOAP_PERSISTENCE_SESSION);

// 6. handle the request
$server->handle();
?>
doug dot manley at gmail dot com 30-May-2008 12:54
When using "SoapServer::setPersistence( SOAP_PERSISTENCE_SESSION )", you apparently MUST include the class that was used in "SoapServer::setClass()" BEFORE any "session_*" commands.

I found this out using "__autoload()" and a whole lot of "syslog()"; it kept failing to include the class that I was using for my soap server, but that class is ONLY ever referenced by the page itself, and even then only for the purposes of setting the class for the soap server; none of my code would ever cause it to autoload.  The problem was that I was including my session-handling code first.

If the session gets started BEFORE the page defines the class definition, then persistence CANNOT happen.

The order should be:
1. Include the class for use with the soap server.
2. Start up your session.
3. Set up your soap server.
4. Handle your soap request.
boogiebug at gmail dot com 25-Mar-2008 07:40
setPersistence works only for a single instance of service class.

To use multiple instance of services objects, you need to instantiate the classes into objects and use an undocumented SoapServer's method - setObject() to add the service object into the SoapServer object, and handle the service object persistence with $_SESSION instead.

For example:

$ServiceObjects = array()
$ServiceObjects[0] = new ServiceClass1();
$ServiceObjects[1] = new ServiceClass2();
$ServiceObjects[2] = new ServiceClass3();

$_SESSION['ServiceClass1'] = $ServiceObjects[0];
$_SESSION['ServiceClass2'] = $ServiceObjects[1];
$_SESSION['ServiceClass3'] = $ServiceObjects[2];

...

$Servers = array()
for ( $i = 0; $i < count($ServiceObjects); i++)
{
  $s = new SoapServer($wsdl);
  $s->setObject($ServiceObject[$i]);
  $Servers[] = $s;
}

...

$Server[$i]->handle()

...
jan at pinna dot nl 26-Jan-2008 03:28
I found that using both modes (SOAP_PERSISTENCE_SESSION and SOAP_PERSISTENCE_REQUEST) cannot be used simultaniously. Because it didn't work at once, I started experimenting by using different settings and as stated below in the comments, "...also use SOAP_PERSISTENCE_REQUEST to save objects between requests" led me to think it was nessecary to use both modes. Well, it might for others, be but for me it turned out a day of freaking out ;) (trying all kinds of session stuff, etc etc).
Also, if persistence doesn't work, please check if session_start() is called somewhere in the script and try not to call it twice or whatsoever: it won't work...
jared at ws-db dot com 28-Aug-2005 12:07
I had some issues getting session persistence (SOAP_PERSISTENCE_SESSION) to work. I finally got it working after setting session.auto_start=0, and then only calling session_start() in the script containing the SoapServer. Maybe this is obvious, but took me a bit to figure it out.

I only tried it with session.use_cookies=1, so if the settings above don't work for you, make sure cookies are enabled, though it may work without the need for cookies.
cperez1000 at hotmail dot com 28-May-2005 08:54
Always remember to place the "setPersistence" method before the handle method, otherwise it won't work.  It sounds obvious, but it's still a very common mistake, since no errors are shown.


SoapFault クラス

(PHP 5, PHP 7, PHP 8)

はじめに

SOAP fault をあらわします。

クラス概要

class SoapFault extends Exception {
/* プロパティ */
public string $faultstring;
public ?string $faultcode = null;
public ?string $faultcodens = null;
public ?string $faultactor = null;
public mixed $detail = null;
public ?string $_name = null;
public mixed $headerfault = null;
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* メソッド */
public __construct(
array|string|null $code,
string $string,
?string $actor = null,
mixed $details = null,
?string $name = null,
mixed $headerFault = null
)
public __toString(): string
/* 継承したメソッド */
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

プロパティ

_name

detail

faultactor

faultcode

faultcodens

faultstring

headerfault

目次

  • SoapFault::__construct — SoapFault コンストラクタ
  • SoapFault::__toString — SoapFault の文字列表現を取得する

User Contributed Notes

fbernoldi at gmail dot com 03-Oct-2012 05:46
Hi all,

I've decided to post this since it may be helpful, I've spend a couple of days trying to do this.

In order to use wsdl's specified faults with complex types, i.e:

WSDL definitions:

(xsd:schema namespace, ns1 = target namespace)

<xsd:element name="doubleFault">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="detail1" type="xsd:string"/>
      <xsd:element name="detail2" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

WSDL messages:

<message name="fault_specified">
    <part name="relevant_name" element="ns1:doubleFault"/>
</message>

WSDL port type:

<portType name="test">
  <operation name="operationTest">
  <input message="ns1:not_relevant_request"/>
  <output message="ns1:not_relevant_response"/>
  <fault name="FaultSpecified" message="ns1:fault_specified"/>
  ....
</portType>

You have to specify the response in the detail parameter as an array corresponding the tag names.

PHP Code:

<?php

function operationTest($request_param ...) {

    // ...
    $array_details = array("detail1" => "Explanation 1", "detail2" => "Explanation 2");

    return new SoapFault("Server", "example fault string", null, $array_details, "FaultSpecified");

}

$server = new SOAPServer("handmade.wsdl");
$server->addFunction("operationTest");
$server->handle();

?>

that should respond something like this:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mynamespace">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring>example fault string</faultstring>
         <detail>
            <ns1:doubleFault>
               <detail1>Explanation 1</detail1>
               <detail2>Explanation 2</detail2>
            </ns1:doubleFault>
         </detail>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

I Hope it helps,
Federico.
chris AT cmbuckley DOT co DOT uk 13-May-2010 03:53
A bit more digging in ext/soap/soap.c and the set_soap_fault function reveals the other undocumented properties from the constructor:

<?php
try {
    throw new SoapFault('code', 'string', 'actor', 'detail', 'name', 'header');
} catch (Exception $ex) {
    var_dump($ex->faultcode, $ex->faultstring, $ex->faultactor, $ex->detail, $ex->_name, $ex->headerfault);
}
?>
dmitry dot koterov at gmail dot com 29-Oct-2009 02:21
You may use undocumented and invisible property $e->faultcode to access string version of $code. Because standard $e->getCode() does not work:

<?php
$e = new SoapFault("test", "msg");
var_dump($e->getCode()); // prints "0"
var_dump($e->faultcode); // prints "test"
?>

Also you may use namespaced fault codes:

<?php
$e = new SoapFault(array("namespace", "test"), "msg");
?>

- see ext/soap/soap.php, PHP_METHOD(SoapFault, SoapFault). To access the namespace, use $e->faultcodens


SoapFault コンストラクタ

  • ≪ SoapFault
  • SoapFault::__toString ≫
  • PHP Manual
  • SoapFault
  • SoapFault コンストラクタ

SoapFault::__construct

(PHP 5, PHP 7, PHP 8)

SoapFault::__construct — SoapFault コンストラクタ

説明

public SoapFault::__construct(
array|string|null $code,
string $string,
?string $actor = null,
mixed $details = null,
?string $name = null,
mixed $headerFault = null
)

このクラスは、PHP ハンドラから SOAP フォールトレスポンスを送信した場合に有用です。 faultcode, faultstring, faultactor および detail は SOAP フォールトの標準的な要素です。

パラメータ

faultcode

SoapFault のエラーコード

faultstring

SoapFault のエラーメッセージ

faultactor

エラーの原因となったアクターを識別する文字列

detail

エラーの原因についての詳細な情報

faultname

WSDL からの厳密なフォールトエンコーディングを取得するために利用可能

headerfault

レスポンスヘッダにおいて SOAP ハンドラがエラーの報告処理を行っている間に利用可能

例

例1 いくつかの例

<?php
function test($x)
{
return new SoapFault("Server", "Some error message");
}

$server = new SoapServer(null, array('uri' => "http://test-uri/"));
$server->addFunction("test");
$server->handle();
?>

SOAP フォールトをスローするために PHP の例外機構を使用することができます。

例2 いくつかの例

<?php
function test($x)
{
throw new SoapFault("Server", "Some error message");
}

$server = new SoapServer(null, array('uri' => "http://test-uri/"));
$server->addFunction("test");
$server->handle();
?>

参考

  • SoapServer::fault() - エラーを示す SoapServer フォールト を発行する
  • is_soap_fault() - SOAP コールが失敗したかどうかを調べる

User Contributed Notes

csnaitsirch at web dot de 01-Apr-2010 05:04
The first Parameter of the constructor, the faultcode, of SoapFault must be a string. Otherwise it will lead to an error.

<?php
throw new SoapFault(1, "Error message!"); // wrong
throw new SoapFault("1", "Error message!"); // right
?>


SoapFault の文字列表現を取得する

  • ≪ SoapFault::__construct
  • SoapHeader ≫
  • PHP Manual
  • SoapFault
  • SoapFault の文字列表現を取得する

SoapFault::__toString

(PHP 5, PHP 7, PHP 8)

SoapFault::__toString — SoapFault の文字列表現を取得する

説明

public SoapFault::__toString(): string

SoapFault の文字列表現を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

SoapFault を文字列であらわした内容を返します。

User Contributed Notes

There are no user contributed notes for this page.


SoapHeader クラス

(PHP 5, PHP 7, PHP 8)

はじめに

SOAP ヘッダをあらわします。

クラス概要

class SoapHeader {
/* プロパティ */
public string $namespace;
public string $name;
public mixed $data = null;
public bool $mustUnderstand;
public string|int|null $actor;
/* メソッド */
public __construct(
string $namespace,
string $name,
mixed $data = ?,
bool $mustunderstand = ?,
string $actor = ?
)
}

プロパティ

actor

data

mustUnderstand

name

namespace

目次

  • SoapHeader::__construct — SoapHeader コンストラクタ

User Contributed Notes

mixmaster1413 at gmail dot com 22-Jun-2023 02:15
Something I came across that I feel should be noted here is if you come across the error "cannot be processed at the receiver, due to an addressfilter mismatch at the endpointdispatcher. check that the sender and receiver's endpointaddresses agree." and you are absolutely sure your protocols and the service URL matches, send 'To' SoapHeader.

$soapHeaders = array(
            new \SoapHeader('http://www.w3.org/2005/08/addressing', 'Action', 'your-action', true),
            new \SoapHeader('http://www.w3.org/2005/08/addressing', 'To', 'your-service-endpoint-url')
        );
        $soapClient->__setSoapHeaders($soapHeaders);
ericvaneldik at gmail dot com 08-Apr-2019 07:16
If you want to create an soap header wihtout namespace and without an item key value setup, you can use SoapVar

To get this:
<SOAP-ENV:Header>
    <IdentityHeader>
      <SessionID>123456789</SessionID>
    </IdentityHeader>
  </SOAP-ENV:Header>

you can use this php code:
<?php
$headerVar = new SoapVar('<IdentityHeader><SessionID>123456789</SessionID></IdentityHeader>',
      XSD_ANYXML);
$header = new SoapHeader('http://tempuri.org/','RequestParams',
      $headerVar);
?>
abdul dot rashid at paytabs dot co 13-Mar-2016 10:06
Just to add some note regarding his john at jtresponse dot co dot uk

In PHP you can try following code to avoid the <item><key/>

$Auth = new stdClass();
$Auth->SystemId = "DATA";
$Auth->UserName = "USERNAME";
$Auth->Password = "PASSWORD";

$header = new SoapHeader('NAMESPACE','Auth',$Auth,false);
$soapClient->__setSoapHeaders($header);

  <SOAP-ENV:Header>
    <ns1:Auth>
      <ns1:SystemId>DATA</ns1:SystemId>
      <ns1:UserName>USERNAME</ns1:UserName>
      <ns1:Password>PASSWORD</ns1:Password>
    </ns1:Auth>
  </SOAP-ENV:Header>
voroks at logics dot net dot au 03-Jul-2015 12:43
Example by john at jtresponse dot co dot uk does miss one important point: to be able to add attributes they must be mentioned in WSDL. If they not exist in WSDL they WILL NOT appear as attributes but rather <item><key/><value/></item> elements.
john at jtresponse dot co dot uk 13-Mar-2012 01:30
None of the examples really do it for me.
Note: you should NOT need to hard-code any XML.

Here is an example of creating a nested header and including a parameter.

$client = new SoapClient(WSDL,array());

$auth = array(
        'UserName'=>'USERNAME',
        'Password'=>'PASSWORD',
        'SystemId'=> array('_'=>'DATA','Param'=>'PARAM'),
        );
  $header = new SoapHeader('NAMESPACE','Auth',$auth,false);
  $client->__setSoapHeaders($header);

Gives the following header XML:

  <SOAP-ENV:Header>
    <ns1:Auth>
      <ns1:SystemId Param="PARAM">DATA</ns1:SystemId>
      <ns1:UserName>USERNAME</ns1:UserName>
      <ns1:Password>PASSWORD</ns1:Password>
    </ns1:Auth>
  </SOAP-ENV:Header>


SoapHeader コンストラクタ

  • ≪ SoapHeader
  • SoapParam ≫
  • PHP Manual
  • SoapHeader
  • SoapHeader コンストラクタ

SoapHeader::__construct

(PHP 5, PHP 7, PHP 8)

SoapHeader::__construct — SoapHeader コンストラクタ

説明

public SoapHeader::__construct(
string $namespace,
string $name,
mixed $data = ?,
bool $mustunderstand = ?,
string $actor = ?
)

新しい SoapHeader オブジェクトを生成します。

パラメータ

namespace

SOAP ヘッダ要素の名前空間

name

SOAP ヘッダ要素の名前

data

SOAP ヘッダの内容。PHP の値もしくは SoapVar オブジェクトです。

mustUnderstand

SOAP ヘッダ要素の mustUnderstand 属性の値

actor

SOAP ヘッダ要素の actor 属性の値

例

例1 SoapHeader::__construct() の例

<?php
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$client->__soapCall("echoVoid", null, null,
new SoapHeader('http://soapinterop.org/echoheader/',
'echoMeStringRequest',
'hello world'));
?>

参考

  • SoapClient::__soapCall() - SOAP 関数をコールする
  • SoapVar::__construct() - SoapVar コンストラクタ
  • SoapParam::__construct() - SoapParam コンストラクタ
  • SoapServer::addSoapHeader() - SOAP ヘッダをレスポンスに追加する

User Contributed Notes

There are no user contributed notes for this page.


SoapParam クラス

(PHP 5, PHP 7, PHP 8)

はじめに

SOAP コールのパラメータをあらわします。

クラス概要

class SoapParam {
/* プロパティ */
public string $param_name;
public mixed $param_data;
/* メソッド */
public __construct(mixed $data, string $name)
}

プロパティ

param_data

param_name

目次

  • SoapParam::__construct — SoapParam コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


SoapParam コンストラクタ

  • ≪ SoapParam
  • SoapVar ≫
  • PHP Manual
  • SoapParam
  • SoapParam コンストラクタ

SoapParam::__construct

(PHP 5, PHP 7, PHP 8)

SoapParam::__construct — SoapParam コンストラクタ

説明

public SoapParam::__construct(mixed $data, string $name)

新しい SoapParam オブジェクトを生成します。

パラメータ

data

渡すもしくは返すデータ。 PHP の値としてこのパラメータを直接渡すことができますが、この場合、 paramN という名前が付けられますので SOAP サービスがこれを理解しないかも知れません。

name

パラメータの名前

例

例1 SoapParam::__construct() の例

<?php
$client = new SoapClient(null,array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$client->SomeFunction(new SoapParam($a, "a"),
new SoapParam($b, "b"),
new SoapParam($c, "c"));
?>

参考

  • SoapClient::__soapCall() - SOAP 関数をコールする
  • SoapVar::__construct() - SoapVar コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


SoapVar クラス

(PHP 5, PHP 7, PHP 8)

はじめに

SOAP サービスが使用する変数やオブジェクトをあらわします。

クラス概要

class SoapVar {
/* プロパティ */
public int $enc_type;
public mixed $enc_value = null;
public ?string $enc_stype = null;
public ?string $enc_ns = null;
public ?string $enc_name = null;
public ?string $enc_namens = null;
/* メソッド */
public __construct(
mixed $data,
?int $encoding,
?string $typeName = null,
?string $typeNamespace = null,
?string $nodeName = null,
?string $nodeNamespace = null
)
}

プロパティ

enc_name

enc_namens

enc_ns

enc_type

enc_stype

enc_value

目次

  • SoapVar::__construct — SoapVar コンストラクタ

User Contributed Notes

seth dot johnson at gmail dot com 25-Feb-2015 12:09
It is not documented and thus may be subject to change but if you need to inspect the constructed SoapVar it sets everything you pass it on public variables:

<?php
$foo = new \stdClass();
$foosoap = new \SoapVar($foo, SOAP_ENC_OBJECT, 'Foo');
var_dump($foosoap);
echo $foosoap->enc_stype;
echo get_class($foosoap->enc_value);
?>

Will output (tested in PHP 5.3.3 cli):

object(SoapVar)#2 (3) {
  ["enc_type"]=>
  int(301)
  ["enc_value"]=>
  object(stdClass)#1 (0) {
  }
  ["enc_stype"]=>
  string(3) "Foo"
}

Foo
stdClass


SoapVar コンストラクタ

  • ≪ SoapVar
  • Yar ≫
  • PHP Manual
  • SoapVar
  • SoapVar コンストラクタ

SoapVar::__construct

(PHP 5, PHP 7, PHP 8)

SoapVar::__construct — SoapVar コンストラクタ

説明

public SoapVar::__construct(
mixed $data,
?int $encoding,
?string $typeName = null,
?string $typeNamespace = null,
?string $nodeName = null,
?string $nodeNamespace = null
)

新しい SoapVar オブジェクトを生成します。

パラメータ

data

渡すもしくは返すデータ

encoding

エンコーディング ID。XSD_... 定数のうちの一つ。

type_name

型の名前

type_namespace

型の名前空間

node_name

XML ノードの名前

node_namespace

XML ノードの名前空間

変更履歴

バージョン | 説明
8.0.3 | typeName, typeNamespace, nodeName, nodeNamespace は、nullable になりました。

例

例1 SoapVar::__construct() の例

<?php
class SOAPStruct {
function SOAPStruct($s, $i, $f)
{
$this->varString = $s;
$this->varInt = $i;
$this->varFloat = $f;
}
}
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$struct = new SOAPStruct('arg', 34, 325.325);
$soapstruct = new SoapVar($struct, SOAP_ENC_OBJECT, "SOAPStruct", "http://soapinterop.org/xsd");
$client->echoStruct(new SoapParam($soapstruct, "inputStruct"));
?>

参考

  • SoapClient::__soapCall() - SOAP 関数をコールする
  • SoapParam::__construct() - SoapParam コンストラクタ

User Contributed Notes

There are no user contributed notes for this page.


Yet Another RPC Framework

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • 実行時設定
    • リソース型
  • 定義済み定数
  • 例
  • Yar_Server — The Yar_Server class
    • Yar_Server::__construct — Register a server
    • Yar_Server::handle — Start RPC Server
  • Yar_Client — The Yar_Client class
    • Yar_Client::__call — Call service
    • Yar_Client::__construct — Create a client
    • Yar_Client::setOpt — Set calling contexts
  • Yar_Concurrent_Client — The Yar_Concurrent_Client class
    • Yar_Concurrent_Client::call — Register a concurrent call
    • Yar_Concurrent_Client::loop — Send all calls
    • Yar_Concurrent_Client::reset — Clean all registered calls
  • Yar_Server_Exception — The Yar_Server_Exception class
    • Yar_Server_Exception::getType — Retrieve exception's type
  • Yar_Client_Exception — The Yar_Client_Exception class
    • Yar_Client_Exception::getType — Retrieve exception's type

User Contributed Notes

There are no user contributed notes for this page.


はじめに

Yar is a RPC framework which aims to provide a simple and easy way to do communication between PHP applications It has the ability to concurrently call multiple remote services.

User Contributed Notes

There are no user contributed notes for this page.


要件

if you want to use msgpack as packager, you need compile Yar by your self with ./configure --enable-msgpack

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

この » PECL 拡張モジュールは PHP にバンドルされていません。

この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 » https://pecl.php.net/package/yar.

この PECL 拡張モジュールの DLL は、現在存在しません。 Windows でのビルド も参照ください

User Contributed Notes

liubinn_208391 at qq dot com 08-Dec-2013 05:35
Yar Concurrent Client doesn't work on Mac OS.  It is because the cURL shipped with Mac has some difference.

you can resolve that by install a new cURL, like (brew install curl).

then use :
"export DYLD_LIBRARY_PATH=/path-to-new-curl/lib:$DYLD_LIBRARY_PATH"

make the PHP use the new cURL.

of course you can also re-compile your PHP with --with-curl=/path-to-new-curl/


実行時設定

php.ini の設定により動作が変化します。

Yar 設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
yar.packager | php | INI_SYSTEM |
yar.debug | Off | INI_ALL |
yar.connect_timeout | 1000 | INI_ALL |
yar.timeout | 5000 | INI_ALL |
yar.expose_info | On | INI_SYSTEM |

以下に設定ディレクティブに関する 簡単な説明を示します。

yar.packager string

it could be php, json, and msgpack(require built with msgpack support)

yar.debug string

yar.connect_timeout int

timeout in ms

yar.timeout int

timeout in ms

yar.expose_info bool

whether expose the service info(when access the server via GET)

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

YAR_VERSION (string)
YAR_CLIENT_PROTOCOL_HTTP (int)
YAR_OPT_PACKAGER (int)
YAR_OPT_TIMEOUT (int)
YAR_OPT_CONNECT_TIMEOUT (int)
YAR_OPT_HEADER (array)
2.0.4 以降
YAR_PACKAGER_PHP (string)
YAR_PACKAGER_JSON (string)
YAR_ERR_OKEY (int)
YAR_ERR_OUTPUT (int)
YAR_ERR_TRANSPORT (int)
YAR_ERR_REQUEST (int)
YAR_ERR_PROTOCOL (int)
YAR_ERR_PACKAGER (int)
YAR_ERR_EXCEPTION (int)

User Contributed Notes

There are no user contributed notes for this page.


例

例1 Yar Server Example

<?php

/* assume this page can be accessed by http://example.com/operator.php */

class Operator {

/**
* Add two operands
* @param interge
* @return interge
*/
public function add($a, $b) {
return $this->_add($a, $b);
}

/**
* Sub
*/
public function sub($a, $b) {
return $a - $b;
}

/**
* Mul
*/
public function mul($a, $b) {
return $a * $b;
}

/**
* Protected methods will not be exposed
* @param interge
* @return interge
*/
protected function _add($a, $b) {
return $a + $b;
}
}

$server = new Yar_Server(new Operator());
$server->handle();
?>

例2 Access the server in borwser(GET request)

上の例の出力は、 たとえば以下のようになります。

Yar Server Info

例3 Yar Client Example

<?php
$client = new yar_client("http://example.com/operator.php");

/* call directly */
var_dump($client->add(1, 2));

/* call via call */
var_dump($client->call("add", array(3, 2)));

/* __add can not be called */
var_dump($client->_add(1, 2));
?>

上の例の出力は、 たとえば以下のようになります。

int(3)
int(5)
PHP Fatal error:  Uncaught exception 'Yar_Server_Exception' with message 'call to api Operator::_add() failed' in *

例4 Yar Concurrent Client Example

<?php
function callback($ret, $callinfo) {
echo $callinfo['method'] , " result: ", $ret , "\n";
}

/* register async call to remote services */
Yar_Concurrent_Client::call("http://example.com/operator.php", "add", array(1, 2), "callback");
Yar_Concurrent_Client::call("http://example.com/operator.php", "sub", array(2, 1), "callback");
Yar_Concurrent_Client::call("http://example.com/operator.php", "mul", array(2, 2), "callback");

/* sent all request and wait for response */
Yar_Concurrent_Client::loop();
?>

上の例の出力は、 たとえば以下のようになります。

mul result: 4
sub result: 1
add result: 3

User Contributed Notes

124960772 at qq dot com 10-Nov-2015 11:03
<?php
function callback($ret, $callinfo) {
    echo $callinfo['method'] , " result: ", $ret , "\n";
}

/* 注册一个???用 */
Yar_Concurrent_Client::call("http://example.com/operator.php", "add", array(1, 2), "callback");
/* ?送所有注册的?用, 等待返回, 返回后Yar会?用callback回掉函数 */
Yar_Concurrent_Client::loop();
/* 重置call ,否?上面的call会?用*/
Yar_Concurrent_Client::reset();
Yar_Concurrent_Client::call("http://example.com/operator.php", "sub", array(2, 1), "callback");
Yar_Concurrent_Client::loop();

?>


The Yar_Server class

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

はじめに

クラス概要

class Yar_Server {
/* プロパティ */
protected $_executor;
/* メソッド */
final public __construct(Object $obj)
public handle(): bool
}

プロパティ

_executor

目次

  • Yar_Server::__construct — Register a server
  • Yar_Server::handle — Start RPC Server

User Contributed Notes

There are no user contributed notes for this page.


Register a server

  • ≪ Yar_Server
  • Yar_Server::handle ≫
  • PHP Manual
  • Yar_Server
  • Register a server

Yar_Server::__construct

(PECL yar >= 1.0.0)

Yar_Server::__construct — Register a server

説明

final public Yar_Server::__construct(Object $obj)

Set up a Yar HTTP RPC Server, All the public methods of $obj will be register as a RPC service.

パラメータ

obj

An Object, all public methods of its will be registered as RPC services.

戻り値

An instance of Yar_Server.

例

例1 Yar_Server::__construct() example

<?php
class API {
/**
* the doc info will be generated automatically into service info page.
* @params
* @return
*/
public function some_method($parameter, $option = "foo") {
return "some_method";
}

protected function client_can_not_see() {
}
}

$service = new Yar_Server(new API());
$service->handle();
?>

上の例の出力は、 たとえば以下のようになります。

参考

  • Yar_Server::handle() - Start RPC Server
    •

User Contributed Notes

There are no user contributed notes for this page.


Start RPC Server

  • ≪ Yar_Server::__construct
  • Yar_Client ≫
  • PHP Manual
  • Yar_Server
  • Start RPC Server

Yar_Server::handle

(PECL yar >= 1.0.0)

Yar_Server::handle — Start RPC Server

説明

public Yar_Server::handle(): bool

Start a RPC HTTP server, and ready for accpet RPC requests.

注意:

Usual RPC calls will be issued as HTTP POST requests. If a HTTP GET request is issued to the uri, the service information (commented section above) will be printed on the page

パラメータ

この関数にはパラメータはありません。

戻り値

boolean

例

例1 Yar_Server::handle() example

<?php
class API {
/**
* the doc info will be generated automatically into service info page.
* @params
* @return
*/
public function some_method($parameter, $option = "foo") {
}

protected function client_can_not_see() {
}
}

$service = new Yar_Server(new API());
$service->handle();
?>

上の例の出力は、 たとえば以下のようになります。

参考

  • Yar_Server::__construct() - Register a server
    •

User Contributed Notes

There are no user contributed notes for this page.


The Yar_Client class

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

はじめに

クラス概要

class Yar_Client {
/* プロパティ */
protected $_protocol;
protected $_uri;
protected $_options;
protected $_running;
/* メソッド */
public __call(string $method, array $parameters): void
final public __construct(string $url, array $options = ?)
public setOpt(int $name, mixed $value): Yar_Client|false
}

プロパティ

_protocol

_uri

_options

_running

目次

  • Yar_Client::__call — Call service
  • Yar_Client::__construct — Create a client
  • Yar_Client::setOpt — Set calling contexts

User Contributed Notes

porschegt23 at foxmail dot com 05-Jul-2016 11:07
A simple example on here:

server.php
<?php
class API {

    public function api($parameter = "", $option = "foo") {
          return $this->client_can_not_see($parameter);
    }

    public function doAdd($a = 0, $b = 0) {
          return $a+$b;
    }

    protected function client_can_not_see( $name ) {
      return "?好$name~";
    }
}

$service = new Yar_Server ( new API () );
$service->handle ();
?>
client.php
<?php
  $client = new Yar_Client("http://host/server.php");
  $result = $client->api("parameter");
  echo $result.'<hr>';
  echo $client->doAdd(10, 20);
?>


Call service

  • ≪ Yar_Client
  • Yar_Client::__construct ≫
  • PHP Manual
  • Yar_Client
  • Call service

Yar_Client::__call

(PECL yar >= 1.0.0)

Yar_Client::__call — Call service

説明

public Yar_Client::__call(string $method, array $parameters): void

Issue a call to remote RPC method.

パラメータ

method

Remote RPC method name.

parameters

Parameters.

戻り値

例

例1 Yar_Client::__call() example

<?php

$client = new Yar_Client("http://host/api/");

/* call remote service */
$result = $client->some_method("parameter");
?>

上の例の出力は、 たとえば以下のようになります。

参考

  • Yar_Client::setOpt() - Set calling contexts
    •

User Contributed Notes

There are no user contributed notes for this page.


Create a client

  • ≪ Yar_Client::__call
  • Yar_Client::setOpt ≫
  • PHP Manual
  • Yar_Client
  • Create a client

Yar_Client::__construct

(PECL yar >= 1.0.0)

Yar_Client::__construct — Create a client

説明

final public Yar_Client::__construct(string $url, array $options = ?)

Create a Yar_Client to a Yar_Server.

パラメータ

url

Yar Server URL.

戻り値

Yar_Client instance.

例

例1 Yar_Client::__construct() example

<?php
$client = new Yar_Client("http://host/api/");
?>

上の例の出力は、 たとえば以下のようになります。

参考

  • Yar_Client::__call() - Call service
    •

  • Yar_Client::setOpt() - Set calling contexts
    •

User Contributed Notes

There are no user contributed notes for this page.


Set calling contexts

  • ≪ Yar_Client::__construct
  • Yar_Concurrent_Client ≫
  • PHP Manual
  • Yar_Client
  • Set calling contexts

Yar_Client::setOpt

(PECL yar >= 1.0.0)

Yar_Client::setOpt — Set calling contexts

説明

public Yar_Client::setOpt(int $name, mixed $value): Yar_Client|false

パラメータ

name

it can be: YAR_OPT_PACKAGER, YAR_OPT_PERSISTENT (Need server support), YAR_OPT_TIMEOUT, YAR_OPT_CONNECT_TIMEOUT, YAR_OPT_HEADER (as of 2.0.4), YAR_OPT_PROXY (as of 2.2.0)

value

戻り値

Returns $this on success失敗した場合に false を返します.

例

例1 Yar_Client::setOpt() example

<?php

$cient = new Yar_Client("http://host/api/");

//Set timeout to 1s
$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);

//Set packager to JSON
$client->SetOpt(YAR_OPT_PACKAGER, "json");

//Set Custom headers
$client->SetOpt(YAR_OPT_HEADER, array("hr1: val1", "hd2: val2"));

// Set Http Proxy
$client->SetOpt(YAR_OPT_PROXY, "127.0.0.1:8888");

/* call remote service */
$result = $client->some_method("parameter");
?>

上の例の出力は、 たとえば以下のようになります。

参考

  • Yar_Client::__call() - Call service
    •

User Contributed Notes

There are no user contributed notes for this page.


The Yar_Concurrent_Client class

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

はじめに

クラス概要

class Yar_Concurrent_Client {
/* プロパティ */
static $_callstack;
static $_callback;
static $_error_callback;
/* メソッド */
public static call(
string $uri,
string $method,
array $parameters = ?,
callable $callback = ?,
callable $error_callback = ?,
array $options = ?
): int
public static loop(callable $callback = ?, callable $error_callback = ?): bool
public static reset(): bool
}

プロパティ

_callstack

_callback

_error_callback

目次

  • Yar_Concurrent_Client::call — Register a concurrent call
  • Yar_Concurrent_Client::loop — Send all calls
  • Yar_Concurrent_Client::reset — Clean all registered calls

User Contributed Notes

There are no user contributed notes for this page.


Register a concurrent call

  • ≪ Yar_Concurrent_Client
  • Yar_Concurrent_Client::loop ≫
  • PHP Manual
  • Yar_Concurrent_Client
  • Register a concurrent call

Yar_Concurrent_Client::call

(PECL yar >= 1.0.0)

Yar_Concurrent_Client::call — Register a concurrent call

説明

public static Yar_Concurrent_Client::call(
string $uri,
string $method,
array $parameters = ?,
callable $callback = ?,
callable $error_callback = ?,
array $options = ?
): int

Register a RPC call, but won't sent it immediately, it will be send while further call to Yar_Concurrent_Client::loop()

パラメータ

uri

The RPC server URI(http, tcp)

method

Service name(aka the method name)

parameters

Parameters

callback

A function callback, which will be called while the response return.

戻り値

An unique id, can be used to identified which call it is.

例

例1 Yar_Concurrent_Client::call() example

<?php
function callback($retval, $callinfo) {
var_dump($retval);
}

function error_callback($type, $error, $callinfo) {
error_log($error);
}

Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters")); // if the callback is not specificed,
// callback in loop will be used
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", NULL, array(YAR_OPT_PACKAGER => "json"));
//this server accept json packager
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", NULL, array(YAR_OPT_TIMEOUT=>1));
//custom timeout

//The requests are not sent yet
?>

上の例の出力は、 たとえば以下のようになります。

参考

  • Yar_Concurrent_Client::loop() - Send all calls
    •

  • Yar_Concurrent_Client::reset() - Clean all registered calls
    •

  • Yar_Server::__construct() - Register a server
    •

  • Yar_Server::handle() - Start RPC Server
    •

User Contributed Notes

There are no user contributed notes for this page.


Send all calls

  • ≪ Yar_Concurrent_Client::call
  • Yar_Concurrent_Client::reset ≫
  • PHP Manual
  • Yar_Concurrent_Client
  • Send all calls

Yar_Concurrent_Client::loop

(PECL yar >= 1.0.0)

Yar_Concurrent_Client::loop — Send all calls

説明

public static Yar_Concurrent_Client::loop(callable $callback = ?, callable $error_callback = ?): bool

Send all registed remote RPC calls.

パラメータ

callback

If this callback is set, then Yar will call this callback after all calls are sent and before any response return, with a $callinfo NULL.

Then, if user didn't specify callback when registering concurrent call, this callback will be used to handle response, otherwise, the callback specified while registering will be used.

error_callback

If this callback is set, then Yar will call this callback while error occurred.

戻り値

例

例1 Yar_Concurrent_Client::loop() example

<?php
function callback($retval, $callinfo) {
if ($callinfo == NULL) {
echo "Now, all requests are sent, and no any response available\n";
} else {
echo "This is a remote call response, the method name is", $callinfo["method"],
". calling sequence is " , $callinfo["sequence"] , "\n";
var_dump($retval);
}
}

function error_callback($type, $error, $callinfo) {
error_log($error);
}

Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters")); // if the callback is not specificed,
// callback in loop will be used
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", NULL, array(YAR_OPT_PACKAGER => "json"));
//this server accept json packager
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", NULL, array(YAR_OPT_TIMEOUT=>1));
//custom timeout

Yar_Concurrent_Client::loop("callback", "error_callback"); //send the requests,
//the error_callback is optional
?>

上の例の出力は、 たとえば以下のようになります。

Now, all requests are sent, and no any response available
This is a remote call response, the method name issome_method. calling sequence is 4
string(11) "some_method"
This is a remote call response, the method name issome_method. calling sequence is 1
string(11) "some_method"
This is a remote call response, the method name issome_method. calling sequence is 2
string(11) "some_method"
This is a remote call response, the method name issome_method. calling sequence is 3
string(11) "some_method"

参考

  • Yar_Concurrent_Client::call() - Register a concurrent call
  • Yar_Concurrent_Client::reset() - Clean all registered calls
  • Yar_Server::__construct() - Register a server
  • Yar_Server::handle() - Start RPC Server

User Contributed Notes

There are no user contributed notes for this page.


Clean all registered calls

  • ≪ Yar_Concurrent_Client::loop
  • Yar_Server_Exception ≫
  • PHP Manual
  • Yar_Concurrent_Client
  • Clean all registered calls

Yar_Concurrent_Client::reset

(PECL yar >= 1.2.4)

Yar_Concurrent_Client::reset — Clean all registered calls

説明

public static Yar_Concurrent_Client::reset(): bool

Clean all registered calls

パラメータ

この関数にはパラメータはありません。

戻り値

例

例1 Yar_Concurrent_Client::reset() example

上の例の出力は、 たとえば以下のようになります。

参考

  • Yar_Concurrent_Client::call() - Register a concurrent call
    •

  • Yar_Concurrent_Client::loop() - Send all calls
    •

  • Yar_Server::__construct() - Register a server
    •

  • Yar_Server::handle() - Start RPC Server
    •

User Contributed Notes

There are no user contributed notes for this page.


The Yar_Server_Exception class

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

はじめに

If service threw exceptions, A Yar_Server_Exception will be threw in client side.

クラス概要

class Yar_Server_Exception extends Exception {
/* プロパティ */
protected $_type;
/* メソッド */
public getType(): string
/* 継承したメソッド */
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

プロパティ

message

code

file

line

_type

目次

  • Yar_Server_Exception::getType — Retrieve exception's type

User Contributed Notes

There are no user contributed notes for this page.


Retrieve exception's type

  • ≪ Yar_Server_Exception
  • Yar_Client_Exception ≫
  • PHP Manual
  • Yar_Server_Exception
  • Retrieve exception's type

Yar_Server_Exception::getType

(PECL yar >= 1.0.0)

Yar_Server_Exception::getType — Retrieve exception's type

説明

public Yar_Server_Exception::getType(): string

Get the exception original type threw by server

パラメータ

この関数にはパラメータはありません。

戻り値

string

例

例1 Yar_Server_Exception::getType() example

//Server.php
<?php
class Custom_Exception extends Exception {};

class API {
public function throw_exception($name) {
throw new Custom_Exception($name);
}
}

$service = new Yar_Server(new API());
$service->handle();
?>

//Client.php
<?php
$client = new Yar_Client("http://host/api.php");

try {
$client->throw_exception("client");
} catch (Yar_Server_Exception $e) {
var_dump($e->getType());
var_dump($e->getMessage());
}

上の例の出力は、 たとえば以下のようになります。

string(16) "Custom_Exception"
string(6) "client"

参考

User Contributed Notes

There are no user contributed notes for this page.


The Yar_Client_Exception class

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

はじめに

クラス概要

class Yar_Client_Exception extends Exception {
/* プロパティ */
/* メソッド */
public getType(): string
/* 継承したメソッド */
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

プロパティ

message

code

file

line

目次

  • Yar_Client_Exception::getType — Retrieve exception's type

User Contributed Notes

There are no user contributed notes for this page.


Retrieve exception's type

  • ≪ Yar_Client_Exception
  • XML-RPC ≫
  • PHP Manual
  • Yar_Client_Exception
  • Retrieve exception's type

Yar_Client_Exception::getType

(PECL yar >= 1.0.0)

Yar_Client_Exception::getType — Retrieve exception's type

説明

public Yar_Client_Exception::getType(): string

パラメータ

この関数にはパラメータはありません。

戻り値

Returns "Yar_Exception_Client".

例

例1 Yar_Client_Exception::getType() example

<?php

/* ... */

?>

上の例の出力は、 たとえば以下のようになります。

...

参考

  • Yaf_Server_Exception::getType()

User Contributed Notes

There are no user contributed notes for this page.


XML-RPC

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • リソース型
  • XML-RPC 関数
    • xmlrpc_decode — XML をネイティブな PHP 型にデコードする
    • xmlrpc_decode_request — XML をネイティブなPHP 型にデコードする
    • xmlrpc_encode — PHP の値に関する XML を生成する
    • xmlrpc_encode_request — メソッドリクエスト用の XML を生成する
    • xmlrpc_get_type — PHP の値に関する xmlrpc 型を取得する
    • xmlrpc_is_fault — 配列の値が XMLRPC の失敗であるかどうかを調べる
    • xmlrpc_parse_method_descriptions — XML を、メソッド説明のリストにデコードする
    • xmlrpc_server_add_introspection_data — introspection ドキュメントを追加する
    • xmlrpc_server_call_method — XML リクエストをパースし、メソッドをコールする
    • xmlrpc_server_create — xmlrpc サーバーを作成する
    • xmlrpc_server_destroy — サーバーリソースを破棄する
    • xmlrpc_server_register_introspection_callback — ドキュメントを生成する PHP 関数を登録する
    • xmlrpc_server_register_method — メソッド名が一致するメソッドリソースに PHP 関数を登録する
    • xmlrpc_set_type — PHP 文字列型用に xmlrpc 型、base64 または datetime を設定する

User Contributed Notes

There are no user contributed notes for this page.


はじめに

これらの関数を使うと、XML-RPCサーバーおよびクライアントを書くことができます。 XML-RPCに関する詳細な情報については、 » http://www.xmlrpc.com/ を参照ください。 そして、この拡張モジュールと関数に関する詳細なドキュメントについては、 » http://xmlrpc-epi.sourceforge.net/を参照ください。

警告

この拡張モジュールは、 実験的 なものです。この拡張モジュールの動作・ 関数名・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 このモジュールは自己責任で使用してください。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

PHPのXML-RPCサポートはデフォルトでは有効となっていません。 XML-RPCサポートを有効にするには、PHPをコンパイルする際に設定オプション --with-xmlrpc[=DIR] を使用する必要があります。

User Contributed Notes

There are no user contributed notes for this page.


リソース型

この拡張モジュールでは XML-RPC サーバーリソースを定義しています。これは xmlrpc_server_create() が返すものです。

User Contributed Notes

There are no user contributed notes for this page.


XML-RPC 関数

目次

  • xmlrpc_decode — XML をネイティブな PHP 型にデコードする
  • xmlrpc_decode_request — XML をネイティブなPHP 型にデコードする
  • xmlrpc_encode — PHP の値に関する XML を生成する
  • xmlrpc_encode_request — メソッドリクエスト用の XML を生成する
  • xmlrpc_get_type — PHP の値に関する xmlrpc 型を取得する
  • xmlrpc_is_fault — 配列の値が XMLRPC の失敗であるかどうかを調べる
  • xmlrpc_parse_method_descriptions — XML を、メソッド説明のリストにデコードする
  • xmlrpc_server_add_introspection_data — introspection ドキュメントを追加する
  • xmlrpc_server_call_method — XML リクエストをパースし、メソッドをコールする
  • xmlrpc_server_create — xmlrpc サーバーを作成する
  • xmlrpc_server_destroy — サーバーリソースを破棄する
  • xmlrpc_server_register_introspection_callback — ドキュメントを生成する PHP 関数を登録する
  • xmlrpc_server_register_method — メソッド名が一致するメソッドリソースに PHP 関数を登録する
  • xmlrpc_set_type — PHP 文字列型用に xmlrpc 型、base64 または datetime を設定する

User Contributed Notes

digibrisk at gmail dot NOSPAM dot SPAMNO dot com 05-Oct-2007 03:24
Adding to what giunta dot gaetano at sea-aeroportimilano dot it and astrolox at lawyersonline dot co dot uk said about the Sourceforge PHP XML-RPC project: You can probably use function_exists() to determine whether the extension is installed so you don't have to incur performance costs. If it's not installed, then the function won't exist, and function_exists() returns false. You can then fall back on the alternative library if that's the case. For example:

<?php

if(!function_exists("xmlrpc_server_create")) {
    // include necessary files.
}

?>
handco at gmail dot com 20-Feb-2007 08:19
Hi,

A little snippet to implement OO XML RPC Server.

File RPCPlugin.php :

class RPCPlugins {

    private $plugins;

    function __construct ($pathname, $rpcServer) {
        $d = dir($pathname);
        while (($file = $d->read()) !== false) {
            if (ereg('(.*)\.php$', $file, $regs)) {
                include_once ($pathname . '/' . $file);
                $class=$regs[1];
                $this->plugins = new $class($rpcServer);
            }
        }
    }

}

class RPCPlugin {

    private $_rpcServer;

    function __construct($rpcServer) {
        $this->_rpcServer = $rpcServer;

        $methods = get_class_methods($this);

        foreach ($methods as $method) {
            if (substr($method, 0,1) != '_') {
                xmlrpc_server_register_method($rpcServer,get_class($this) . "." . $method,array(&$this,$method));
            }
        }

    }

}

An example of plugin in plugins/Test.php  :

 class Test extends RPCPlugin {

     function HelloWorld ($method, $params) {
         return "Hello World --->>" . $params[0];
     }

 }

Now the real server :

require_once 'RPCPlugin.php';

 $rpcServer = xmlrpc_server_create();

$plugins = new RPCPlugins(realpath('plugins/'), $rpcServer);

 $resp = xmlrpc_server_call_method($rpcServer,$HTTP_RAW_POST_DATA,null);
 if ($resp) {
     header ('Content-Type: text/xml');
     echo $resp;
 }
 xmlrpc_server_destroy($rpcServer)

Then you can call ethod by classname.method.
For this sample Test.HelloWorld

Hn'Co
giunta dot gaetano at sea-aeroportimilano dot it 13-Sep-2006 06:40
If you need to use this extension but are stuck on a server where it can not be installed, the php-xmlrpc library found at http://phpxmlrpc.sourceforge.net includes an emulation layer that aims to be 100% compatible with the API of the native extension (as part of the "extras" package since version 0.2).
This means your code should be able to run unmodified on top of the php-xmlrpc library. Of course performance will be at least an order of magnitude worse...
keithNO dot SPAMthornhill at gmail dot com 17-May-2006 02:16
for others attempting the same thing, here is what a function would look like if you wanted to send a base64 encoded file from a client and then save it onto the server. the other code necessary to call this function via an RPC is available in other comments so i won't repeat it.

parameters:
1 - name of file
2 - base64 encoded data of file

note the use of $file_data->scalar

<?
    function sendFile($method_name, $params, $user_data) {
        $file = "/somedir/" . $params[0];
        $file_data = $params[1];

        $fh = @fopen($file, "wb");
        if ($fh) {
            if (@fwrite($fh, $file_data->scalar)) {
                $msg = "success msg";
            } else {
                $msg = "couldn't write to file";
            }
            fclose($fh);
            return $msg;
        } else {
            return "couldn't open file";
        }
    }
?>
09-Mar-2006 12:47
This XML-RPC Service makes the use XML-RPC very esay.

<?php

/**
* function myfun() returns
*@return array
*/
function myfunc(){
    return $some_array;
}

$ws = new XML_RPC_Server();
$ws->registerFunction('myfunc');
$ws->run();

?>

http://www.pure-php.de/node/31

It creates also a simple docu.
http://www.pure-php.com/php/service.php?doc
john # curioussymbols com 19-Oct-2005 04:37
I couldn't make the 'xmlrpc_errors' php.ini setting do anything
noticeable (PHP 4.3.11), so I used the following code to report errors
from my XMLRPC server. Hope it's helpful for someone.

<?php
function return_xmlrpc_error($errno,$errstr,$errfile=NULL,$errline=NULL
       ,$errcontext=NULL){
    global $xmlrpc_server;
    if(!$xmlrpc_server)die("Error: $errstr in '$errfile', line '$errline'");

    header("Content-type: text/xml; CHARSET=shift-jis");
    print(xmlrpc_encode(array(
        'faultCode'=>$errno
        ,'faultString'=>"Remote XMLRPC Error from
          ".$_SERVER['HTTP_HOST'].": $errstr in at $errfile:$errline"
    )));
    die();
}
set_error_handler('return_xmlrpc_error');
?>

In my server function, I just trigger_error("message",E_USER_ERROR)]
 if something can't be completed.

Then on the client side,
<?php
        $data =& xmlrpc_decode($response['body']);

        if(xmlrpc_is_fault($data)){
            trigger_error($data['faultString'],E_USER_ERROR);
        }
?>
martin dot rode at programmfabrik dot de 04-Aug-2005 05:28
To connect to a python xmlrpc server I use:

function do_call($host, $port, $request) {

    $url = "http://$host:$port/";
    $header[] = "Content-type: text/xml";
    $header[] = "Content-length: ".strlen($request);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);

    $data = curl_exec($ch);
    if (curl_errno($ch)) {
        print curl_error($ch);
    } else {
        curl_close($ch);
        return $data;
    }
}

$request = xmlrpc_encode_request('add', array(3, 4));
$response = do_call($host, $port, $request);
astrolox at lawyersonline dot co dot uk 22-Mar-2005 04:20
The PHP XML-RPC project at SourceForge makes life a hell of a lot easier. However, the project uses some function names which are identical to thoses provided by the XML-RPC extention.

If you are on a server with XML-RPC extension compiled in but wish to use the PHP based version then you will have to rename some of the functions.

I notice that sourceforce says there is activity on the project in 2005 but the last release was January 12, 2003.

I recommend that you use this not so friendly PHP extention if available. However this sourceforce project is still a good idea if you don't control which extenions are be available on the server.

http://phpxmlrpc.sourceforge.net/
Jerome Delamarche 14-Oct-2004 02:58
The documentation lacks an example that shows how to send a fault in a response. Here is how to do it:

$args = array("faultCode" => $errcode, "faultString" => $errmsg);
$resp = xmlrpc_encode_request(NULL,$args);
//echo $resp;
php at hendrik-krauss dot de 13-Aug-2004 12:38
On "datetime" values:

If you implement an XML-RPC server with these functions and a client calls a method on your server, sending a datetime as parameter (in ISO 8601 format, as specified at http://www.xmlrpc.com/spec), the PHP XML-RPC will pass your registered server method an object as parameter. That object, for example, looks like:
obj->type="datetime"
obj->scalar="20040420T13:32:40"
obj->timestamp=1082460760

If you do xmlrpc_get_type(obj), it will return "datetime", so presumably that function just returns the value of 'type'. 'scalar' seems to be the on-the-wire representation of the datetime (ISO 8601, exactly as received). 'timestamp' appears to be the ISO value in 'scalar' converted into a normal PHP timestamp (i.e. Unix time_t).

Note on 'scalar': Using a MySQL DB, we did something like  "select blah where start_time >= $obj->scalar ;". That actually worked and returned expected results, so MySQL appears to handle that ISO 8601 format correctly.
swunderlin at REMOVE-telemedia dot ch 09-Jun-2004 03:20
pear hs an XML_RPC package, if you can't recompile your php:
http://pear.php.net/package/XML_RPC
steph at zend dot com 08-Jun-2004 04:04
It took me a while to get a client together without external libraries.  This very basic client/server pair works on my home set-up - hopefully it will save the next xml-rpc virgin some grief.

/* clienttest.php */
<?php
function do_call($host, $port, $request) {

    $fp = fsockopen($host, $port, $errno, $errstr);
    $query = "POST /home/servertest.php HTTP/1.0\nUser_Agent: My Egg Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n";

    if (!fputs($fp, $query, strlen($query))) {
        $errstr = "Write error";
        return 0;
    }

    $contents = '';
    while (!feof($fp)) {
        $contents .= fgets($fp);
    }

    fclose($fp);
    return $contents;
}

$host = 'localhost';
$port = 80;
$request = xmlrpc_encode_request('cycle', 'egg');
$response = do_call($host, $port, $request);
/* do something with $response, e.g. print it */
?>

/* servertest.php */
<?php
function lifecycle($method, $params) {
/* $method = 'cycle', $params = (array of) request parameter(s); $data is also passed from xmlrpc_server_call_method, if we had any data to pass */
    switch($params[0]) {
        case 'egg':
            $reply = 'All eggs will be birds one day.';
        break;
        default:
            $reply = 'That must have been an otheregg';
    }
    return $reply;
}

$server = xmlrpc_server_create();

/* register the 'external' name and then the 'internal' name */
xmlrpc_server_register_method($server, "cycle", "lifecycle");

$request = $HTTP_RAW_POST_DATA; // no you don't need 'always on', and no $_POST doesn't work.

/* the parameters here are 'server, xml-string and user data'.  There's supposed to be an optional 'output options' array too, but I can't get it working :( hence header() call */
$response = xmlrpc_server_call_method($server, $request, null);
header('Content-Type: text/xml');
print $response;

xmlrpc_server_destroy($server);
?>
mboeren at php dot net 25-Feb-2004 04:34
Just a quick addition to my previous xmlrpc_client class: since you cannot use remote methods containing capital letters or methods from subhandlers (like 'system.listMethods()'), I added a 'call(...)' method to the class.

<?php
    // this method should be copy/pasted in the
    // xmlrpc_client class

    function call($function)
    {
        $return = NULL;
        $argv = func_get_args();
        array_shift($argv); // remove function argument
        $this->__call($function, $argv, &$return);
        return $return;
    }

    // now, you can also do
    $result = $client->call('system.listMethods');
    $sum = client->call('add', '1', '2');
?>
mboeren at php dot net 24-Feb-2004 07:01
I use the following code (requires the overload extension) to make developing clients easier:

<?php
include("utils/utils.php"); // from xmlrpc-epi utils

/*
Usage:
    $client = new xmlrpc_client("http://localhost:7080");
    print $client->echo('x')."\n";
    print $client->add(1, 3)."\n";

*/
class xmlrpc_client
{
    var $url;
    var $urlparts;

    function xmlrpc_client($url)
    {
        $this->url = $url;
        $this->urlparts = parse_url($this->url);
        foreach(array('scheme', 'host', 'user', 'pass', 'path',
                      'query', 'fragment')
                as $part) {
            if (!isset($this->urlparts[$part])) {
                $this->urlparts[$part] = NULL;
                }
            }
    }

    function __call($function, $arguments, &$return)
    {
        $requestprms['host'] = $this->urlparts['host'];
        $requestprms['port'] = $this->urlparts['port'];
        $requestprms['uri'] = $this->urlparts['path'];
        $requestprms['method'] = $function;
        $requestprms['args'] = $arguments;
        $requestprms['debug'] = 0;
        $requestprms['timeout'] = 0;
        $requestprms['user'] = NULL;
        $requestprms['pass'] = NULL;
        $requestprms['secure'] = 0;

        $result = xu_rpc_http_concise($requestprms);
        if (is_array($result) && isset($result['faultCode'])) {
            print('Error in xmlrpc call \''.$function.'\''."\n");
            print('  code   : '.$result['faultCode']."\n");
            print('  message: '.$result['faultString']."\n");
            return false;
            }
        $return = $result;
        return true;
    }

}
overload('xmlrpc_client');

?>
bmichael at goldparrot dot com 08-Feb-2003 09:52
If anyone is interested in making XMLRPC requests directly from the client, I have been able to get xmlrpc to
work with vcXMLRPC javascript backend.

After about 1 week of scanning the market, I found this solution to be the best on Javascript back end.  It uses the Microsoft.HTTP activeX control for IE, or HTTPRequest Object for Mozilla.

You include vc(Virtual Cowboys) vcXMLRPC.js file into your pages and make the rpc calls from with javascript to create the requests.

It works both ways.

Two Notes:

I have tested it on IE 6.02 and you need to change lines in ProcessRequest :
function to read:

  dom = this.getObject("XMLDOM",http.responseText);

and change the getObject function to use the latest ActiveX Control:

 MSXML2.XMLHTTP.3.0  (or 4.0)
 MSXML2.DOMDocument.3.0  (or 4.0)

The controls are found on MSDN in the Web Services -> XML area.

As another note, you DO NOT NEED the rpcproxy.cgi script to use this.  That is a proxy script to get around JS Security.  You can use PHP to build the proxy.  But, I was able to get the CGI working with GCC compiler on Solaris (change the -KPCI, depend and -x03 optimizer settings in the Makefile )
steve at orangeNOSPAMimagineering dot com 24-Aug-2002 01:32
There's a handy library by Keith Devens (version 2.2.1) at
http://www.keithdevens.com/software/xmlrpc/

Here is a sample client. It remotely calls sample.sumAndDifference
with two parameters (3 and 5).
It returns:

sum => 8
difference => -2

<?php
include ("kd_xmlrpc.php");
// define("XMLRPC_DEBUG", 0);    // Set to 1 for handy debugging

$method = "sample.sumAndDifference";
$params = XMLRPC_prepare(array(3,5));

$site = "xmlrpc-c.sourceforge.net";
$location = "/api/sample.php";

list($success, $result) = XMLRPC_request( $site, $location, $method, $params );

// XMLRPC_debug_print();    // uncomment for debugging

foreach ( $result as $key => $value ) {
          echo(" $key => $value \n");
}

?>
hfuecks at pinkgoblin dot com 15-Aug-2002 08:32
This extension does not handle the process of making making XML-RPC client requests via HTTP; it only prepares the XML-RPC request payload.

This differs from many other XML-RPC implementations but offers greater flexibility, allowing SSL connections, authentication headers and XML-RPC via other transports like SMTP.
ivanr at webkreator dot com 21-Jun-2002 11:50
For a really easy way to use this XML-RPC extension take a look at

XML-RPC Class Server (http://www.webkreator.com/php/xcs/)

It automatically creates servers out of PHP classes. Creating clients is almost as easy, especially with the recent addition of the overload extension to PHP (see http://www.php.net/manual/en/ref.overload.php).
nic at uklinux dot NOSPAM dot net 24-Apr-2002 09:05
An alternative XML-RPC implementation is available at http://xmlrpc.usefulinc.com - it's written in PHP so you can use it on servers for which you don't have the luxury of rebuilding PHP on.

nic


XML をネイティブな PHP 型にデコードする

  • ≪ XML-RPC 関数
  • xmlrpc_decode_request ≫
  • PHP Manual
  • XML-RPC 関数
  • XML をネイティブな PHP 型にデコードする

xmlrpc_decode

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_decode — XML をネイティブな PHP 型にデコードする

説明

xmlrpc_decode(string $xml, string $encoding = "iso-8859-1"): mixed
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

パラメータ

xml

XMLRPC メソッドが返す XML レスポンス。

encoding

iconv がサポートする入力エンコーディング。

戻り値

XMLRPC メソッドのレスポンスをもとに作成した、 配列あるいは整数、文字列、boolean 値を返します。

例

xmlrpc_encode_request() の例を参照ください。

参考

  • xmlrpc_encode_request() - メソッドリクエスト用の XML を生成する
  • xmlrpc_is_fault() - 配列の値が XMLRPC の失敗であるかどうかを調べる

User Contributed Notes

Alwin 18-May-2016 02:24
Note that from libxml 2.7.9+ there is a limit of 10MB for the XML-RPC response.

If the response is larger, xmlrpc_decode will simply return NULL.

There is currently no way to override this limit like we can with the other xml functions (LIBXML_PARSEHUGE)
carmageddon at gmail dot com 03-Jun-2013 07:42
Apparently there is a slight problem with xmlrpc_decode (or php) which re-formats this input: <value><double>0.000000</double></value>

As the double number 0.

To get around it, use: number_format($val, 2);
Output would be 0.00
phil dot berry at elise-international dot net 05-Sep-2011 08:09
Make sure the server isn't returning a string with a space for the first character, this fails in version 5.3.3 and the function returns null (though seems to be ok in 5.2).

Easily sorted by  trimming the response data:

<?php xmlrpc_decode( trim($response) ); ?>
ryon dot sherman at gmail dot com 21-Aug-2009 04:18
64 bit (i8) integers are not parsed by xmlrpc_decode().
Use a string replacement to work around this:

<?php

$xml = str_replace('i8>', 'i4>', $xml);

$decoded_xml = xmlrpc_decode($xml);

?>
david dot bachelart at polytechnique dot org 18-Jul-2004 08:18
Be careful with encodings, the xmlrpc-decode function is rather strict. For example, the following response parse returns NULL :

<?xml version="1.0"?>
<methodResponse>
   <params>
      <param>
         <value><string>a & b</string></value>
         </param>
      </params>
   </methodResponse>

You should use entities :
<?xml version="1.0"?>
<methodResponse>
   <params>
      <param>
         <value><string>a &amp; b</string></value>
         </param>
      </params>
   </methodResponse>

If your server does not encode responses properly, you may have to process responses before parse.
hfuecks at pinkgoblin dot com 16-Aug-2002 03:57
Use this with an XML-RPC client to decode a server response into native PHP variables. It will automatically translate the response XML-RPC data types into their PHP equivalents.

This function will return only false is there is any problem with format of the XML it receives.

The HTTP response header will need to be stripped off with something like;

<?php
$xml=(substr($response, strpos($response, "\r\n\r\n")+4));

$phpvars = xmlrpc_decode ($xml);
?>


XML をネイティブなPHP 型にデコードする

  • ≪ xmlrpc_decode
  • xmlrpc_encode ≫
  • PHP Manual
  • XML-RPC 関数
  • XML をネイティブなPHP 型にデコードする

xmlrpc_decode_request

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_decode_request — XML をネイティブなPHP 型にデコードする

説明

xmlrpc_decode_request(string $xml, string &$method, string $encoding = ?): mixed
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

e dot sand at elisand dot com 22-Jun-2009 08:20
This function works exactly the same as xmlrpc_decode() except it gives you access to the method being called as well (xmlrpc_decode() only outputs the params from the XML-RPC call).

To use this function, simply create an empty variable to store the method string in, and then pass by reference like so:

<?php
$method = null;
$params = xmlrpc_decode_request('<xml rpc request>', &$method);
?>

What you will get back are the params stored in $params, and $method will have the method being requested.


PHP の値に関する XML を生成する

  • ≪ xmlrpc_decode_request
  • xmlrpc_encode_request ≫
  • PHP Manual
  • XML-RPC 関数
  • PHP の値に関する XML を生成する

xmlrpc_encode

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_encode — PHP の値に関する XML を生成する

説明

xmlrpc_encode(mixed $value): string
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

There are no user contributed notes for this page.


メソッドリクエスト用の XML を生成する

  • ≪ xmlrpc_encode
  • xmlrpc_get_type ≫
  • PHP Manual
  • XML-RPC 関数
  • メソッドリクエスト用の XML を生成する

xmlrpc_encode_request

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_encode_request — メソッドリクエスト用の XML を生成する

説明

xmlrpc_encode_request(string $method, mixed $params, array $output_options = ?): string
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

パラメータ

method

コールするメソッドの名前。

params

メソッドのシグネチャに対応したパラメータ。

output_options

出力オプションを指定する配列。以下の内容が指定できます (強調してあるものがデフォルトです)。

  • output_type: php, xml

  • verbosity: no_white_space, newlines_only, pretty

  • escaping: cdata, non-ascii, non-print, markup (単一の値を表す文字列、あるいは複数の値の配列となります)

  • version: simple, xmlrpc, soap 1.1, auto

  • encoding: iso-8859-1, その他 iconv がサポートする文字セット

戻り値

リクエストを表す XML 文字列を返します。

例

例1 XMLRPC クライアント関数の例

<?php
$request = xmlrpc_encode_request("method", array(1, 2, 3));
$context = stream_context_create(array('http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $request
)));
$file = file_get_contents("http://www.example.com/xmlrpc", false, $context);
$response = xmlrpc_decode($file);
if ($response && xmlrpc_is_fault($response)) {
trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
} else {
print_r($response);
}
?>

参考

  • stream_context_create() - ストリームコンテキストを作成する
  • file_get_contents() - ファイルの内容を全て文字列に読み込む
  • xmlrpc_decode() - XML をネイティブな PHP 型にデコードする

User Contributed Notes

Anonymous 27-Aug-2009 12:33
ever tried transmitting an array like the following with xmlrpc?
$var1=array(7=>14,9=>18);

The output array looks quite different! It will look like that:
$var2=array(14,18);

The only solution i found is to prepend a space to the index:
$var3=array(' 7'=>14,' 9'=>18);

Using that method you'll get the right result. ($var1)
cometfish at hotmail dot com 01-Sep-2008 12:47
The example above is incorrect - the header needs to be an array, see post by "chris dot vigelius at gmx dot net": http://au.php.net/manual/en/function.stream-context-create.php#74431
His post also shows how to do browser authentication, as below:
<?php
   $request = xmlrpc_encode_request("methodName", array("methodParam"));
   $auth = base64_encode($username.":".$password);
   $header = (version_compare(phpversion(), '5.2.8'))
     ? array("Content-Type: text/xml","Authorization: Basic $auth")
     : "Content-Type: text/xml\r\nAuthorization: Basic $auth" ; //[1]
   $context = stream_context_create(array('http' => array(
      'method' => "POST",
      'header' => $header,
      'content' => $request
   )));
   $webservice="http://www.example.com/rpc";
   $file = file_get_contents($webservice, false, $context);
   $response = xmlrpc_decode($file);
   if (xmlrpc_is_fault($response)) {
      return "xmlrpc: $response[faultString] ($response[faultCode])";
   } else {
      return $response;
   }
?>

1 - EDITOR NOTE: THIS IS A FIX FROM "SandersWang dt php at gmail dot com"
fredrik at it dot cdon dot com 06-Feb-2008 05:05
It should be noted that encoding does not seem to encode anything, just specify what goes into the XML header.

We had problems with double-encoded UTF strings being saved to database when using this function, sending it of to a apache xml-rpc servlet and storing it in mysql database. It was solved by setting 'escaping' to just 'markup' and 'encoding' to 'UTF-8' (don't forget to set 'utf-8' in xmlrpc_decode too).

It seems that UTF-8 encoded strings gets escaped with their bytes as entities instead of their characters as entites.
handco at gmail dot com 12-Mar-2007 08:39
Simple OO client with function Overload :

the php metho test_helloworld is translated to xmlrpc method test.helloworld.

class RpcClient {

    private $_methods;
    private $_context;
    private $_url;

    function __construct ($url, $user, $passwd) {
        $auth = base64_encode(sprintf('%s:%s', $user,$passwd));
        $this->_context = stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'header' => "Content-Type: text/xml\r\n".
                            "Authorization: Basic $auth" ,

            )
        ));
        $this->_url = $url;

        $this->registerMethod ("Test_HelloWorld");

    }

    function __call($methodName, $params) {
        if (array_key_exists($methodName,$this->_methods)) {
            // on appelle la fonction RPC
            $m = str_replace('_', '.', $methodName);
            $r = xmlrpc_encode_request($m, $params,array('verbosity'=>'newlines_only'));
            $c = $this->_context;
            stream_context_set_option($c,'http','content',$r);
            $f = file_get_contents($this->_url,false,$c);
            $resp = xmlrpc_decode($f);
            return $resp;
        } else {
            // on appelle la fonction de l'objet
            call_user_method_array($methodName, $this,$params);
        }
    }

    private function registerMethod ($method) {
        $this->_methods[$method] = true;
    }

}
giunta dot gaetano at sea-aeroportimilano dot it 21-Aug-2006 03:54
Take care that this function will generate invalid xmlrpc content when invoked with certain parameters (said content will be happily parsed by the lib itself, but not by other implementations).

xmlrpc_encode_request(null, null)
will generate a response without a value

xmlrpc_encode_request('myfunc', array('faultCode' => 666, 'faultString' => 'hello world')
will generated a request containing a <fault> member instead of <params>
php at hendrik dash krauss dot de 28-May-2005 02:29
For examples / documentation of the array output_options, see http://xmlrpc-epi.sourceforge.net/main.php?t=php_api#output_options

In short, output_options lets you send compact xmlrpc (without all the "pretty whitespace" xmlrpc_encode adds normally), apply an own escaping table prior to sending, set the encoding, and a couple of other things (the page even says something about soap 1.1 ... I don't know details).
<URL:http://www.dlitz.net/go/contact/> 03-May-2004 11:28
Note that as far as I can tell, the &#10; characters generated by PHP in the base64 fields don't appear to violate the XML-RPC standard at all.  XML-RPC messages *are* in XML format, and as such, the XML entities should be getting decoded before being passed to a base64 decoder.  So, the previously-mentioned Jakarta-based XML-RPC server appears to violate the XML spec.  i.e. There's nothing here that needs to be "fixed" in PHP.
kelly at seankelly dot biz 28-Dec-2002 04:02
Binary strings (set with xmlrpc_set_type) go into a <base64>...</base64> block like you'd expect. But after every 80th character, this function inserts the XML entity "&#10;", which is a Unicode newline, as if to cause a line-wrap, which is admittedly silly.

Silly though it may be, it causes real problems for some XML-RPC servers, such as http://jakarta.apache.org/xmlrpc/ (nee Helma). Stripping out those entities with something like

$req = preg_replace('/&#10;/', '', xmlrpc_encode_request("my.method", $args));

works around the problem.
hfuecks at pinkgoblin dot com 15-Aug-2002 09:06
This function should be used by an XML-RPC client to create an XML payload for an XML-RPC request;

<?php
$params = "system.methodSignature";
$method = "system.methodHelp";
$request = xmlrpc_encode_request($method,$params);
echo ( $request );
?>

Produces;

<?xml version='1.0' encoding="iso-8859-1" ?>
<methodCall>
<methodName>system.methodHelp</methodName>
<params>
 <param>
  <value>
   <string>system.methodSignature</string>
  </value>
 </param>
</params>
</methodCall>

The second argument recognises the type of variable and generates the correct XML-RPC structure. See xmlrpc_encode() for more details.


PHP の値に関する xmlrpc 型を取得する

  • ≪ xmlrpc_encode_request
  • xmlrpc_is_fault ≫
  • PHP Manual
  • XML-RPC 関数
  • PHP の値に関する xmlrpc 型を取得する

xmlrpc_get_type

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_get_type — PHP の値に関する xmlrpc 型を取得する

説明

xmlrpc_get_type(mixed $value): string
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

この関数は特に base64 及び datetime 文字列で有用です。

パラメータ

value

PHP の値。

戻り値

XML-RPC の型を返します。

例

例1 XML-RPC の型の例

<?php
echo xmlrpc_get_type(null) . "\n"; // base64
echo xmlrpc_get_type(false) . "\n"; // boolean
echo xmlrpc_get_type(1) . "\n"; // int
echo xmlrpc_get_type(1.0) . "\n"; // double
echo xmlrpc_get_type("") . "\n"; // string
echo xmlrpc_get_type(array()) . "\n"; // array
echo xmlrpc_get_type(new stdClass) . "\n"; // array
echo xmlrpc_get_type(STDIN) . "\n"; // int
?>

参考

  • xmlrpc_set_type() - PHP 文字列型用に xmlrpc 型、base64 または datetime を設定する

User Contributed Notes

hfuecks at pinkgoblin dot com 16-Aug-2002 10:41
This function returns the type of a PHP variable in XML-RPC terms. It won't "spot" base64 or iso8601 types unless they have been defined using xmlrpc_set_type().

For iso8601 type it returns "datetime".

Otherwise it returns strings corresponding directly the XML-RPC data types e.g. "struct","int","string","base64" etc.


配列の値が XMLRPC の失敗であるかどうかを調べる

  • ≪ xmlrpc_get_type
  • xmlrpc_parse_method_descriptions ≫
  • PHP Manual
  • XML-RPC 関数
  • 配列の値が XMLRPC の失敗であるかどうかを調べる

xmlrpc_is_fault

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

xmlrpc_is_fault — 配列の値が XMLRPC の失敗であるかどうかを調べる

説明

xmlrpc_is_fault(array $arg): bool
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

パラメータ

arg

xmlrpc_decode() が返す配列。

戻り値

引数が失敗を表す場合に true、それ以外の場合に false を返します。 失敗の内容は $arg["faultString"]、失敗のコードは $arg["faultCode"] に格納されます。

例

xmlrpc_encode_request() の例を参照ください。

参考

  • xmlrpc_decode() - XML をネイティブな PHP 型にデコードする

User Contributed Notes

angelo at at dot com 25-Jan-2011 12:31
A note, response from xmlrpc_decode is not always an array. Whenever the XMLRPC server returns a string, xmlrpc_is_fault will complain about not being an array.

Best way to detect errors is

<?php

    $response = xmlrpc_decode($file);

    if (is_array($response) && xmlrpc_is_fault($response)) {
        throw new Exception($response['faultString'], $response['faultCode']);
    }

?>


XML を、メソッド説明のリストにデコードする

  • ≪ xmlrpc_is_fault
  • xmlrpc_server_add_introspection_data ≫
  • PHP Manual
  • XML-RPC 関数
  • XML を、メソッド説明のリストにデコードする

xmlrpc_parse_method_descriptions

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_parse_method_descriptions — XML を、メソッド説明のリストにデコードする

説明

xmlrpc_parse_method_descriptions(string $xml): array
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

giunta dot gaetano at gmail dot com 29-Dec-2020 05:05
The format for the xml string is the same that has to be returned by functions registered via calls to `xmlrpc_server_register_introspection_callback`.

It is documented at http://xmlrpc-epi.sourceforge.net/specs/rfc.system.describeMethods.php


introspection ドキュメントを追加する

  • ≪ xmlrpc_parse_method_descriptions
  • xmlrpc_server_call_method ≫
  • PHP Manual
  • XML-RPC 関数
  • introspection ドキュメントを追加する

xmlrpc_server_add_introspection_data

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_server_add_introspection_data — introspection ドキュメントを追加する

説明

xmlrpc_server_add_introspection_data(resource $server, array $desc): int
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

giunta dot gaetano at gmail dot com 29-Dec-2020 05:03
The format to be used for data in the $desc array is the same as returned by calls to function `xmlrpc_parse_method_descriptions`


XML リクエストをパースし、メソッドをコールする

  • ≪ xmlrpc_server_add_introspection_data
  • xmlrpc_server_create ≫
  • PHP Manual
  • XML-RPC 関数
  • XML リクエストをパースし、メソッドをコールする

xmlrpc_server_call_method

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_server_call_method — XML リクエストをパースし、メソッドをコールする

説明

xmlrpc_server_call_method(
resource $server,
string $xml,
mixed $user_data,
array $output_options = ?
): string
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

marco.buratto at tiscali punto it 28-Dec-2006 08:15
xmlrpc_server_call_method() with class methods

<?php
require_once ('Connections/adodb_mysql_connection.php');

// Instantiating my own class
$my_report = new external_report($db_connection);

// Setting up the XML-RPC "server"
$xmlrpc_server_handler = xmlrpc_server_create();
xmlrpc_server_register_method($xmlrpc_server_handler, "external_method", array(&$my_report, "export"));

// Creating XML return data
if ($response = xmlrpc_server_call_method($xmlrpc_server_handler, $HTTP_RAW_POST_DATA, null))
    {
    header('Content-Type: text/xml');
    echo $response;
    }

// **************** class definition ****************

class external_report
    {
    protected $db_connection;

    public function __construct($db_connection_pointer)
        {
        if (method_exists($db_connection_pointer, "Execute")) $this->db_connection = $db_connection_pointer;
        else die("...");
        }

    public function export($method_name, $params_array)
        {
        $id_dir = (int)$params_array[0];
        $id_usr = (int)$params_array[1]; // not used, just an example
        // We have to add arguments' validating code here and NOT inside the constructor (as usual)
        // because arguments are passed directly by xmlrpc_server_call_method (?!!)

        $myexport = array();

        $dirs_query = "SELECT documento_id FROM tabella_cartelle WHERE cartella_id = ".$id_dir;
        $dirs_result = $this->db_connection->Execute($dirs_query) or die("...");

        $index = 0;
        while(!$dirs_result->EOF)
            {
            $docs_query = "SELECT codice, titolo FROM tabella_documenti WHERE id_documento = ".$dirs_result->Fields('documento_id');
            $docs_result = $this->db_connection->Execute($docs_query) or die("...");

            $myexport[$index]['codice'] = $docs_result->Fields('codice');
            $myexport[$index]['titolo'] = $docs_result->Fields('titolo');

            $index++;
            $dirs_result->MoveNext();
            }

        return $myexport;
        }
    }
?>
nyvsld at gmail dot com 27-Nov-2005 05:08
<?php
/* method implementation */
function impl($method_name,$params,$user_data){
  var_dump(func_get_args('impl'));
  return array_sum($params);
}

/* create server */
$s=xmlrpc_server_create();
xmlrpc_server_register_method($s,'add','impl');

/* calling server method */
$req=xmlrpc_encode_request('add',array(1,2,3));
$resp=xmlrpc_server_call_method($s,$req,array(3,4));

/* process result */
$decoded=xmlrpc_decode($resp);
if(xmlrpc_is_fault($decoded)){
    echo 'fault!';
}

var_dump($decoded);
?>


xmlrpc サーバーを作成する

  • ≪ xmlrpc_server_call_method
  • xmlrpc_server_destroy ≫
  • PHP Manual
  • XML-RPC 関数
  • xmlrpc サーバーを作成する

xmlrpc_server_create

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_server_create — xmlrpc サーバーを作成する

説明

xmlrpc_server_create(): resource
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

There are no user contributed notes for this page.


サーバーリソースを破棄する

  • ≪ xmlrpc_server_create
  • xmlrpc_server_register_introspection_callback ≫
  • PHP Manual
  • XML-RPC 関数
  • サーバーリソースを破棄する

xmlrpc_server_destroy

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_server_destroy — サーバーリソースを破棄する

説明

xmlrpc_server_destroy(resource $server): bool
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

nospam at bigbadweb dot co dot uk 22-Nov-2005 02:26
This function returns true (1) if successful and false (0) if resource is invalid or could not be destroyed.


ドキュメントを生成する PHP 関数を登録する

  • ≪ xmlrpc_server_destroy
  • xmlrpc_server_register_method ≫
  • PHP Manual
  • XML-RPC 関数
  • ドキュメントを生成する PHP 関数を登録する

xmlrpc_server_register_introspection_callback

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_server_register_introspection_callback — ドキュメントを生成する PHP 関数を登録する

説明

xmlrpc_server_register_introspection_callback(resource $server, string $function): bool
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

ronadaassoc at gmail dot com 22-Oct-2022 05:51
<?xml version='1.0'?>
<introspection version='1.0'>
<methodList>
  <methodDescription name='introspection.hello'>
   <author>Dan Libby</author>
   <purpose>greets the caller and demonstrates use of introspection mechanism</purpose>
   <signatures>
    <signature>
     <params>
      <value type='string' name='name'>name of the caller</value>
     </params>
     <returns>
      <value type='string'>a greeting to the caller</value>
     </returns>
    </signature>
   </signatures>
   <see><item>system.listMethods</item></see>
   <examples/>
   <errors>
      <item>returns fault code 1 if the caller's name is not specified</item>
   </errors>
   <notes>
    <item>this is a lame example</item>
    <item>example of multiple notes</item>
   </notes>
   <bugs/>
   <todo/>
  </methodDescription>
</methodList>
</introspection>
giunta dot gaetano at gmail dot com 29-Dec-2020 01:58
The introspection callback function should return an XML string with the following format:

<?xml version='1.0'?>
<introspection version='1.0'>
 <methodList>
  <methodDescription name='introspection.hello'>
   <author>Dan Libby</author>
   <purpose>greets the caller and demonstrates use of introspection mechanism</purpose>
   <signatures>
    <signature>
     <params>
      <value type='string' name='name'>name of the caller</value>
     </params>
     <returns>
      <value type='string'>a greeting to the caller</value>
     </returns>
    </signature>
   </signatures>
   <see><item>system.listMethods</item></see>
   <examples/>
   <errors>
      <item>returns fault code 1 if the caller's name is not specified</item>
   </errors>
   <notes>
    <item>this is a lame example</item>
    <item>example of multiple notes</item>
   </notes>
   <bugs/>
   <todo/>
  </methodDescription>
 </methodList>
</introspection>


メソッド名が一致するメソッドリソースに PHP 関数を登録する

  • ≪ xmlrpc_server_register_introspection_callback
  • xmlrpc_set_type ≫
  • PHP Manual
  • XML-RPC 関数
  • メソッド名が一致するメソッドリソースに PHP 関数を登録する

xmlrpc_server_register_method

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_server_register_method — メソッド名が一致するメソッドリソースに PHP 関数を登録する

説明

xmlrpc_server_register_method(resource $server, string $method_name, string $function): bool
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

User Contributed Notes

giunta dot gaetano at gmail dot com 30-Dec-2020 09:02
Note 1: even if you add introspection data via calls to `xmlrpc_server_register_introspection_callback` or `xmlrpc_server_add_introspection_data`, the server will not validate for you the number or type of received parameters.
This means that you have to implement all required validation of the received parameters in your php function.

Note 2: take care about dealing with base64 and datetime values in the received parameters: those are not automatically transformed into php scalar values, but into stdClass objects with members `xmlrpc_type` and `scalar`
giunta dot gaetano at sea-aeroportimilano dot it 11-Aug-2006 06:55
To have an xmlrpc fault response programatically generated by the server, the php function registered as method handler must return an array containing a FaultCode and a FaultString members.

function $myfunc($methodname, $vals, $extra_data)
{
...
return array('faultCode' => 666, 'faultString' => 'DOH!');
}
nyvsld at gmail dot com 27-Nov-2005 05:03
prototype of registered function:

function method_impl(string $method_name, array $params, array $user_data);

$method_name
    the public method name, known by calling client
$params
    parameters specified by calling client
$user_data
    any local data, passed by `xmlrpc_server_call_method'
dante at lorenso dot com 11-Aug-2005 12:46
To register a callback to a 'static' function within the same class, consider a syntax like the following:
<code>
$callback = array (__CLASS__, "my_function_name");
xmlrpc_server_register_method($xmlrpc_server, "my_function", $callback);
</code>
Doing it this way makes it easier to rename your class later.
eiriks at hollowmatrix dot com 28-Mar-2005 03:08
Remember that you can't do like Chrigu and Nate said if you want to add methods from a static class (Hence you can't create any instances of it).
A workaround is to create lambda functions calling the
methods:

// Our static handler class
static class MyHandler
{
    public function getPrice($item)
    {
        $prices = array("apple" => 4, "orange" => 5);
        return $prices[$item];
    }
    public function buy($item, $number)
    {
        $price = self::getPrice($item) * $number;
        do_thing_to_sell_the_item();
        return $price;
    }
}

// Use reflection to get method names and parameters
$mirror = new ReflectionClass("MyHandler");
foreach ($mirror->getMethods() as $method)
{
    // Create new "lambda" function for each method

    // Generate argument list
    $args = array();
    foreach ($method->getParameters() as $param)
    {
        $args[] = '$'.$param->getName();
    }
    $args = implode(',', $args);

    // Generate code
    $methodname = $method->getName();
    $code = "return {$real_class}::{$methodname}({$args});";

    // Create function, retrieve function name
    $function_name = create_function($args, $code);

    // Register the function
    xmlrpc_server_register_method($myserver, $methodname, $function_name);
}
Nate Parsons 29-Apr-2003 03:12
In case its not completely obvious what Chrigu meant,

You can register a method inside your class by doing the following:

xml_rpc_server_register_methode($xmlrpc_server, "myClientCall", array(&$this, "handleClientCallFunc"));

where $this == the magic class $this. =)
18-Nov-2002 10:40
Here is an example how to register a class methode:

xml_rpc_server_register_methode($xmlrpc_server, "foo", array(&$bar, "foo_func"));

where $bar is the instance of your class and foo_func a methode of this class. Don't forget the '&'!

hope this may be useful...

Chrigu


PHP 文字列型用に xmlrpc 型、base64 または datetime を設定する

  • ≪ xmlrpc_server_register_method
  • Windows 用のモジュール ≫
  • PHP Manual
  • XML-RPC 関数
  • PHP 文字列型用に xmlrpc 型、base64 または datetime を設定する

xmlrpc_set_type

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_set_type — PHP 文字列型用に xmlrpc 型、base64 または datetime を設定する

説明

xmlrpc_set_type(string &$value, string $type): bool

PHP の文字列用の xmlrpc 型を、base64 あるいは datetime に設定します。

警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

パラメータ

value

型を設定する値。

type

'base64' あるいは 'datetime'。

戻り値

成功した場合に true を、失敗した場合に false を返します。 成功した場合、value はオブジェクト型に変換されます。

エラー / 例外

XMLRPC がサポートしていない型を指定した場合は E_WARNING が発生します。

例

例1 xmlrpc_set_type() の例

<?php

$params = date("Ymd\TH:i:s", time());
xmlrpc_set_type($params, 'datetime');
echo xmlrpc_encode($params);

?>

上の例の出力は、 たとえば以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
 <value>
  <dateTime.iso8601>20090322T23:43:03</dateTime.iso8601>
 </value>
</param>
</params>

User Contributed Notes

bmatheny at mobocracy dot net 24-Mar-2006 03:08
The following code segfaults some older (pre 5.1.2) versions of PHP:

$foo = date('c', time());
xmlrpc_set_type($foo, 'datetime');

Please upgrade before reporting as a bug.
shem((at))etkDOTca [aka.Przemyslaw Szot] 30-Oct-2004 02:23
Once you use the xmlrpc_set_type function, the data is encoded into a PHP object.  In your XMLRPC server, in order to access the data you must be able to access the necessary part of the object.

So.. to expend on the example above:

<---------- CLIENT ---------->
$string = "My logging event.";
$date = "20030115T12:22:37"; // Must be this format
$binary = fread($fp, 128);
xmlrpc_set_type(&$date, "datetime");
xmlrpc_set_type(&$binary, "base64");
$xmlrpcReq = xmlrpc_encode_request("log.data", array($string, $date, $binary));

In order to retrieve the binary file data you would need to get the scalar portion of the object:

<---------- SERVER ------------>
$string=$params[0];
$date_obj=$params[1];
$binary_obj=$params[2];

$date=$date_obj->scalar;
$binary_data=$binary_obj->scalar;

// Then you can proceed to write the binary
fwrite($handle,$binary_data);
kelly at seankelly dot biz 28-Dec-2002 07:53
The problem is that PHP has a string type which is also used to hold binary data and dates.  But XML-RPC defines three separate types for strings, binary data, and dates.  How do you tell how you want strings encoded?  That's where this function comes in.

Suppose the XML-RPC method "log.data" took a string, a date, and a binary object.  To tell XML-RPC that the date (which is a PHP string) is a really a date and that the binary data (which is also a PHP string) is really binary data, try:

$string = "My logging event.";
$date = "20030115T12:22:37"; // Must be this format
$binary = fread($fp, 128);
xmlrpc_set_type(&$date, "datetime");
xmlrpc_set_type(&$binary, "base64");
$xmlrpcReq = xmlrpc_encode_request("log.data", array($string, $date, $binary));

Note the reference passing in the calls to xmlrpc_set_type; that enables the function to change the values from strings into what xmlrpc_encode/_request expects (which are objects that include a bonus field that tells the desired XML-RPC type).


Windows 用のモジュール

  • COM — COM および .Net (Windows)
    • はじめに
    • インストール/設定
    • 定義済み定数
    • エラーおよびエラー処理
    • 例
    • com — com クラス
    • dotnet — dotnet クラス
    • variant — variant クラス
    • COMPersistHelper — COMPersistHelper クラス
    • com_exception — com_exception クラス
    • com_safearray_proxy — com_safearray_proxy クラス
    • COM関数
  • win32service
    • はじめに
    • インストール/設定
    • 定義済み定数
    • Win32ServiceException — The Win32ServiceException class
    • 例
    • win32service 関数

User Contributed Notes

There are no user contributed notes for this page.


COM および .Net (Windows)

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • 実行時設定
  • 定義済み定数
  • エラーおよびエラー処理
  • 例
    • For Each
    • 配列と配列形式の COM プロパティ
  • com — com クラス
    • com::__construct — com クラスのコンストラクタ
  • dotnet — dotnet クラス
    • dotnet::__construct — dotnet クラスのコンストラクタ
  • variant — variant クラス
    • variant::__construct — variant クラスのコンストラクタ
  • COMPersistHelper — COMPersistHelper クラス
    • COMPersistHelper::__construct — COMPersistHelper オブジェクトを構築する
    • COMPersistHelper::GetCurFileName — 現在のファイル名を取得する
    • COMPersistHelper::GetMaxStreamSize — ストリームのサイズの最大値を取得する
    • COMPersistHelper::InitNew — オブジェクトをデフォルトの状態に初期化する
    • COMPersistHelper::LoadFromFile — オブジェクトをファイルから読み込む
    • COMPersistHelper::LoadFromStream — ストリームからオブジェクトを読み込む
    • COMPersistHelper::SaveToFile — オブジェクトをファイルに保存する
    • COMPersistHelper::SaveToStream — オブジェクトをストリームに保存する
  • com_exception — com_exception クラス
  • com_safearray_proxy — com_safearray_proxy クラス
  • COM関数
    • com_create_guid — グローバルユニーク ID (GUID) を生成する
    • com_event_sink — COM オブジェクトのイベントを PHP オブジェクトに接続する
    • com_get_active_object — すでに実行中の COM オブジェクトのインスタンスへのハンドルを返す
    • com_load_typelib — タイプライブラリを読み込む
    • com_message_pump — COM メッセージを処理し、timeoutms ミリ秒の間待つ
    • com_print_typeinfo — ディスパッチインターフェイスのために、PHP のクラス定義を出力する
    • variant_abs — variant の絶対値を返す
    • variant_add — 2 つの variant 値を「加算」し、結果を返す
    • variant_and — 2 つの variant の論理積を計算し、結果を返す
    • variant_cast — variant を、別の型の新しい variant に変換する
    • variant_cat — 2 つの variant 値を連結し、その結果を返す
    • variant_cmp — 2 つの variant を比較する
    • variant_date_from_timestamp — Unix タイムスタンプを、日付形式の variant で返す
    • variant_date_to_timestamp — 日付/時刻の variant 値を Unix タイムスタンプに変換する
    • variant_div — 2 つの variant の除算結果を返す
    • variant_eqv — 2 つの variant のビット値が等しいかどうかを調べる
    • variant_fix — variant の整数部を返す
    • variant_get_type — variant オブジェクトの型を返す
    • variant_idiv — variants を整数に変換し、除算の結果を返す
    • variant_imp — 2 つの variant のビット implication を行う
    • variant_int — variant の整数部を返す
    • variant_mod — 2 つの variant の除算を行い、剰余を返す
    • variant_mul — 2 つの variant の乗算を行い、その結果を返す
    • variant_neg — variant の論理否定演算を行う
    • variant_not — variant のビット否定演算を行う
    • variant_or — 2 つの variant の論理和を計算する
    • variant_pow — 2 つの variant の累乗計算を行い、その結果を返す
    • variant_round — 指定した桁で variant を丸める
    • variant_set — variant オブジェクトに新しい値を代入する
    • variant_set_type — variant を「その場で」別の型に変換する
    • variant_sub — 左の variant から右の variant を引き、その結果を返す
    • variant_xor — 2 つの variant の排他的論理和を計算する

User Contributed Notes

robert dot johnson at icap dot com 24-Jul-2012 09:30
(From?) PHP 5.4.5 for Windows:

If you are seeing this in your error log:

Fatal error:  Class 'COM' not found

You require this in php.ini:

[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

Previously it was compiled as built-in on the Windows build.  I assume this has happened because the com extension can now be built as a shared component.
Anonymous 23-Sep-2009 05:00
Add hyperlink at a Word Document's bookmark

<?php
// Create COM instance to word
       function clsMSWord($Visible = false)
       {
           $this->handle = new COM("word.application") or die("Unable to instanciate Word");
           $this->handle->Visible = $Visible;
       }

function WriteHyperlink($Bookmark,$Path,$Text)
       {
               $objBookmark = $this->handle->ActiveDocument->Bookmarks($Bookmark);
               $range = $objBookmark->Range;
               $objHyperlink = $this->handle->ActiveDocument->Hyperlinks;
               $objHyperlink->add($range,$Path,"","",$Text);

       }
?>
Dave Bachtel 27-May-2009 02:20
Hello everybody!

Here is some helpful advice for people attempting to use COM with Microsoft MapPoint 2006 or 2009 with PHP.

If you are using apache, it MUST be running under the same credentials as a desktop user that has already installed/run mappoint or modifiy the service and select the "Allow Service to Interact with Desktop" option.  Otherwise, it won't work due to the EULA popup having to be accepted.  Mappoint 2004 works just fine, this only applies to 2006 and 2009.

For troubleshooting, the error that appears in the System event viewer is:
The server {31851F82-AFE6-11D2-A3C9-00C04F72F340} did not register with DCOM within the required timeout.

The error generated by PHP, if you happen to get lucky and let the COM() function timeout by cranking up set_time_limit() timeout is:
<?php

set_time_limit(1000) ;

$mapoint =  new COM("MapPoint.Application") or die("Unable to instantiate Mappoint COM object");

?>
Generates:
Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `MapPoint.Application': Server execution failed ' in [somefile.php]:9 Stack trace: #0 [somefile.php](9): com->com('MapPoint.Applic...') #1 {main} thrown in [somefile.php] on line 9

Also, if you have multiple versions of MapPoint installed, you will need to run:
c:\path\to\mappoint\MapPoint.exe /registerserver

(using the correct folder path) to select the right version of the com object to use.  Gooood luck!
acsandeep at gmail dot com 04-Apr-2009 09:40
If you are trying to get the properties of a Word document opened via COM object, you may need to define some constants in your script like so.

<?php
define('wdPropertyTitle', 1);
define('wdPropertySubject', 2);
define('wdPropertyAuthor', 3);
define('wdPropertyKeywords', 4);
define('wdPropertyComments', 5);
define('wdPropertyTemplate', 6);
define('wdPropertyLastAuthor', 7);

$word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath("Sample.doc"));
$Author = $word->ActiveDocument->BuiltInDocumentProperties(wdPropertyAuthor);

echo $Author;
?>
long2hu3 ATT yahoo DOTT com 18-Mar-2009 04:38
When you work with MS Excel, Word, ... and other applications, never forget that COM doesn't know their predefined constants, thus if you want to do sth. that would look like this in VB:

With myRange.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With

you should either use numbers or define constants above, like this:

<?php

define('xlEdgeBottom', 9);
define('xlContinuous', 1);
define('xlThin', 2);
define('xlAutomatic', -4105);

$ex = new COM("Excel.Application", NULL, CP_UTF8) or Die ("Did not instantiate Excel");
$wb = $ex->Application->Workbooks->Add();
$ws = $wb->Worksheets(1);

$xra = $ws->Range("A1:A6");

$bs = $xra->Borders(xlEdgeBottom);
$bs->LineStyle = xlContinuous;
$bs->Weight = xlThin;
$bs->ColorIndex = xlAutomatic;

?>

It is pointless to try to use text strings, i.e.

<?php

$bs = $xra->Borders('xlEdgeBottom');
$bs->Weight = 'xlThin';

?>

this will cause an error: Unable to set property Weight of class Border ...
ilayansmano at gmail dot com 26-Aug-2008 01:39
Extracting text from Word Documents via PHP and COM

<?php
$word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath("Sample.doc"));

// Extract content.
$content = (string) $word->ActiveDocument->Content;

echo $content;

$word->ActiveDocument->Close(false);

$word->Quit();
$word = null;
unset($word);
?>


はじめに

COM は Component Object Model の略語であり、 DCE RPC (オープンスタンダード) の最上位のオブジェクト指向レイヤーです。 COM はコール手順を共通化し、あらゆる言語でコードを記述し、 (COM に対応した)他の言語で書かれたコードをコール、相互運用することを可能にします。 あらゆる言語で書くことを可能にするだけではなく、 同じ実行形式の一部となることすら不要です。 コードは、同じマシンで実行される他のプロセスのコードである DLL からロードしたり、 または、リモートマシン上の他のプロセスにあるコードを DCOM (分散 COM) で 利用することができます。 この場合、コードの中では、コンポーネントの存在する場所を意識する必要はありません。

OLE オートメーションと呼ばれる COM のサブセットがあります。 これは、COM オブジェクトに疎な結合を行うことができる COM インターフェイスを 提供します。これにより、コンパイル時にオブジェクトの動作を知ることなく、 実行時にコールを行うことができるようになります。 PHP COM 拡張モジュールは、OLE オートメーションを使用して スクリプトから互換性のあるオブジェクトを作成/コールすることができます。 技術的に述べると、 全ての COM オブジェクトが OLE 互換であるというわけではないため、 実際には、この拡張モジュールは "PHP の OLE オートメーション 拡張モジュール" と呼ばれるべきものです。

ところで、なぜ COM を使用する必要があるのでしょう? COM は、 Windows 環境でアプリケーションとコンポーネントを結び付ける代表的な手法の一つで、 COM を使用して Microsoft Word を起動し、 ドキュメントテンプレートを埋めて、Word 文書として結果を保存し、Web サイトの 訪問者に送信することができます。 また COM を使用して、ネットワークの管理タスクを処理したり IIS を設定したりすることができます。これらは最も一般的な使用法にすぎません。 COM でできることはまだまだたくさんあります。

さらに Microsoft により提供された COM との相互運用レイヤーを用いて .Net アセンブリのインスタンス化と生成をサポートしました。

User Contributed Notes

There are no user contributed notes for this page.


要件

COM 関数は、Windows 版の PHP でのみ利用可能です。

.Net サポートには .Net ランタイムが必要です。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

これらの関数を使うには、php_com_dotnet.dll を php.ini で有効にしておく必要があります。

使いたい COM オブジェクト (MS Word など) は別途インストールしておかないといけません。 そういった COM オブジェクトは PHP にバンドルされていませんし、 そもそもバンドルできません。

User Contributed Notes

There are no user contributed notes for this page.


実行時設定

php.ini の設定により動作が変化します。

COM 設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
com.allow_dcom | "0" | INI_SYSTEM |
com.autoregister_typelib | "0" | INI_ALL |
com.autoregister_verbose | "0" | INI_ALL |
com.autoregister_casesensitive | "1" | INI_ALL |
com.code_page | "" | INI_ALL |
com.dotnet_version | "" | INI_SYSTEM | PHP 8.0.0 以降で利用可能
com.typelib_file | "" | INI_SYSTEM |
INI_* モードの詳細および定義については どこで設定を行うのか を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

com.allow_dcom

これを on にすると、PHP が D-COM (分散 COM) クライアントとして動作することを許可し、 PHP スクリプトがリモートサーバー上に COM オブジェクトを生成することを 許可します。

com.autoregister_typelib

これを on にすると、 生成した COMオブジェクトのタイプライブラリから取得した 定数を PHP に登録しようと試みます。ただし、それはオブジェクトが 当該情報を取得するためのインターフェイスを提供している場合のみです。 登録する定数の大文字小文字を区別するかどうかについては、 com.autoregister_casesensitive php.ini 設定ディレクティブで制御します。

com.autoregister_verbose

これを on にすると、オブジェクト生成時のタイプライブラリの読み込み中に 発生したすべての問題が PHP のエラー機構を用いて報告されます。 デフォルトは off で、この場合はタイプライブラリの検索や読み込みの際の エラーは一切報告されません。

com.autoregister_casesensitive

これを on にすると (デフォルト)、 COMオブジェクトをインスタンス化中に自動読み込みされた タイプライブラリ中に見つかった定数が、大文字小文字を区別して 登録されます。詳細は com_load_typelib() を参照ください。

com.code_page

これは、COM オブジェクトとの文字列の受け渡しに使用するデフォルトの 文字セットコードページを制御します。空の文字列が設定された場合、 PHP は CP_ACP が指定されたと仮定します。 これは、デフォルトのシステム ANSI コードページです。

スクリプト中のテキストがデフォルトとは異なるエンコーディング/ 文字セットを使用している場合、このディレクティブを設定することで com クラスのコンストラクタのパラメータとして コードページを指定する必要がなくなります。 (他の PHP 設定ディレクティブとともに) このディレクティブを使用すると、 PHP スクリプトの移植可能性が悪くなることに注意しましょう。 できる限り、COM のコンストラクタにパラメータを指定する方式をとるべきです。

com.dotnet_version

dotnet オブジェクトが使う、.NET framework のバージョン。 この値は、framework のバージョン番号のうち、ドットで区切られた最初の3つの部分で、 v が先頭に付きます。たとえば v4.0.30319 のようなものです。

com.typelib_file

このパラメータでは、起動時に読み込まれるタイプライブラリの一覧を 含むファイルへのパスを保持します。このファイル内の各行が タイプライブラリ名として扱われ、com_load_typelib() をコールした際にそれが読み込まれます。登録された定数は永続的に 保持されるので、ライブラリの読み込みは一度だけでよくなります。 タイプライブラリの名前が #cis あるいは #case_insensitive で終わる場合は、そのライブラリから 読み込まれた定数は大文字小文字を区別せずに登録されます。

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

COM 定数
定数 | 説明 | 備考
CLSCTX_INPROC_SERVER (int) | このクラスのコードを作成および管理するコードは DLL で、 クラスのコンテキストを指定する呼び出し元の関数と同じプロセスで動きます。 |
CLSCTX_INPROC_HANDLER (int) | このクラスのオブジェクトを管理するコードはプロセス内ハンドラです。 これは DLL で、クライアントプロセスで動きます。 クラスのインスタンスがリモートでアクセスされるときに、 このクラスのクライアント側の構造を実装します。 |
CLSCTX_LOCAL_SERVER (int) | このクラスのオブジェクトを作成および管理する EXE コードで、 同じマシンで動きますが別のプロセス空間にロードされます。 |
CLSCTX_REMOTE_SERVER (int) | リモートコンテキスト。 このクラスのオブジェクトを作成および管理するコードは、別のコンピュータで動きます。 |
CLSCTX_SERVER (int) | プロセス内、ローカル、リモートのすべてのサーバーコードを表します。 CLSCTX_INPROC_SERVER、 CLSCTX_LOCAL_SERVER および CLSCTX_REMOTE_SERVER を OR で連結したものです。 |
CLSCTX_ALL (int) | すべてのクラスコンテキストを表します。 CLSCTX_INPROC_HANDLER と CLSCTX_SERVER を OR で連結したものです。 |
VT_NULL (int) | NULL ポインタへの参照。 |
VT_EMPTY (int) | 型インジケータが VT_EMPTY であるプロパティには、 何もデータが関連づけられていません。つまり、この値のサイズはゼロです。 |
VT_INT (int) | 4 バイト符号つき整数値 (VT_I4 と同じ)。 |
VT_I1 (int) | 1 バイト符号つき整数値。 |
VT_I2 (int) | 2 バイト符号つき整数値。 |
VT_I4 (int) | 4 バイト符号つき整数値。 |
VT_I8 (int) | 8 バイト符号つき整数値。 | x64 のみ
VT_UINT (int) | 4 バイト符号なし整数値 (VT_I4 と同じ)。 |
VT_UI1 (int) | 1 バイト符号なし整数値。 |
VT_UI2 (int) | 2 バイト符号なし整数値。 |
VT_UI4 (int) | 4 バイト符号なし整数値。 |
VT_UI8 (int) | 8 バイト符号なし整数値。 | x64 のみ
VT_R4 (int) | 32 ビット IEEE 浮動小数点値。 |
VT_R8 (int) | 64 ビット IEEE 浮動小数点値。 |
VT_BOOL (int) | Boolean 値。 |
VT_ERROR (int) | エラーコード。エラーに関連づけられたステータスコードです。 |
VT_CY (int) | 8 バイト整数値をふたつつなげたもの (スケールは 10,000)。 |
VT_DATE (int) | 64 ビット浮動小数点値で、December 31, 1899 からの経過日数 (秒ではありません) を表します。たとえば January 1, 1900 は 2.0、 January 2, 1900 は 3.0 のようになります。 格納されるときは VT_R8 と同じ形式になります。 |
VT_BSTR (int) | Null 終端の Unicode 文字列へのポインタ。 |
VT_DECIMAL (int) | 十進型。 |
VT_UNKNOWN (int) | IUnknown インターフェイスを実装したオブジェクトへのポインタ。 |
VT_DISPATCH (int) | 指定したオブジェクトへのポインタのポインタ。 |
VT_VARIANT (int) | 対応する値を表す型インジケータ。 VT_VARIANT を使うのは、 VT_BYREF と組み合わせる場合のみです。 |
VT_ARRAY (int) | 型インジケータを VT_ARRAY と OR 演算子で組み合わせると、 その値は SAFEARRAY へのポインタとなります。 VT_ARRAY は、次のデータ型と OR で連結可能です。 VT_I1, VT_UI1, VT_I2, VT_UI2, VT_I4, VT_UI4, VT_INT, VT_UINT, VT_R4, VT_R8, VT_BOOL, VT_DECIMAL, VT_ERROR, VT_CY, VT_DATE, VT_BSTR, VT_DISPATCH, VT_UNKNOWN および VT_VARIANT. |
VT_BYREF (int) | 型インジケータを VT_BYREF と OR 演算子で組み合わせると、 その値は参照となります。参照型はデータへの参照として扱われます。 C++ における参照型と同じです。 |
CP_ACP (int) | ANSI コードページのデフォルト。 |
CP_MACCP (int) | Macintosh コードページ。 |
CP_OEMCP (int) | OEM コードページのデフォルト。 |
CP_UTF7 (int) | Unicode (UTF-7)。 |
CP_UTF8 (int) | Unicode (UTF-8)。 |
CP_SYMBOL (int) | SYMBOL 変換。 |
CP_THREAD_ACP (int) | 現在のスレッドの ANSI コードページ。 |
VARCMP_LT (int) | 左の bstr のほうが右の bstr より小さい。 |
VARCMP_EQ (int) | ふたつのパラメータが等しい。 |
VARCMP_GT (int) | 左の bstr のほうが右の bstr より大きい。 |
VARCMP_NULL (int) | 両方の式が NULL である。 |
NORM_IGNORECASE (int) | 大文字小文字を区別しない。 |
NORM_IGNORENONSPACE (int) | 空白文字以外を無視する。 |
NORM_IGNORESYMBOLS (int) | 記号を無視する。 |
NORM_IGNOREWIDTH (int) | 文字幅を無視する。 |
NORM_IGNOREKANATYPE (int) | カナの型を無視する。 |
NORM_IGNOREKASHIDA (int) | アラビア語の kashida 文字を無視する。 | 使えるかどうかは、元となるライブラリに依存します。
DISP_E_DIVBYZERO (int) | ゼロ除算エラー。 |
DISP_E_OVERFLOW (int) | 期待する形式で値を表すことができないことを意味するエラー。 |
DISP_E_BADINDEX (int) | -2147352565 | 配列のインデックスが存在しないことを意味するエラー。 | PHP 7.0.0 以降、x64 における値は 2147614731 です。
DISP_E_PARAMNOTFOUND (int) | パラメータのIDのうちのひとつが、 メソッドのパラメータに関連付けられていない戻り値であることを示します。 |
MK_E_UNAVAILABLE (int) | iMoniker COM ステータスコード。 その関数が使えないことを表します。 |
LOCALE_NEUTRAL (int) | ニュートラルロケール。 一般的に、この定数は NLS のAPIを呼び出すのに使いません。 代わりに、LOCALE_SYSTEM_DEFAULT を使って下さい。 |
LOCALE_SYSTEM_DEFAULT (int) | オペレーティングシステムのデフォルトのロケール |

User Contributed Notes

There are no user contributed notes for this page.


エラーおよびエラー処理

COM から致命的なエラーが報告された場合、この拡張モジュールは com_exception クラスのインスタンスをスローします。 すべての COM 例外は code という定義済みの プロパティを保持しており、これは COM 操作が返す HRESULT 値に対応します。 プログラム上での例外の処理方法を決定するために、この値を使用する ことができます。

User Contributed Notes

There are no user contributed notes for this page.


例

目次

  • For Each
  • 配列と配列形式の COM プロパティ

User Contributed Notes

There are no user contributed notes for this page.


For Each

標準的な COM/OLE IEnumVariant の内容について、 PHP の foreach 命令を使用した反復処理を行うことができます。分かりやすく言うと、 これは、VB/ASP のコードで For Each を使用できる場所には foreach を使用できるということを意味します。

例1 ASP における For Each

<%
Set domainObject = GetObject("WinNT://Domain")
For Each obj in domainObject
  Response.Write obj.Name & "<br />"
Next
%>

例2 PHP 5 における foreach

<?php
$domainObject = new COM("WinNT://Domain");
foreach ($domainObject as $obj) {
echo $obj->Name . "<br />";
}
?>

User Contributed Notes

There are no user contributed notes for this page.


配列と配列形式の COM プロパティ

多くの COM オブジェクトは、プロパティを配列で公開したり 配列形式を使用してアクセスできるようにしています。

以下のことができます:

  • 多次元配列・複数パラメータを要求する COM プロパティへの PHP の配列構文を使用したアクセス。 書き込みやプロパティの設定にもこの技法が使用可能です。

  • foreach 制御構造を使用した SafeArrays ("真の" 配列) の値の取得。SafeArrays が自分自身の サイズについての情報を含んでいることからこれが可能となります。 配列形式のプロパティが IEnumVariant を実装している場合は、その プロパティに対しても foreach が使用可能です。この項目についての 詳細な情報は、For Each をごらんください。

User Contributed Notes

There are no user contributed notes for this page.


com クラス

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

はじめに

com クラスにより、OLE 互換の COM オブジェクトのインスタンスを作成し、 そのメソッドをコールしたりそのプロパティにアクセスしたりすることが 可能となります。

クラス概要

class com extends variant {
/* メソッド */
public __construct(
string $module_name,
array|string|null $server_name = null,
int $codepage = CP_ACP,
string $typelib = ""
)
}

Overloaded Methods

返されるオブジェクトは、オーバーロードされたものです。つまり、 PHP 側では通常のクラスのメソッドは見えないということです。 その代わりに、プロパティやメソッドへのアクセスは COM を通じて行います。

参照渡しのパラメータを受け付けるメソッドを PHP が 自動検出するようになりました。それらのメソッドについては、PHP が自動的に 変数を参照渡し形式に変換します。つまり、メソッドのコールをより自然に 行えるということです。コードの中で特別な処理をする必要はありません。

com の例

例1 com の例 (1)

<?php
// word を起動します
$word = new com("word.application") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}\n";

// 前面に移動させます
$word->Visible = 1;

// 空のドキュメントを開きます
$word->Documents->Add();

// 何か複雑なことを行います
$word->Selection->TypeText("This is a test...");
$word->Documents[1]->SaveAs("Useless test.doc");

// word を閉じます
$word->Quit();

// オブジェクトを開放します
$word = null;

?>

例2 com の例 (2)

<?php

$conn = new com("ADODB.Connection") or die("Cannot start ADO");
$conn->Open("Provider=SQLOLEDB; Data Source=localhost;
Initial Catalog=database; User ID=user; Password=password");

$rs = $conn->Execute("SELECT * FROM sometable"); // Recordset

$num_columns = $rs->Fields->Count();
echo $num_columns . "\n";

for ($i=0; $i < $num_columns; $i++) {
$fld[$i] = $rs->Fields($i);
}

$rowcount = 0;
while (!$rs->EOF) {
for ($i=0; $i < $num_columns; $i++) {
echo $fld[$i]->value . "\t";
}
echo "\n";
$rowcount++; // increments rowcount
$rs->MoveNext();
}

$rs->Close();
$conn->Close();

$rs = null;
$conn = null;

?>

目次

  • com::__construct — com クラスのコンストラクタ

User Contributed Notes

info at ensostudio dot ru 26-Jul-2020 09:52
Complete example of using WScript.Shell:
<?php
/**
  * Methods & properties
  * @link https://msdn.microsoft.com/en-us/library/2f38xsxe(v=vs.84).aspx
  */
$shell = new com('WScript.Shell', null, CP_UTF8);
var_dump($shell->CurrentDirectory);
foreach ($shell->Environment as $value) {
    var_dump($value);
}
// check file 'Test.php'
$process = $shell->Exec('.../php.exe --syntax-check --file=".../src/Test.php"');
// wait complete: 1 - done
while (! $process->Status) {
    usleep(5000);
}
// results: -1 - syntax error, 0 - no error
var_dump($process->ExitCode);
// show responce
var_dump($process->StdOut->ReadAll());
// show errors
var_dump($process->StdErr->ReadAll());
?>
Danil_lll 14-Aug-2018 10:14
Hello. There is a code c# which works with the COM-library (written on C++) - hybrid.dll.
I need to rewrite this code from C# to PHP (that is connect the COM-library to the PHP code)

Here is the function that is called inside C#:
Gr = HybridLib.Hybrid_Color.GREEN;

And here is the list of "Hybrid_Color"which in the library:
enum Hybrid_Color
{
    GREEN = 0x00000001,
    BLACK = 0x00000002,
    BLUE = 0x00000004,
};

The library itself was launched in PHP:
$PHP_Lib = new COM("HybridLib.Hybrid");

Can not assign value:
$gr = $PHP_Lib -> ..... ?????

What I write next, I don't know...
Tell me, please, who knows...
IceNV 13-Dec-2016 02:17
Under PHP7(.x) 64-bit, there is a documentation error (on the MSDN side, already reported) causing problems if you try to manipulate the registry (StdRegProv) through COM.

Indeed, MSDN reports that the registry hive/root must be reported as a uint32, which means that, in PHP 64-bit, one would create a new Variant($root,VT_UI4).

This would throw a type mismatch error.
It seems internally and contrary to what MSDN says (as of now, 2016-12-13), the root parameter must actually be passed as an int32.

So you have to :
1. convert your root number to a negative int to avoid out-of-bounds exceptions when creating the variant below (basically the integer being >= 2^31, you have to wrap it around the 32-bit signed integer maximum yourself) ;
2. create a new Variant($root,VT_I4) ;
3. pass that Variant to your COM API call.

This did not happen before PHP 7.0 as it always used VT_I4 internally before (see https://bugs.php.net/bug.php?id=73605), but now it respects (and is right to do so) the real integer length, so without an explicit conversion, PHP7 would now output a VT_I8 on x64, versus VT_I4 for PHP5.
juan156_elias at gmail dot com 08-Nov-2015 03:22
This is an example of using .Net using the NetPhp library that is based on the COM/DOTNET classes.

You can use any .dll file,  wether it is or not COM decorated and any of the .Net framework types out of the box. You can also target any version of the .Net framework.

<?php

$runtime = new \NetPhp\Core\NetPhpRuntime('COM', 'netutilities.NetPhpRuntime');

// Add both SpreadsheetLight and the OpenXML it depends on.
$runtime->RegisterAssemblyFromFile('/binaries/SpreadsheetLight.dll', 'SpreadsheetLight');
$runtime->RegisterAssemblyFromFile('/binaries/DocumentFormat.OpenXml.dll', 'DocumentFormat.OpenXml');
$runtime->RegisterAssemblyFromFile('/binaries/AjaxMin.dll', 'AjaxMin');

// Using the FullName of a type that belongs to an assembly that has already been registered.
$datetime = $runtime->TypeFromName("System.DateTime");

// Using the FullName of a type that has not been registered yet (from a file)
$minifier = $runtime->TypeFromFile("Microsoft.Ajax.Utilities.Minifier", APPLICATION_ROOT . '/binaries/AjaxMin.dll');

// Using the FullName of a type that has not been registered yet (autodiscoverable)
$datetime2 = $runtime->TypeFromAssembly("System.DateTime", "mscorlib, ....");

$datetime->Instantiate();
echo $datetime->ToShortDateString()->Val(); // Outputs 01/01/0001

// We can only use Int32 from native PHP, so parse
// an Int64 that is equivalent to (long) in the DateTime constructor.
$ticks = $runtime->TypeFromName("System.Int64")->Parse('98566569856565656');

$datetime->Instantiate($ticks);
echo $datetime->ToShortDateString()->Val(); // Outputs 07/05/0313

// We can only use Int32 from native PHP, so parse
// an Int64 that is equivalent to (long) in the DateTime constructor.
$ticks = $runtime->TypeFromName("System.Int64")->Parse('98566569856565656');

// Dump a .Net System.Timers.Timer object!
$data = $timer->GetPhpFromJson();

var_dump($data);

    // Outputs:
    //  object(stdClass)[38]
    //     public 'AutoReset' => boolean true
    //     public 'Enabled' => boolean false
    //     public 'Interval' => int 100
    //     public 'Site' => null
    //     public 'SynchronizingObject' => null
    //     public 'Container' => null

// Check if today is monday
$IsMonday = $runtime->TypeFromName("System.DateTime")->Now->DayOfWeek->
Equals($runtime->TypeFromName("System.DayOfWeek")->Enum('Monday'));

?>
Eion Robb 12-Feb-2014 09:59
All the examples here show
<?php $var = new COM('Whatever.Something') or die(); ?>
however the 'or die()' bit is redundant as a fatal 'com_exception' exception will be thrown, killing your script.  If you want to handle the 'or' condition you need to catch the exception, eg
<?php
try {
$var = new COM('Whatever.Something');
} catch (com_exception $e) {
 //couldn't load, do something else like register
exec('regsvr32 /s whatever.dll');
}
?>
rogier 28-Oct-2011 10:09
Took me a while to figure this out by trial and error:

If your frustrated when getting a com-exception like "Error [0x80004002] ..." (with a message nagging you about an unsupported interface), and you're calling a class method through COM that expects a char as an argument, you should NOT call the method with a single-character string.

The correct way of calling a method like this is to use a VARIANT with a type of VT_UI1.

COM enabled method definition:

public bool DoSomething(char arg);

<?php

$com = new COM('Some.Class.Name');

// This will fail
$var = 'a';
$com->DoSomething($var);

// This works correctly
$var = new VARIANT(ord('a'), VT_UI1);
$com->DoSomething($var);

?>

I hope this helps some people
sparrowstail at googlemail dot com 12-Nov-2010 11:35
This script reports all Windows drives, drive type, status (if not available), free space and total drive size:

<?php

    $fso = new COM('Scripting.FileSystemObject');
    $D = $fso->Drives;
    $type = array("Unknown","Removable","Fixed","Network","CD-ROM","RAM Disk");
    foreach($D as $d ){
       $dO = $fso->GetDrive($d);
       $s = "";
       if($dO->DriveType == 3){
           $n = $dO->Sharename;
       }else if($dO->IsReady){
           $n = $dO->VolumeName;
           $s = file_size($dO->FreeSpace) . " free of: " . file_size($dO->TotalSize);
       }else{
           $n = "[Drive not ready]";
       }
   echo "Drive " . $dO->DriveLetter . ": - " . $type[$dO->DriveType] . " - " . $n . " - " . $s . "<br>";

    }

      function file_size($size)
      {
      $filesizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
      return $size ? round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $filesizename[$i] : '0 Bytes';
      }

?>

There are a number of other properties of the drive object which can be called this way - see:

http://msdn.microsoft.com/en-us/library/ts2t8ybh%28VS.85%29.aspx
z3n at overflow dot biz 24-Sep-2009 08:35
On a query reply using ADODB.Connection object, all my $rs->Fields['field_name']->Value returned `variable Object` when inserted into a array, like this:

<?php
for ($rl[$v]=array(),_qm($_query);!$res->EOF;$res->MoveNext()) {
    $rl[$v][]=$res->Fields['x']->Value;
}
?>

I figured out that converting the value into a INT fixed the issue:

<?php $rl[$v][]=intval($res->Fields['x']->Value); ?>
pavanphp Gudipati 17-Jun-2009 06:49
Here I Am describing a Program from which you can connect any exe(software) using COM component.
pdf2swf is a software for converting PDf to SWF files.

This is best example for  WScript.Shell

<?php
#code for pdf to swf using pdf2swf software
#this codeworks in windows environment.

## Important Parameters
$software_path  ="C:\\SWFTools\\pdf2swf" ;
$pdf_path       ="C:\\SWFTools\\abcd.pdf" ;
$argument       = "-o";
$swf_output     ="C:\\SWFTools\\abcd.swf" ;

#actual code
$cmd        =" $software_path $pdf_path  $argument $swf_output";

$WshShell   = new COM("WScript.Shell");
$oExec      = $WshShell->Run("cmd /C $cmd ", 0, true);

# 0 for command prompt invisible mode
# 3 for visible

?>
tsintra at humansoft dot pt 11-May-2009 08:18
After one week of trying to understand what was wrong with my PHP communication with MS Word, i finally got it working...
It seems that if you're running IIS, the COM object are invoked with restricted privileges.
If you're having permission problems like not being able to opening or saving a document and you're getting errors like:

 - This command is not available because no document is open
or
 - Command failed

try this (if you're running IIS):

- Execute "dcomcnfg"
- Open Component Services > Computers > My Computer > DCOM Config
- Search for Microsoft Office Word 97-2003 Document (it will be something like this translated to your language, so take a while and search for it)
- Right-Click on it and open the properties
- Choose "Identity" tab
- Normally this is set to "the launching user". You have to change this to "the interactive user" or a admin user of your choice.
- Apply these new settings and test your COM application. It should work fine now.

I hope I save lots and lots of hours of headaches to some of you :)
dpchiesa at hotmail dot com 27-Mar-2009 09:35
Here's a way to create an AES-Encrypted ZIP file in PHP, using DotNetZip via the COM class.

<?php
try
{
  $fname = "zip-generated-from-php-" . date('Y-m-d-His') . ".zip";
  $zipOutput = "c:\\temp\\" . $fname;
  $zip = new COM("Ionic.Zip.ZipFile");
  $zip->Name = $zipOutput;
  $dirToZip= "c:\\temp\\psh";
  #$dirToZip= "c:\\dinoch\\webs\\php";
  $zip->Encryption = 3;
  $zip->Password = "AES-Encryption-Is-Secure";
  $zip->AddDirectory($dirToZip);
  $zip->Save();
  $zip->Dispose();

  if (file_exists($zipOutput))
  {
    header('Cache-Control: no-cache, must-revalidate');
    header('Content-Type: application/x-zip');
    header('Content-Disposition: attachment; filename=' . $fname);
    header('Content-Length: ' . filesize($zipOutput));
    readfile($zipOutput);
    unlink($zipOutput);
  }
  else
  {
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '</body>';
    echo '</html>';
  }
}
catch (Exception $e)
{
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '<p>Caught exception: ',  $e->getMessage(), '</p>', "\n";
    echo '<pre>';
    echo $e->getTraceAsString(), "\n";
    echo '</pre>';
    echo '</body>';
    echo '</html>';
}

?>
james dot m dot love at gmail dot com 07-Jan-2009 03:27
If you're using COM to create a DSN Less connection to an MS Access 2007 database, you'll find through Googling that you need to use an updated version of Jet, so the connection string I've found looks like this:

<?php
$databaselocation = "C:\Path\to\db.accdb";
$conn = new COM('ADODB.Connection') or exit('Cannot start ADO.');
$conn->Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=$databaselocation") or die('Cannot start with Jet');
?>

However, on my setup (WinVista, Access 2007, PHP526) I found that it always 'dies' with "Cannot start with Jet", even if the connection was successful ($conn->State reads "1").

I figured to just drop the die() command on $conn->Open(). If something catastrophic happens with the ADO connection then it's own error handling engine passes stack traces, etc back to the console/standard output.

Therefore, my Open() command looks like this:

<?php
$conn->Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=$databaselocation");
?>
casanoteva at yahoo dot com 26-Dec-2008 01:19
Hi, just wanna share to everyone after tried and tested many many times to create report in PDF format from Crystal Report.
Finally I can do it without any error.
 Here is my system; PHP 5.1.6, MSSQL2005 and Crystal Report Server XI RL2

<?php

//- Variables - for your RPT and PDF
echo "Print Report Test";
$my_report = "D:\\Folder1\\SubFolder1\\Report.rpt"; //
rpt source file
$my_pdf = "D:\\Folder1\\SubFolder1\\Report.pdf"; // RPT export to pdf file
//-Create new COM object-depends on your Crystal Report version
$ObjectFactory= new COM("CrystalReports115.ObjectFactory.1") or die ("Error on load"); // call COM port
$crapp = $ObjectFactory-> CreateObject("CrystalDesignRunTime.Application"); // create an instance for Crystal
$creport = $crapp->OpenReport($my_report, 1); // call rpt report

// to refresh data before

//- Set database logon info - must have
$creport->Database->Tables(1)->SetLogOnInfo("servername", "DBname", "user", "password");

//- field prompt or else report will hang - to get through
$creport->EnableParameterPrompting = 0;

//- DiscardSavedData - to refresh then read records
$creport->DiscardSavedData;
$creport->ReadRecords();

//export to PDF process
$creport->ExportOptions->DiskFileName=$my_pdf; //export to pdf
$creport->ExportOptions->PDFExportAllPages=true;
$creport->ExportOptions->DestinationType=1; // export to file
$creport->ExportOptions->FormatType=31; // PDF type
$creport->Export(false);

//------ Release the variables ------
$creport = null;
$crapp = null;
$ObjectFactory = null;

//------ Embed the report in the webpage ------
print "<embed src=\"D:\\Folder1\\SubFolder1\\Report.pdf\" width=\"100%\" height=\"100%\">"

?>

 That's all for me, anyway in Crystal Report I have to check DisCardSavedData, Save data with report and AutoSave (1 min) in Option Tab and also in Report Options I have to check save dat with report, too.

Hope this should be help to anybody

Casanoteva
johnno1985 at gmail dot com 21-Aug-2008 11:34
I couldn't find an example anywhere on what I was trying to do.  After taking bits from everyone I ended up with something that worked.

Im using Crystal Reports 10, MS SQL Server 2005, Apache2, and PHP5.

My report uses an SQL Store Procedure and passes some parameter to get the report data, so our PHP must set the database logon info and pass the parameters.

Below is the solution I came up with:

<?php

//------  Variables ------
$my_report = "C:\\Apache2\htdocs\\test\\MyReport.rpt";  //This must be the full path to the file
$my_pdf = "C:\\Apache2\htdocs\\test\\MyReport.pdf";

//------ Create a new COM Object of Crytal Reports 10 ------
$ObjectFactory= new COM("CrystalReports10.ObjectFactory.1");

//------ Create a instance of library Application -------
$crapp = $ObjectFactory->CreateObject("CrystalDesignRunTime.Application.10");

//------ Open your rpt file ------
$creport = $crapp->OpenReport($my_report, 1);

//------ Set database logon info ------
$creport->Database->Tables(1)->SetLogOnInfo("MYSERVER", "Database", "user", "password");

//------ Suppress the Parameter field prompt or else report will hang ------
$creport->EnableParameterPrompting = 0;

//------ DiscardSavedData make a Refresh in your data -------
$creport->DiscardSavedData;
$creport->ReadRecords();

//------ Pass formula fields --------
$creport->FormulaFields->Item(1)->Text = ("'My Report Title'");
$creport->ParameterFields(1)->AddCurrentValue ("FirstParameter");
$creport->ParameterFields(2)->AddCurrentValue (2000);

//------ Export to PDF -------
$creport->ExportOptions->DiskFileName=$my_pdf;
$creport->ExportOptions->FormatType=31;
$creport->ExportOptions->DestinationType=1;
$creport->Export(false);

//------ Release the variables ------
$creport = null;
$crapp = null;
$ObjectFactory = null;

//------ Embed the report in the webpage ------
print "<embed src=\"MyReport.pdf\" width=\"100%\" height=\"100%\">"

?>

Obviously there's plenty of room for refinement in there, but it works and should get you going on the right track.  I also found that during testing, the script was hanging before supressing the parameter prompt. Once this had happened, some exports that had been working earlier stopped completely and wouldn't work again untill I restarted Apache.  This might be something worth doing if you keep having issues after a script has hung.
mastrboy.servebeer.com 13-Jun-2008 05:03
quick wmi query example:

<?php
    $obj = new COM ( 'winmgmts://localhost/root/CIMV2' );
    $wmi_computersystem =     $obj->ExecQuery("Select * from Win32_ComputerSystem");
    $wmi_bios             =    $obj->ExecQuery("Select * from Win32_BIOS");
    foreach ( $wmi_computersystem as $wmi_call )
    {
        $model = $wmi_call->Model;
    }

    foreach ( $wmi_bios as $wmi_call )
    {
        $serial = $wmi_call->SerialNumber;
        $bios_version = $wmi_call->SMBIOSBIOSVersion;
    }
    echo "Bios version   : $bios_version\n".
         "Serial number  : $serial\n".
         "Hardware Model : $model\n";
?>
mbirth at webwriters dot de 08-Jun-2008 03:19
Using the DynamicWrapper from http://freenet-homepage.de/gborn/WSHBazaar/WSHDynaCall.htm and after registering it via "regsvr32 dynwrap.dll", you can easily set output colors to make colorful CLI scripts even on Windows.

<?php

$dw = new COM('DynamicWrapper');  // needs dynwrap.dll (regsvr32 dynwrap.dll)

// register needed features
$dw->Register('kernel32.dll', 'GetStdHandle', 'i=h', 'f=s', 'r=l');
$dw->Register('kernel32.dll', 'SetConsoleTextAttribute', 'i=hl', 'f=s', 'r=t');
$dw->Register('kernel32.dll', 'SetConsoleTitle', 'i=s', 'f=s', 'r=l');

// get console handle
$ch = self::$dw->GetStdHandle(-11);  // -11 = STD_OUTPUT_HANDLE

?>

After these initialization steps, you can set the console output color using:

<?php
$dw->SetConsoleTextAttribute($ch, 14);
echo 'This is yellow text!';
$dw->SetConsoleTextAttribute($ch, 7);
echo 'Back to normal gray!';
?>

Using SetConsoleTitle you can even set the title displayed in the console window.

Color values are 0..7 for dark colors and 8..15 for light colors. Sequence is (black/silver, blue, green, cyan, red, magenta, yellow/brown, white/gray). I also found that if you add 16384 to the value, it should be inverse. 32768 added should get underlined text. But these latter two didn't work for me.
amenthes at NOSPAM dot gmail dot com 03-Mar-2008 10:13
If you ever want to save an Excel(.xls) file into the Office Excel 2003 XML format, just use

$excel->Workbooks[1]->SaveAs('new_file_name.xml', 46);

That's the number you need, 46.
halfer 21-Jun-2007 05:03
Thanks to paul at completewebservices who added a note earlier; I have used his code to solve a particularly difficult issue with the Crystal 9 runtime component. For some reason, VBA/VBS can pass a native Date type as a parameter to a Crystal Report requiring a date, but in PHP I've tried all manner of strings, unix timestamps, COM variant dates etc and all of these resulted in a com_exception.

My solution was to employ VBScript to borrow the CDate function, which works correctly. Not the most elegant of solutions, but this parameterised approach is to be preferred to search-n-replacing the RecordSelectionFormula string. Of course if anyone here has an even better approach, do post it here - I am sure it would be of use.

<?php
// $rptParam is a report parameter object having a type of date
$oScript = new COM("MSScriptControl.ScriptControl");
$oScript->Language = "VBScript";
$oScript->AllowUI = false;
$oScript->AddObject('rptParam', $rptParam, true);
$oScript->AddCode('Function SetDateParameter(strDate)
rptParam.AddCurrentValue(CDate(strDate))
End Function');
$oScript->Run("SetDateParameter", "25 April 2006");
?>
hwcshirley at gmail dot com 21-May-2006 10:59
Reply to: djogopatrao at gmail dot com
I have change little bit your code. Its work.

$COM_Object = "CrystalDesignRunTime.Application";
$my_report = "C:\\appserv\\www\\mc\\test.rpt";
$my_pdf = "C:\\appserv\www\\mc\\test.pdf";

$crapp= New COM($COM_Object) or die("Unable to Create Object");
$creport = $crapp->OpenReport($my_report, 1);
$creport->ReadRecords(); // attention!

$creport->ExportOptions->DiskFileName=$my_pdf;
$creport->ExportOptions->PDFExportAllPages=true;
$creport->ExportOptions->DestinationType=1; // Export to File
$creport->ExportOptions->FormatType=31; // Type: PDF
$creport->Export(false);
djogopatrao at gmail dot com 05-Apr-2006 12:25
My previous notes about Crystal Reports have vanished away, but anyway I was up to correct them.

The code above connects to COM (beware of the version number! search on the Registry Editor for the correct name to put in $COM_Object), opens a report from a file ($my_report), reload records from database and then exports it to a PDF file ($my_pdf).

* IMPORTANT * this code, when invoked from the browser (I'm using Apache) AND with a report that connects to a ODBC database, does not work (the problem is specificly the line ReadRecords(), but may arise without it too when data is not saved into the report file).

But when you run this code by PHP-CLI (that is, by the command line), it works ok! I bug-reported this, but have no answer till now ( give it a vote, if you thing it's important: http://bugs.php.net/bug.php?id=36959 ).

Also, exceptions may arise, so put it on a try_catch block.

--------------------------

// by dfcp '06 (djogopatrao@gmail.com)

$COM_Object = "CrystalReports11.ObjectFactory.1";
$my_report = "C:\\report.rpt";
$my_pdf = "C:\\report.pdf";

$ObjectFactory= New COM($COM_Object);
$crapp = $ObjectFactory->CreateObject("CrystalDesignRunTime.Application");
$creport = $crapp->OpenReport($my_report, 1);
$creport->ReadRecords(); // attention!

$creport->ExportOptions->DiskFileName=$my_pdf;
$creport->ExportOptions->PDFExportAllPages=true;
$creport->ExportOptions->DestinationType=1; // Export to File
$creport->ExportOptions->FormatType=31; // Type: PDF
$creport->Export(false);
djogopatrao at gmail dot com 04-Mar-2006 07:27
I found somewhere (http://www.recrystallize.com/merchant/supportfaq/supportfaq0003.htm) a list relating each version of Crystal Reports to its respective progID - it may help some fellows out there.

7          Crystal.CRPE.Application

8.0        CrystalRuntime.Application or CrystalRuntime.Application.8

8.5        CrystalRuntime.Application or CrystalRuntime.Application.8.5

9 (RDC)    CrystalRuntime.Application.9
9 (RAS)    CrystalReports.ObjectFactory.2
10 (RDC)   CrystalRuntime.Application.11
10 (CEE)   CrystalReports10.ObjectFactory.1

XI (RDC)   CrystalRuntime.Application.11
XI (RAS)   CrystalReports11.ObjectFactory.1
paul at completewebservices dot com dot au 28-Jan-2006 03:49
It seems that PHP does not support setting of properties with arguments.  This is how I got around the problem:

        // Object with method I want to set
        $auth = new COM("AUTHXOCX.AuthXOCXCtrl.1");

        // ScriptControl
        $oScript = new COM("MSScriptControl.ScriptControl");
        $oScript->Language = "VBScript";
        $oScript->AllowUI = TRUE;

        // Add out object to the control
        $oScript->AddObject('auth', $auth, true);

        // Create a VBScript function that allow me to set them
       $oScript->AddCode(
'Function fixAccess(accessname)
    auth.AuthDataReferrerEnabled(accessname) = 1
    auth.AuthDataAuthentiXDBEnabled(accessname) = 0
End Function');

        // Execute function
        $oScript->Run("fixAccess", $dir);
volker at kybs dot de 07-Oct-2005 12:51
To use the windows speech system install the "Speech SDK 5.1 for Windows? applications" from the Microsoft homepage (free download).
Then you can do Text2Speech like this:

$voice = new COM("SAPI.SpVoice");
$voice->Speak("Hello, lets have a conversation");
sadi at unicornsoftbd dot com 06-Oct-2005 01:56
If your PHP is configured as ISAPI module then the COM object you create in ur php page will use the same memory space as the web server. If your COM object takes too much memory then this may force some COM error as PHP does not handle the memory usage of COM itself. And also Web server doesnt know what do to free COM memory. But if you use PHP as CGI then PHP itself handle the memory usage of COM. Once in a script where i used COM and PHP as ISAPI module i got unknown COM error.But when i used PHP as CGI there was no error. So those who want to use COM object in your application please be careful about it.
deletethis@bjoern(at)syltonline(doot)de 15-Sep-2005 07:36
If you can get the old "TaskScheduler.dll" and register it, it is quite simple to handle and start Windows tasks from PHP.
This is extremely useful when you got things to do which must be run in a different user context. Prepare a task with the user and use PHP & Com to build a webinterface for it.

Here is an example how to start a Windows task:

  function start_task ($taskname) {
    $SchedObj = new COM("Scheduler.SchedulingAgent.1");
    foreach ($SchedObj->Tasks as $task) {
      if (strtolower( (string) $task) == strtolower( $taskname.".job" )) {
         $task->Run();
      }
    }
  }

I'm also working on a class to handle infos, adding and removing of tasks via PHP. If you are interested drop me a line.
csaba at alum dot mit dot edu 03-Mar-2005 05:21
Getting IE to the foreground
If you are using a command line (CLI) version of PHP on a Win32 platform (e.g. XP Pro, SP2), you might want to have output directed to IE (perhaps you'll want to work with the output there) when Popup does not suffice (see my earlier post, below).

It's easy enough to get an instance of IE using $ie = new COM("InternetExplorer.Application");.  The problem is, you don't necessarily see it in the foreground (especially if you already have one open) and who wants to waste keystrokes getting to it?  The code below has been working for me (If you want to do other adjustments (e.g. $ie->Document->ParentWindow->resizeTo(800,500); or $ie->Document->Body->bgColor = "yellow";), doing them before the $ie->Visible = true; line will avoid screen distractions):

<?php
function newIEtoForeground($title, $evtPrefix="") {
    // brings new instance of IE to foreground with title $title
    if (!$extPrefix) $ie = new COM("InternetExplorer.Application");
    else $ie = new COM("InternetExplorer.Application", $evtPrefix);
    $ie->Navigate2("about:blank");
    $oWSH = new COM("WScript.Shell");
    while ($ie->ReadyState!=4) usleep(10000);

    $ie->Document->Title = ($tmpTitle = mt_rand());  //unique title
    $ie->Visible = true;
    while (!$oWSH->AppActivate("$tmpTitle - M")) usleep(10000);

    $ie->Document->Title = $title;
    $ie->Document->ParentWindow->opener="me";  // allows self.close()
    return $ie;
}
?>

Csaba Gabor from Vienna
csaba at alum dot mit dot edu 14-Feb-2005 12:22
Basic Windows IO
If you are using a command line (CLI) version of PHP on a Win32 platform, you might like to have a simple graphical interface to get input and output.  The following gives an illustration for both.

<?php
    // first we get some input
    $oScript = new COM("MSScriptControl.ScriptControl");
    $oScript->Language = "VBScript";
    $title = "I/O Demo: Input half";
    $initial = "Change this value";
    $prompt = "Please enter a value";

    $code = <<<EOF
Function getInput()
    inVal = InputBox("$prompt", "$title", "$initial")
    getInput = inVal         'how return values are assigned in VB
End Function
EOF;

    $oScript->AddCode($code);
    $input = $oScript->Eval("getInput()");
    if (gettype($input)=="NULL") $input = "Input box was cancelled";

    // now we show some output
    $oWSH = new COM("WScript.Shell");
    $title = "I/O Demo: Output half";
    $timeout = 2;        // 0 for no timeout
    $style = 0 + 48;    // buttons to show + alert symbol
    $oWSH->Popup($input, $timeout, $title, $style);
?>

This is example is overblown for illustrative purposes.  The whole input part collapses if the amount of code used is a single statement.  So, this would have sufficed:
$code = "InputBox(\"$prompt\", \"$title\", \"$initial\")";
$input = $oScript->Eval($code);

This technique exposes quite a bit of scripting power tied into the Windows operating system and VBScript.  However, you should have a really specific reason for using it since VBScript tends to be dog slow when compared to PHP in my tests.  Simple IO like this is good, however, and the popup size can be quite large.  Furthermore, this could be a viable route to go for accessing WinAPI's.

http://www.ss64.com/wsh/popup.html shows some documentation for $oWSH->Popup

Csaba Gabor from Vienna
phpguy _from_ toshpro _dot_ com 12-Nov-2004 05:55
if you ever need to connect to an access database (on the server, using the IIS or APACHE user account), here is code below that can help to ease the process.  It is written like this because we have a MySQL as well as an Access database and need to be able to switch back and forth.  The runQuery function will return a 2 dimensional array and can use column names or numbers for the index of the internal arrays.  External arrays are always integer-indexed.  We also have found issues with Access staying open and growing from 7MB to 2.5GB within two hours, so we open and close it each time we run a query.  If it is not a select query it will return TRUE.  if it fails with errors, it will return false.

There is a showErr flag that we mostly only use for MySQL, since you can output MySQL errors without PHP errors.  Access doesn't appear to be that friendly.

<?php

function runQuery(&$conn,
                    $strSQL,
                    $associative=true,
                    $debug=false,
                    $showSQL=false,
                    $showErr=false) {
    return runMSQuery($conn,$strSQL,$associative,$debug,$showSQL,$showErr);
    //return runMyQuery($conn,$strSQL,$associative,$debug,$showSQL,$showErr);
}

function openMSDB($dbfile="c:/path/and/filename.mdb") {
    if (!@$conn = new COM("ADODB.Connection"))
        exit("Unable to create an ADODB connection<br>");
    $strConn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".$dbfile;
    @$conn->open($strConn);
    if($conn->State == 0) return false;
    return $conn;
}

function closeMSDB(&$conn) {
    @$conn->Close();
    $conn = null;
    return true;
}

function runMSQuery(&$conn,
                    $strSQL,
                    $associative=true,
                    $debug=false,
                    $showSQL=false,
                    $showErr=false) {
    if(!is_object($conn)) if(!$conn=openMSDB()) return false;
    if( $showSQL || $debug ) echo $strSQL."\n<br>\n";
    $rtn = false;
    if($debug) $rs = $conn->execute($strSQL);
    else $rs = @$conn->execute($strSQL);

    if(!$rs) {
        if($showErr) echo "Error running SQL.<br>\n";
        closeMSDB($conn);
        return false;
    }
    if ($rs->State == 0) {
        closeMSDB($conn);
        return true;
    } else {
        $rows=0;
        while(!$rs->EOF) {
            for($i=0;$i<$rs->Fields->count;$i++) {
                $rsf = $rs->Fields($i);
                if($associative) $rtn[$rows][$rsf->Name] = $rsf->value;
                else $rtn[$rows][$i] = $rsf->value;
            }
            $rows++;
            $rs->MoveNext();
        }
        if($rs->State != 0) $rs->Close();
        $rs = null;
    }
    if($debug) var_dump($rtn);
    closeMSDB($conn);
    return $rtn;
}
?>
sodeh at dana dot ir 30-Oct-2004 03:11
for connection to sql server and know the utf-8 code
use this method to connect the database

$db = new COM("ADODB.Connection",NULL, 65001 );
jon at jonroig dot com 03-Dec-2003 12:28
Here's a simple example of printing formatted templates with MS Word.

To begin with, I've already built my invoice in Word and saved it as an RTF file.
In this case, I'm using "sampleInvoice.php"

Fields that will be replaced have been marked as ||CUSTOMER ID|| and so on.

<?php
$dataText = "";

// open the file
if(!($fp= fopen ("C:\wordTest\sampleInvoice.rtf", "r"))) die ("Can't open");
$dataText = fread($fp, 2000000);
fclose ($fp);

// replace the template fields
$dataText = str_replace ("||CUSTOMER ID||",$customerIDValue, $dataText);

// save the file as an rtf
$timeStamp = time();
$saveFile = "C:/wordTemp/".$timeStamp."-invoice-".$customerIDValue.".rtf";
if(!($fq= fopen ($saveFile, "w+"))) die ("Can't open");
fwrite ($fq, $dataText);
fclose ($fq);

// initialize the word components
$word = new COM("word.application") or die("Unable to instantiate Word");

print "Loaded word version ($word->Version)\n";
$word->visible = true;
$word->Documents->Add();

// open the file
$word->Documents->Open("$saveFile");

// output the file to the default printer
$word->ActiveDocument->PrintOut(1);

// shutdown word
$word->Quit();
?>
drich at nea-online dot net 18-Nov-2003 02:47
Changing Fields (Not FORMFIELDS) In MS Word....

Searched most of the afternoon for this, as it is something needed here for our projects.  Maybe this can help someone else as well.

<?php
$input = "x:\\path\\to\\test.doc";
$word = @new COM("word.application") or die("Unable to instantiate Word");
print "Loaded Word, version {$word->Version}\n<br>";
$word->Visible = 1;
print "Set Word To Visible<br>";
$word->Documents->Open($input);
print "Opened $input<br>";
$word->Activate;
print "Activated Word<br>";

print "Editing Fields<br>";
$Field = $word->ActiveDocument->Fields(1);
$fieldData = $Field->Result;
$fieldData->Text = "Testing";

// Print the document.
$word->Printout();

// closing word
$word->Quit();

// free the object
$word->Release();
$word = null;

?>
admin at CdnDomainRegistry dot ca 20-Sep-2003 03:57
Here's an example/comparison of VBScript vs PHP's COM component to connect to an IIS Webserver.
The examples backup the IIS MetaBase (your server's website(s) configuration) in IIS.

VBScript:
  Dim obj, iFlags
  Set obj = GetObject("IIS://LocalHost")
  ' Backup to next available version number.
  ' Set flags to save the metabase first and
  ' force the backup even if save fails.
  iFlags = (MD_BACKUP_SAVE_FIRST or MD_BACKUP_FORCE_BACKUP)
  obj.Backup "MyBackups", MD_BACKUP_NEXT_VERSION, iFlags
  ' Note: The above was copied from Microbucks.
  ' This is how you would have to do it.
  ' i.e. use the actual constant's value.
  iFlags = (2 or 4)
  obj.Backup "MyBackups", &HFFFFFFFF, iFlags

PHP:
  <?php
  $obj = new COM("IIS://LocalHost")or die("Unable to instantiate IIS");
  $err = com_invoke ($obj, "Backup", "MyBackups", "&HFFFFFFFF", 2|4 );
  $obj = null;
  print "err=".$err; // returns 0 on success
  ?>

Glen
rickardsjoquist at hotmail dot com 09-Jul-2003 10:33
If you want to use a DSN-less connection to a database (access for example) and return the results of a query as a multidimensional array with the fieldnames as identifier try this. Hope it helps someone :-)
--------------------------------------------------------

<?php
function db($sql) {
    $c = new COM("ADODB.Connection");
    $c->open('DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=' . realpath("relative_path/db.mdb"));
    $r = $c->execute($sql);
    $i = 0;
    $num_fields = $r->fields->count();
    while (!$r->EOF)
        {
            for($j = 0;$j<$num_fields;$j++) {
            $key = $r->Fields($j);
            $r_items[$i][$key->name] = $key->value;
        }
        $i++;
        $r->MoveNext();
    }
    $r->close();
    $c->close();
    $r = null;
    $c = null;
    return $r_items;
}
?>

--------------------------------------------------------
use it like this:
--------------------------------------------------------
<?php
$results = db("SELECT field_a, field_b FROM table");
foreach($result as $i => $item) {
    echo $item['field_a'];
    echo $item['field_b'];
}
?>
--------------------------------------------------------
You can also use: print_r($result); if you want the structure of the array to be printed.
info at sharedprojects dot nl 16-Jun-2003 09:41
<?php
// An other way to connect
// this connect to a ODBC-datasourced added in the
// ODBC Data Source Administrator under System DSN

$odbcname = "northwind";
$conn->Open("DSN=$odbcname");
?>
eguan1ao_at_yahoo_dot_com 20-Nov-2002 01:35
An example of connecting to a Microsoft Access database, executing an SQL query, and displaying the results in HTML.

<?php

$db = 'C:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb';

$conn = new COM('ADODB.Connection');

// Two ways to connect. Choose one.
$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db");
//$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");

$sql = 'SELECT   ProductName, QuantityPerUnit, UnitPrice
         FROM     Products
          ORDER BY ProductName';
$rs = $conn->Execute($sql);

?>

<table>
<tr>
          <th>Product Name</th>
         <th>Quantity Per Unit</th>
         <th>Unit Price</th>
</tr>
<?php while (!$rs->EOF): ?>
         <tr>
                  <td><?= $rs->Fields['ProductName']->Value ?></td>
                   <td><?= $rs->Fields['QuantityPerUnit']->Value ?></td>
                  <td><?= $rs->Fields['UnitPrice']->Value ?></td>
          </tr>
         <?php $rs->MoveNext() ?>
<?php endwhile ?>
</table>

<?php

$rs->Close();
$conn->Close();

?>
yinon at xacct dot com 06-Apr-2002 12:33
In order to get the Word exaple running, do the following on the server side.
Worked for me...
1. Click START-->RUN and enter "dcomcnfg"
2. In the "Applications" tab, go down to "Microsoft Word Document"
3. Click PROPERTIES button
4. Go to the "Security" Tab
5. Click "Use custom access permissions", and then click EDIT
6. Click ADD and then click SHOW USERS
7. Highlight the IIS anonymous user account (usually IUSR_<machinename>), click ADD
8. Go back to the "Security" tab by hitting OK
9. Click "Use custom launch permissions", and the click EDIT
10. Click ADD and then click SHOW USERS
11. Highlight the IIS anonymous user account (usually IUSR_<machinename>), click ADD
12. Hit OK, and then hit APPLY.

Also, you should look at the "Identity" tab in the Microsoft Word Document PROPERTIES and see that it is set to "Interactive User"

ALSO, log into the machine AS the IUSR_<machinename> account, start word, and make sure to click through the dialog boxes that Word shows the first time it is run for a certain user.  In other words, make sure Word opens cleanly for the IUSR_ user.

More useful information could be found here:
http://www.email-screen.com/support-doc2txt.html
mstaiger at informatik dot uni-siegen dot de 23-Jan-2002 06:17
The example above (MS Word) is quiet unsatisfying, as I find. Especially since I couldn't find anybody who actually got it running, including myself.

You might therefore give this Powerpoint-example a chance:
----------------------------------
#Instantiate a PowerPoint object.
$ppoint = new COM("PowerPoint.application") or die("Unable to instantiate PowerPoint");

<?php
#Create a new presentation
$ppoint->Presentations->Add() or die ("Could not create presentation");

//Add a slide
$slide=$ppoint->Presentations[1]->Slides->Add(1,1);

//Get the name of this slide
$slidename = $slide->Name();
echo"<br>slidename : $slidename";

//Change the name of this new slide
$slide->Name = "New Slidename";
$slidename = $slide->Name();
echo"<br>NEW slidename : $slidename";

//Save the presentation
$ppoint->Presentations[1]->SaveAs("c:/InetPub/www/test.ppt");
$ppoint->Presentations[1]->Close();

//closing powerpoint
$ppoint->Quit();

//free the object
$ppoint->Release();
$ppoint = null;
-----------------------
?>

the config is :
w2k-server/office2k/iis5/php 4.1.1 isapi

If you happen to run into a working word2k-example, please let me know.

Marc


com クラスのコンストラクタ

  • ≪ com
  • dotnet ≫
  • PHP Manual
  • com
  • com クラスのコンストラクタ

com::__construct

(PHP 4 > 4.1.0, PHP 5, PHP 7, PHP 8)

com::__construct — com クラスのコンストラクタ

説明

public com::__construct(
string $module_name,
array|string|null $server_name = null,
int $codepage = CP_ACP,
string $typelib = ""
)

新しい com オブジェクトを構築します。

パラメータ

module_name
ロードするコンポーネントの名前を表す ProgID, ClassID または Moniker。 ProgID は通常、アプリケーションまたは DLL の名前で、その後にピリオドが続き、 オブジェクト名が続きます。e.g: Word.Application ClassID は、与えられたクラスを一意に識別するUUIDです。 Moniker は、URL スキームの概念に似た特別な名前付けのやり方で、 リソースを識別し、どのようにロードするかを指定します。 たとえば、Microsoft Word をロードし、 Word ドキュメントを表現するオブジェクトを取得するために、 フルパスをモジュール名として指定できます。 また、LDAP への ADSI インターフェイスを使う moniker として LDAP: が使えます。
server_name
コンポーネントをロードし、実行する DCOM サーバー名。 null の場合、そのアプリケーションのデフォルトが使われ、実行されます。 デフォルトは通常はローカルマシン上で実行することですが、 管理者が異なるマシン上で起動するアプリケーションを設定するかもしれません。 server に null でない値を指定すると、PHP は com.allow_dcom php.ini 設定オプションが true でない限りオブジェクトのロードを拒否します。

server_name が配列の場合、 次の要素が含まれるべきです(大文字小文字を区別します！)。 但し、これらは全てオプション(ユーザー名とパスワードは一緒に指定する必要があります) であることに注意してください。つまり、サーバーの設定を省略すると、 (既に述べたとおり)デフォルトのサーバーが使われ、オブジェクトのインスタンス化は com.allow_dcom php.ini ディレクティブによって影響を受けません。

DCOM サーバー名
キー | タイプ | 説明
Server | string | サーバー名
Username | string | 接続するユーザ名
Password | string | Username のパスワード
Domain | string | server のドメイン
Flags | integer | 以下の定数をひとつ以上、論理ORで指定します: CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER, CLSCTX_REMOTE_SERVER, CLSCTX_SERVER および CLSCTX_ALL。 指定されなかった場合のデフォルト値は Server も省略した場合は、 CLSCTX_SERVER ですが、 server を指定した場合は CLSCTX_REMOTE_SERVER です。 これらの定数の意味の詳細情報は、 Microsoft の CoCreateInstance のドキュメントも参照ください。 通常、それらを使わないことはないはずです。

codepage
文字列をUnicode文字列その他に変換するために使うコードページを指定します。 PHP の文字列が この COM オブジェクトのメソッドとパラメータをやりとりする時に 常にこの変換は適用されます。このコードページは sticky です。 つまり、コードページはオブジェクトから返されるオブジェクトやバリアントに伝播するということです。 有効な値は CP_ACP (システムデフォルトの ANSI コードページを使う - このパラメータが省略された場合のデフォルト値), CP_MACCP, CP_OEMCP, CP_SYMBOL, CP_THREAD_ACP (現在実行中のスレッドのコードページ/ロケールを使う), CP_UTF7 および CP_UTF8 です。 コードページの数値も使えます。 コードページとその数値に関する詳細な情報は、Microsoft のドキュメントを参照ください。

User Contributed Notes

There are no user contributed notes for this page.


dotnet クラス

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

はじめに

dotnet クラスにより、 クラスやメソッドが » COM に見えている場合、 .Net アセンブリからクラスを生成して そのメソッドをコールしたりプロパティにアクセスしたりできるようになります。

staticクラス をインスタンス化したり、staticメソッド を呼び出すことはサポートされていません。 System.Collections.Generic.List のようなジェネリッククラスをインスタンス化することもサポートしていません。

.Net クラスによっては、IDispatch を実装していないものがあります。 それらはインスタンス化はできるものの、メソッドをコールしたり プロパティへアクセスすることをサポートしていません。

注意:

この機能を利用するには、Webサーバーに .Netランタイムをインストールする必要があります。

注意:

PHP 8.0.0 より前のバージョンでは、 dotnet クラスは.Net framework 4.0 以降をサポートしていませんでした。 アセンブリが regasm.exe によって登録されている場合は、 それらのクラスは com オブジェクトを通じてインスタンス化できます。 PHP 8.0.0 以降では、php.ini の com.dotnet_version を指定することで .Net framework 4.0 以降をサポートします。

クラス概要

class dotnet extends variant {
/* メソッド */
public __construct(string $assembly_name, string $datatype_name, int $codepage = CP_ACP)
}

オーバーロードされたメソッド

返されるオブジェクトはオーバーロードされています。つまり、通常の クラスのような固定されたメソッドは存在しないということです。 そのかわりに、プロパティやメソッドへのアクセスは COM を通じて DOTNET に渡されます。言い換えれば、.Net ランタイムが提供する COM相互運用レイヤによって .Net オブジェクトが COM 連携用にマップされているという ことです。

dotnet オブジェクトが作成されると、PHP はそれを他の COM オブジェクトと同等のものとして扱い、同様の規則が適用されます。

dotnet の例

例1 dotnet の例

<?php
$stack = new dotnet("mscorlib", "System.Collections.Stack");
$stack->Push(".Net");
$stack->Push("Hello ");
echo $stack->Pop() . $stack->Pop();
?>

目次

  • dotnet::__construct — dotnet クラスのコンストラクタ

User Contributed Notes

Bitterblue 30-Jul-2018 02:54
I worked with this the last few days and figured it out.
On stack overflow: https://stackoverflow.com/a/51541801/1442225
jcastromail at yahoo dot es 18-Nov-2016 09:04
using dotnet with visual studio 2015 (and net framework 4.6.1 but its the same with others).

1) In visual studio 2015, created a library project (in this case a C#)
2) Double click in the project -> build events -> post build

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\gacutil.exe"  /i "$(TargetPath)"

When the project its compiled, it adds to the GAC automatically. Please changes the bin folder according your installation.

3) in tools -> External tools, add the next external tool
Title: Get Qualified Assembly Name
Command: Powershell.exe
Arguments: -command "[System.Reflection.AssemblyName]::GetAssemblyName(\"$(TargetPath)\").FullName"
User Output Windows : checks

4) run tools -> Get qualified Assembly Name and checks the output windows

5) Creates the next class (Class1 may be its already creates)

namespace ClassLibrary2 // <-- changes it.
{
    public class Class1
    {
        public string Ping(string t1,string t2)
        {
            return "pong "+t1+t2;
        }
    }
}

6) in php

$full="ClassLibrary2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=746927f9726d7222"; // its from the output windows
$class = 'ClassLibrary2.Class1'; // its the namespace and the class.

 $stack = new DOTNET($full,$class);
 $r1="hello";
 $r2="world";
 echo $stack->Ping($r1,$r2);

IMPORTANT NOTE: PHP "caches" the dll library, so every time that the dll library is compiled, the php service should be restarted (restart the apache service).
IMPORTANT NOTE 2: May be you should run Visual Studio as an Administrator.
juan156_elias at gmail dot com 04-Jun-2015 08:00
Using COM and DOTNET directly is quite a nightmare. DOTNET only allows you to target .Net 3.5 and below, and all the binaries need to be COM  Visible. This basically means that you will need to write your own .Net binaries for everything, at least wrappers.

There is a library out there (NetPhp) built on top of the COM class that will solve all these issues, so you can get code like this:

$manager = new \NetPhp\Core\NetManager();
$manager->RegisterAssembly('mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', 'mscorlib');
$manager->RegisterClass('mscorlib', 'System.IO.File', 'File');
$manager->RegisterClass('mscorlib', 'System.IO.FileOptions', 'FileOptions');
$file = $manager->Create('mscorlib', 'File');
$fileoptions = $manager->Create('mscorlib', 'System.IO.FileOptions')->Enum('Encrypted');

$file->Create("C:\\www\\prueba.tres", 2048, $fileoptions);
m dot atifmajeed at gmail dot com 11-Feb-2015 04:29
How to use donet class for creating object of parameterized constructor

http://php.net/manual/en/class.dotnet.php

private SGF ingerPrintManager m_FPM; //member variable
SGFPMDeviceName device_name = SGFPMDeviceName.DEV_ FDU02 ;
m_FPM = new SGF ingerPrintManager (device_name);
ricardopsj at gmail dot com 14-Apr-2014 01:30
Create an Excel Workbook using DOTNET.

<?php

$full_assembly_string = 'Microsoft.Office.Interop.Excel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c';
$full_class_name = 'Microsoft.Office.Interop.Excel.ApplicationClass';

$e = new DOTNET($full_assembly_string, $full_class_name);
$wb = $e->workbooks->add();
$Precios = $wb->Worksheets(1);
$Precios->Name = 'Precios';
$Venta = $wb->Worksheets(2);
$Venta->Name = 'Venta';
$Tons = $wb->Worksheets(3);
$Tons->Name = 'Tons';

$Meses = Array('2014-01', '2014-02', '2014-03', '2014-04', '2014-05', '2014-06', '2014-07', '2014-08', '2014-09', '2014-10', '2014-11', '2014-12');
foreach ($Meses as $Numero => $Mes) {
   $Precios->Range("A" . ($Numero+1))->Value = $Mes;
}

$wb->SaveAs('c:\temp\Meta.2014.05.xlsx');
$wb->Close();

?>

Go to c:\windows\assembly to know what value to put in $full_assembly_string.

If you don't know the assembly, use http://www.red-gate.com/products/dotnet-development/reflector/ to browse it, use what you learn there to fill $full_class_name.

Enjoy,

Ricardo.
jan dot zahradnik at data3s dot com 06-Jan-2014 09:17
PHP searches only GAC for .NET 2.0 runtime, so your DLL has to be targeted 2.0 - 3.5 framework.

Also it recognize only classes, not stucts, so you can't instantiate DateTime for example.
sandips (yardi) 29-Jun-2011 02:57
exercise to try different type of method signature and calling them in php.

VB.net Code
Public Class Class1
    Public Function SayHello(ByVal input As String) As String
        Return "Php input: " & input & "</BR>Dot net library said- 'Hello'"
    End Function
    Public Function ConcatArray(ByVal Values As Object()) As String
        Dim ret As String = String.Empty
        For Each sval As Object In Values
            ret = ret & sval.ToString & " "
        Next
        Return ret.Substring(1, ret.Length - 1)
    End Function
    Public Function ReturnObject(ByVal FirstName As String, ByVal LastName As String) As Name
        Dim obj As New Name
        obj.FirstName = FirstName
        obj.LastName = LastName
        Return obj
    End Function
'To explain Byref doesn't work with php
    Public Function CallByRef(ByRef value As String) As String
        value = "Value to ByRef parameter set in dot net."
        Return "ByRef CallByRef() method called."
    End Function
End Class

Public Class Name
    Public FirstName As String = String.Empty
    Public LastName As String = String.Empty
End Class

Php code to test .net library
<?php
  $class1 = new DOTNET("DotNetTest,"
              ."Version=1.0.0.0,"
                          ."Culture=neutral,"
                      ."PublicKeyToken=6675daefc27eafc4"
              ,"DotNetTest.Class1");
 echo $class1->SayHello("Hi PHP!!!!");
 echo "</P>";

 $parameter[0] = 12345;
 $parameter[1] = "MyString";
 $parameter[2] = false;
 $ret = $class1 -> ConcatArray($parameter);
 echo $ret;
 echo "</P>";

 $Obj = $class1 -> ReturnObject("Sandip","Shimpi");
 echo $Obj->FirstName." ".$Obj->LastName;

 echo "</P>";
 $myByRef = "";
 echo "Value of ByRef Variable before calling .net CallByRef() method: ".$myByRef;
 echo "</BR>";
 echo $class1 -> CallByRef($myByRef);
 echo "</BR>";
 echo "Now value of ByRef Variable: ".$myByRef;
 echo $myByRef;
?>
Anonymous 04-Jul-2010 05:17
As suggested before, you'll likely have to use a full assembly string including the assembly name, the assembly version (not the dll file version), the culture, and the public key token.  Otherwise, you'll get a 'file not found' catchable error.  To quickly find this on your own system to get the ball rolling, open C:\Windows\assembly in explorer (not in cmd as that shows a different view), scroll down the list until you find the assembly you want to work with, hover the mouse over it, and the tooltip shows the exact string to use (though processcorArchitecture if shown is optional).  You'll have to use .net utilities or other methods to automate collecting this info on other machines.

You'll also have to use the fully-qualified class name.  In other words, if you want to use the 'Form' class within 'System.Windows.Forms', you have to use the full class hierarchy 'System.Windows.Forms.Form'.  Otherwise you'll get an unhelpful 'Failed to instantiate .Net object' catchable error.

The following example shows the correct syntax to use the 'Form' class to pop up a blank form from php-cli, which can be used in leu of many Windows GUI PHP extensions out there.  Replace Version with your local version, and PublicKeyToken with your own local key token.

<?php

$full_assembly_string = 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=a8425bc35256e463';
$full_class_name = 'System.Windows.Forms.Form';
$form = new DOTNET($full_assembly_string, $full_class_name);

// code to add buttons, menus, text, etc

$form->Show();

$form_event = '';
while($form_event !== 'close') {

  // handle form functions and events

  }
?>
murat at muratyaman dot co dot uk 11-Feb-2010 05:46
First, I hit the same mine:

"... Failed to instantiate .Net object [Unwrapped, QI for IDispatch] [0x80004002] No such interface supported ..."

In order to load the assembly and class in it successfully, I had to change my AssemblyInfo.cs file regarding the visibility of the types in it.

// some code above

// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(true)]

// some code below
m holmes at windowlogic dot com dot au 21-Sep-2009 09:31
For strongly-named NET assemblies that are registered in the GAC, you can just use the assembly name
e.g: $x = new DOTNET ("myAssembly", "myClass");

For strongly-named NET assemblies that aren't registered in the GAC, you need to use the full assembly string
e.g. $x = new DOTNET('myAssembly, Version=X.X.X.X, Culture=neutral, PublicKeyToken=ZZZZZZZZZZZZ', 'myClass');

You can't instantiate assemblies that haven't been strongly named.

"Strongly named" means that the assembly has a public key. To strongly name your own classes in Visual Studio, go to the Signing tab in the project properties and click the 'sign the assembly' box and choose a key file name.

To register an assembly in the GAC, there are various tools around to do that, but the easiest method is to drag-and-drop the compiled assembly into c:\windows\assembly using windows explorer (a shell extension is installed by default that handles registering dragged files).
kschroeder at mirageworks dot com 08-Apr-2009 11:55
In order to find out what the PublicKeyToken value is, open up Explorer and go to c:\windows\assembly.  In that directory you will see all of the registered assemblies along with their PublicKeyToken value.
sam at bitopia dot co dot uk 02-May-2008 08:54
If you want to load any other assembly apart from mscorlib, you'll need to include it like the following

$x = new DOTNET('The.Assembly.Name, Version=X.X.X.X, Culture=neutral, PublicKeyToken=ZZZZZZZZZZZZ', 'The.Class.Name');

Replace all relevant details.


dotnet クラスのコンストラクタ

  • ≪ dotnet
  • variant ≫
  • PHP Manual
  • dotnet
  • dotnet クラスのコンストラクタ

dotnet::__construct

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

dotnet::__construct — dotnet クラスのコンストラクタ

説明

public dotnet::__construct(string $assembly_name, string $datatype_name, int $codepage = CP_ACP)

新しい dotnet オブジェクトを構築します。

パラメータ

assembly_name
ロードすべきアセンブリ名を指定します。
datatype_name
アセンブリ中のどのクラスをインスタンス化するかを指定します。
codepage
Unicode文字列の変換に使うコードページ。 詳細な情報は com クラスの同じ名前のパラメータを参照ください。

User Contributed Notes

There are no user contributed notes for this page.


variant クラス

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

はじめに

VARIANT は、PHP の zval と同等の COM の値です。構造体形式になっており、 異なる型の値を含めることが可能です。COM 拡張モジュールが提供する variant クラスによって、PHP と COM の間のデータの受け渡しを制御できるように なります。

クラス概要

class variant {
/* メソッド */
public __construct(mixed $value = null, int $type = VT_EMPTY, int $codepage = CP_ACP)
}

variant の例

例1 variant の例

<?php
$v = new variant(42);
print "The type is " . variant_get_type($v) . "<br/>";
print "The value is " . $v . "<br/>";
?>

注意:

値を返したり variant プロパティを取得したりする際に variant が PHP の値に変換されるのは、情報を失うことなく型変換ができる型が 存在する場合に限られます。それ以外の場合は、結果は variant クラスの インスタンスとして返されます。明示的にキャスト演算子を指定することで variant を PHP のネイティブ型として扱うことが可能です。また、 print を使用すると、暗黙のうちに値が文字列に 変換されます。variant に対する計算のためのさまざまな関数が用意されており、 型変換でデータを失うリスクを犯さなくてもそのままの形式で計算を 行うことが可能です。

variant_get_type() も参照ください。

目次

  • variant::__construct — variant クラスのコンストラクタ

User Contributed Notes

darren at dcook dot org 17-Jul-2007 05:59
If you are frustrated that print_r($obj) (where $obj is something returned from a call to a function on a COM object) does not return anything helpful, and that variant_get_type($obj) just returns a number, the function you are actually after is:
  com_print_typeinfo($obj);

It lists all functions, variables, their types in a human-readable (well, programmer-readable) format. Lovely!
richard dot quadling at carval dot co dot uk 26-Feb-2003 05:50
With thanks to Harald Radi and Wez Furlong.

Some VBA functions have optional parameters. Sometimes the parameters you want to pass are not consecutive.

e.g.

GoTo What:=wdGoToBookmark, Name="BookMarkName"
GoTo(wdGoToBookmark,,,"BookMarkName)

In PHP, the "blank" parameters need to be empty.

Which is ...

<?php
// Some servers may have an auto timeout, so take as long as you want.
set_time_limit(0);

// Show all errors, warnings and notices whilst developing.
error_reporting(E_ALL);

// Used as a placeholder in certain COM functions where no parameter is required.
$empty = new VARIANT();

// Load the appropriate type library.
com_load_typelib('Word.Application');

// Create an object to use.
$word = new COM('word.application') or die('Unable to load Word');
print "Loaded Word, version {$word->Version}\n";

// Open a new document with bookmarks of YourName and YourAge.
$word->Documents->Open('C:/Unfilled.DOC');

// Fill in the information from the form.
$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourName'); // Note use of wdGoToBookmark, from the typelibrary and the use of $empty.
$word->Selection->TypeText($_GET['YourName']);

$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourAge');
$word->Selection->TypeText($_GET['YourAge']);

// Save it, close word and finish.
$word->Documents[1]->SaveAs("C:/{$_GET['YourName']}.doc");
$word->Quit();
$word->Release();
$word = null;
print "Word closed.\n";
?>

The example document is ...

Hello [Bookmark of YourName], you are [Bookmark of YourAge] years old.

and it would be called ...

word.php?YourName=Richard%20Quadling&YourAge=35

Regards,

Richard.


variant クラスのコンストラクタ

  • ≪ variant
  • COMPersistHelper ≫
  • PHP Manual
  • variant
  • variant クラスのコンストラクタ

variant::__construct

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

variant::__construct — variant クラスのコンストラクタ

説明

public variant::__construct(mixed $value = null, int $type = VT_EMPTY, int $codepage = CP_ACP)

新しい variant オブジェクトを構築します。

パラメータ

value
初期値。省略するか null を設定すると、VT_EMPTY オブジェクトが作成されます。
type
variant オブジェクトの型を指定します。 有効な値は 定義済み定数 の VT_XXX のうちの一つです。 PHP は参照渡しを自動で認識できます。 つまり、variant オブジェクトとして渡す必要すらないということです。 VARIANT 型に関する追加情報は、MSDN ライブラリを調べてください。
codepage
文字列をUnicodeに変換するのに使うコードページ。 詳細な情報は com クラスの同じ名前のパラメータを参照ください。

User Contributed Notes

There are no user contributed notes for this page.


COMPersistHelper クラス

(PHP 5, PHP 7, PHP 8)

はじめに

COMPersistHelper クラスは、 php.ini の open_basedir ディレクティブと ストリーム リソース を考慮して COM と PHP の相互運用性を高めます。

クラス概要

final class COMPersistHelper {
/* メソッド */
public __construct(?variant $variant = null)
public GetCurFileName(): string|false
public GetMaxStreamSize(): int
public InitNew(): bool
public LoadFromFile(string $filename, int $flags = 0): bool
public LoadFromStream(resource $stream): bool
public SaveToFile(?string $filename, bool $remember = true): bool
public SaveToStream(resource $stream): bool
}

目次

  • COMPersistHelper::__construct — COMPersistHelper オブジェクトを構築する
  • COMPersistHelper::GetCurFileName — 現在のファイル名を取得する
  • COMPersistHelper::GetMaxStreamSize — ストリームのサイズの最大値を取得する
  • COMPersistHelper::InitNew — オブジェクトをデフォルトの状態に初期化する
  • COMPersistHelper::LoadFromFile — オブジェクトをファイルから読み込む
  • COMPersistHelper::LoadFromStream — ストリームからオブジェクトを読み込む
  • COMPersistHelper::SaveToFile — オブジェクトをファイルに保存する
  • COMPersistHelper::SaveToStream — オブジェクトをストリームに保存する

User Contributed Notes

There are no user contributed notes for this page.


COMPersistHelper オブジェクトを構築する

  • ≪ COMPersistHelper
  • COMPersistHelper::GetCurFileName ≫
  • PHP Manual
  • COMPersistHelper
  • COMPersistHelper オブジェクトを構築する

COMPersistHelper::__construct

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::__construct — COMPersistHelper オブジェクトを構築する

説明

public COMPersistHelper::__construct(?variant $variant = null)

永続化を助けるオブジェクトを構築します。 これは通常、variant に結びつけて使います。

パラメータ

variant
IDispatch を実装した COM オブジェクト。 COMPersistHelper のあらゆるメソッドを呼べるようにするためには、 IPersistFile, IPersistStream かつ/または IPersistStreamInit をオブジェクトが実装していなければなりません。 variant に nullを渡す意味があるのは、 COMPersistHelper::LoadFromStream() を呼び出してオブジェクトを読み込んだ場合に限ります。

User Contributed Notes

There are no user contributed notes for this page.


現在のファイル名を取得する

  • ≪ COMPersistHelper::__construct
  • COMPersistHelper::GetMaxStreamSize ≫
  • PHP Manual
  • COMPersistHelper
  • 現在のファイル名を取得する

COMPersistHelper::GetCurFileName

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::GetCurFileName — 現在のファイル名を取得する

説明

public COMPersistHelper::GetCurFileName(): string|false

オブジェクトに関連付けられた現在のファイル名を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

オブジェクトに関連付けられた現在のファイル名を返します。

エラー / 例外

関連付けられたオブジェクトが COM のインターフェイス IPersistFile を実装していないか、 IPersistFile::GetCurFile() の呼び出しに失敗した場合、 com_exception がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


ストリームのサイズの最大値を取得する

  • ≪ COMPersistHelper::GetCurFileName
  • COMPersistHelper::InitNew ≫
  • PHP Manual
  • COMPersistHelper
  • ストリームのサイズの最大値を取得する

COMPersistHelper::GetMaxStreamSize

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::GetMaxStreamSize — ストリームのサイズの最大値を取得する

説明

public COMPersistHelper::GetMaxStreamSize(): int

オブジェクトを保存するのに必要なストリームのサイズを取得します(バイト単位)。

パラメータ

この関数にはパラメータはありません。

戻り値

オブジェクトを保存するのに必要なストリームのサイズを返します(バイト単位)。

エラー / 例外

関連付けられたオブジェクトが COM のインターフェイス IPersistStreamInit と IPersistStream をいずれも実装していないか、 IPersistStream::GetSizeMax() の呼び出しに失敗した場合、 com_exception がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


オブジェクトをデフォルトの状態に初期化する

  • ≪ COMPersistHelper::GetMaxStreamSize
  • COMPersistHelper::LoadFromFile ≫
  • PHP Manual
  • COMPersistHelper
  • オブジェクトをデフォルトの状態に初期化する

COMPersistHelper::InitNew

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::InitNew — オブジェクトをデフォルトの状態に初期化する

説明

public COMPersistHelper::InitNew(): bool

オブジェクトをデフォルトの状態に初期化します

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

関連付けられたオブジェクトが COM のインターフェイス IPersistStreamInit を実装していないか、 IPersistStreamInit::Init() の呼び出しに失敗した場合、 com_exception がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


オブジェクトをファイルから読み込む

  • ≪ COMPersistHelper::InitNew
  • COMPersistHelper::LoadFromStream ≫
  • PHP Manual
  • COMPersistHelper
  • オブジェクトをファイルから読み込む

COMPersistHelper::LoadFromFile

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::LoadFromFile — オブジェクトをファイルから読み込む

説明

public COMPersistHelper::LoadFromFile(string $filename, int $flags = 0): bool

指定されたファイルを開き、そのファイルの内容でオブジェクトを初期化します。

パラメータ

filename
読み込むオブジェクトが保存されたファイル名
flags
ファイルをオープンする際のアクセスモード。 有効な値は » STGM enumeration を参照ください。 メソッドはこの値を参考程度に扱い、必要に応じてより制限的なパーミッションを追加します。 flags に 0 を指定すると、 ユーザーがファイルを開くときのデフォルトのパーミッションを使ってファイルを開きます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

関連付けられたオブジェクトが COM のインターフェイス IPersistFile を実装していないか、 IPersistFile::Load() の呼び出しに失敗した場合、 com_exception がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


ストリームからオブジェクトを読み込む

  • ≪ COMPersistHelper::LoadFromFile
  • COMPersistHelper::SaveToFile ≫
  • PHP Manual
  • COMPersistHelper
  • ストリームからオブジェクトを読み込む

COMPersistHelper::LoadFromStream

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::LoadFromStream — ストリームからオブジェクトを読み込む

説明

public COMPersistHelper::LoadFromStream(resource $stream): bool

以前オブジェクトを保存したストリームの内容でオブジェクトを初期化します。

パラメータ

stream
オブジェクトを読み込むストリームリソース

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

関連付けられたオブジェクトが COM のインターフェイス IPersistStream を実装していないか、 IPersistStream::Load() の呼び出しに失敗した場合、 com_exception がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


オブジェクトをファイルに保存する

  • ≪ COMPersistHelper::LoadFromStream
  • COMPersistHelper::SaveToStream ≫
  • PHP Manual
  • COMPersistHelper
  • オブジェクトをファイルに保存する

COMPersistHelper::SaveToFile

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::SaveToFile — オブジェクトをファイルに保存する

説明

public COMPersistHelper::SaveToFile(?string $filename, bool $remember = true): bool

オブジェクトのコピーを指定されたファイルに保存します

パラメータ

filename
オブジェクトを保存するファイル名
remember
filename パラメータを現在作業中のファイルに使うかを指定します。 true を指定すると、 filename は現在作業中のファイルに指定され、 保存された後にダーティーフラグがクリアされます。 false を指定すると、保存する操作は "ファイルに名前を付けて保存" する操作になります。 この場合、現在のファイルは変更されず、オブジェクトのダーティーフラグはクリアされません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

関連付けられたオブジェクトが COM のインターフェイス IPersistFile を実装していないか、 IPersistFile::Save() の呼び出しに失敗した場合、 com_exception がスローされます。

例

例1 COMPersistHelper::saveToFile() の基本的な使い方

<?php
$word = new COM('Word.Application');
$doc = $word->Documents->Add();
$ph = new COMPersistHelper($doc);
$ph->SaveToFile('C:\\Users\\cmb\\Documents\\my.docx');
$word->Quit();
?>

User Contributed Notes

There are no user contributed notes for this page.


オブジェクトをストリームに保存する

  • ≪ COMPersistHelper::SaveToFile
  • com_exception ≫
  • PHP Manual
  • COMPersistHelper
  • オブジェクトをストリームに保存する

COMPersistHelper::SaveToStream

(PHP 5, PHP 7, PHP 8)

COMPersistHelper::SaveToStream — オブジェクトをストリームに保存する

説明

public COMPersistHelper::SaveToStream(resource $stream): bool

オブジェクトを指定されたストリームに保存します。

パラメータ

stream
オブジェクトを保存するストリーム リソース

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

関連付けられたオブジェクトが COM のインターフェイス IPersistStream と IPersistStreamInit をいずれも実装していないか、 IPersistStream::Save() の呼び出しに失敗した場合、 com_exception がスローされます。

User Contributed Notes

There are no user contributed notes for this page.


com_exception クラス

(PHP 5, PHP 7, PHP 8)

はじめに

クラス概要

final class com_exception extends Exception {
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 継承したメソッド */
public Exception::__construct(string $message = "", int $code = 0, ?Throwable $previous = null)
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

User Contributed Notes

There are no user contributed notes for this page.


com_safearray_proxy クラス

(PHP 5, PHP 7, PHP 8)

はじめに

com_safearray_proxy は、 SafeArray 型上での多次元配列へのアクセスを解決するのに使われる内部クラスです。

クラス概要

final class com_safearray_proxy {
}

User Contributed Notes

There are no user contributed notes for this page.


COM関数

参考

COM についてのより詳細な情報は » COM 仕様 を読みましょう。 PHP と COM の FAQ からも情報が得られるでしょう。 MS Office アプリケーションをサーバーサイドで使用しようと考えておられるなら、 » Considerations for Server-Side Automation of Office の情報も読んでおくべきでしょう。

目次

  • com_create_guid — グローバルユニーク ID (GUID) を生成する
  • com_event_sink — COM オブジェクトのイベントを PHP オブジェクトに接続する
  • com_get_active_object — すでに実行中の COM オブジェクトのインスタンスへのハンドルを返す
  • com_load_typelib — タイプライブラリを読み込む
  • com_message_pump — COM メッセージを処理し、timeoutms ミリ秒の間待つ
  • com_print_typeinfo — ディスパッチインターフェイスのために、PHP のクラス定義を出力する
  • variant_abs — variant の絶対値を返す
  • variant_add — 2 つの variant 値を「加算」し、結果を返す
  • variant_and — 2 つの variant の論理積を計算し、結果を返す
  • variant_cast — variant を、別の型の新しい variant に変換する
  • variant_cat — 2 つの variant 値を連結し、その結果を返す
  • variant_cmp — 2 つの variant を比較する
  • variant_date_from_timestamp — Unix タイムスタンプを、日付形式の variant で返す
  • variant_date_to_timestamp — 日付/時刻の variant 値を Unix タイムスタンプに変換する
  • variant_div — 2 つの variant の除算結果を返す
  • variant_eqv — 2 つの variant のビット値が等しいかどうかを調べる
  • variant_fix — variant の整数部を返す
  • variant_get_type — variant オブジェクトの型を返す
  • variant_idiv — variants を整数に変換し、除算の結果を返す
  • variant_imp — 2 つの variant のビット implication を行う
  • variant_int — variant の整数部を返す
  • variant_mod — 2 つの variant の除算を行い、剰余を返す
  • variant_mul — 2 つの variant の乗算を行い、その結果を返す
  • variant_neg — variant の論理否定演算を行う
  • variant_not — variant のビット否定演算を行う
  • variant_or — 2 つの variant の論理和を計算する
  • variant_pow — 2 つの variant の累乗計算を行い、その結果を返す
  • variant_round — 指定した桁で variant を丸める
  • variant_set — variant オブジェクトに新しい値を代入する
  • variant_set_type — variant を「その場で」別の型に変換する
  • variant_sub — 左の variant から右の variant を引き、その結果を返す
  • variant_xor — 2 つの variant の排他的論理和を計算する

User Contributed Notes

Sorin Negulescu 05-Nov-2016 10:49
I have spent a lot of hours trying to make word.application work on a Windows Server using Apache as a service.
The application was working if Apache was started from command line (not as a service).

In the hope that this will help others not to lose hours of trying to solve this problem here is what I found out:

- In php.ini make sure you have the following key under the [COM_DOT_NET]: extension=php_com_dotnet.dll
- Apache shall run under a normal user account (not SYSTEM account). Run services.msc and fill-in the info of the user under the Apache service's Properties tab.
- Make sure you are able to start MS Word normally under that user account and dismiss all the dialogs that may appear (license, your info with initials, etc.). Start Word once again and make sure no dialogs appear.
- Launch dcomcnfg.exe->Console Root->Component Services->Computers->My Computer->DCOM Config->Microsoft Office Word 97 - 2003->Right Click(Properties)->Identity Tab and fill in the same user account information as for Apache service.
- If you cannot find the Microsoft Office Word 97 - 2003, make sure you are launching the correct DCOM Config (64 bit vs 32 bit) depending on what version of Office you have installed. To launch the 32 bit version run: mmc comexp.msc /32

Before following the steps described above, the winword.exe app appears in task manager but, if you look at the memory consumption you can notice two things:
- it increases slowly
- it stops usually at about 7-8 MB.

Keywords: COM, word.application, Apache, service, winword, timeout, no error
larrywalker at at chelseagroton dot com 02-Sep-2008 08:53
To run a php script in a background process and pass it you var use

<?php

$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("c:\\xampp\\php\\php.exe

c:\\xampp\\Not_on_Web\\ftptestback.php --user=$username", 7, false);

?>

Works for me.
monica at digitaldesignservices dot com 27-Dec-2007 02:41
Working with Word 2003 COM object.

Have you been trying to work with the Word.Application COM and the Word Document would crash and the PHP script would hang?

Turns out that there is an issue within the Office COM object that doesn't let the web application (IIS, Apache) scripting engine release the object after instancing the COM.  The Service Pack 3 office update claims to remedy this.  Will test and post findings.
tomfmason at nospam-gmail dot com 08-Oct-2007 07:26
To get the cpu load percentage you can do something like this.

<?php
$wmi = new COM('winmgmts://');
$processor = $wmi->ExecQuery("SELECT * FROM Win32_Processor");
foreach($processor as $obj){
    $cpu_load_time = $obj->LoadPercentage;
}
echo $cpu_load_time;
?>

reference http://msdn2.microsoft.com/en-us/library/aa394373.aspx

To list current apache instances

<?php
$wmi = new COM('winmgmts://');
$processes = $wmi->ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'httpd.exe'");
foreach($processes as $process){
    echo $process->CommandLine . "<br />";
    echo $process->ProcessId . "<br />";
}
?>

reference http://msdn2.microsoft.com/en-us/library/aa394372.aspx

To run a php script in a background process

<?php
$dir = "C:\\path\\to\\dir";
$php_path = "C:\\path\\to\\php.exe";
$file = "somescript.php";
//send time current timestamp
$cmd_options = "-t " . time();
$wscript = new COM('WScript.Shell');
$wscript->Run("cmd /K CD $php_path $dir\\$file  &  ", 0, false);
?>

Enjoy

Tom
naveed at php dot net 10-Mar-2007 05:24
Here is a spell check implementation that displays the suggestion list for each misspelled word.

<?php
function SpellCheck($input)
{
    $word=new COM("word.application") or die("Cannot create Word object");
    $word->Visible=false;
    $word->WindowState=2;
    $word->DisplayAlerts=false;
    $doc=$word->Documents->Add();
    $doc->Content=$input;
    $doc->CheckSpelling();
    $result= $doc->SpellingErrors->Count;
    if($result!=0)
    {
        echo "Input text contains misspelled words.\n\n";
        for($i=1; $i <= $result; $i++)
        {
            echo "Original Word: " .$doc->SpellingErrors[$i]->Text."\n";
            $list=$doc->SpellingErrors[$i]->GetSpellingSuggestions();
            echo "Suggestions: ";
            for($j=1; $j <= $list->Count; $j++)
            {
                $correct=$list->Item($j);
                echo $correct->Name.",";
            }
            echo "\n\n";
        }
    }
    else
    {
        echo "No spelling mistakes found.";
    }
    $word->ActiveDocument->Close(false);
    $word->Quit();
    $word->Release();
    $word=null;
}

$str="Hellu world. There is a spellling error in this sentence.";
SpellCheck($str);
?>
Francois-R dot Boyer at PolyMtl dot ca 13-Feb-2007 08:32
I had the problem when trying to call Access VBA scripts from PHP; the call was working but Access would never quit.  The problem was that the Apache server is running as SYSTEM, and not a user we normally use to run Office.  And as the first time a user runs Office, it asked the SYSTEM user to enter its name and initials! ;-)

To correct this problem: Stop Apache, go to Services, Apache, Properties, "Log On" tab, and check "Allow service to interact with desktop.  Restart Apache, then open your office application, in a page loaded by the Apache server, with a small PHP code like this, :

<?php
$app = new COM("Access.Application"); // or Word.Application or Excel.Application ...
$app->Visible = true; // so that we see the window on screen
?>

Put the name you want and quit the application.  Now your Office application should terminate correctly the next time you load it with a COM object in PHP.  You can stop Apache uncheck the "Allow service to interact with desktop", and restart Apache if you like.  I don't even require a Quit or anything to be sent to Access, it quits automatically when PHP terminates.

And for those who wish to know how I'm calling Access VBA scripts, instead of using ODBC or any other way to send SQL requests, which does not seem to work to call VBA scripts, I open the database as a COM object and it works fine:

<?php
$db_com = new COM("pathname of the file.mdb");
$result = $db_com->Application->Run("function_name", 'param1', 'param2', '...');
?>
03-Oct-2006 04:11
If someone want to get a COM object out of a DCOM object can do something like that:

<?php
  $dcom_obj = new COM('dacom.object','remotehost') or die("Unable to get DCOM object!");
  $com_obj = new Variant(NULL);
  $dcom_obj->Get_Module($com_obj); //user function which returns a custom IDispatch (casted as variant*)
?>

Hopefully this will help someone, because it took me quite long to figure this out.
kiotech at hotmail dot com 18-Jul-2006 06:35
For use parameters with PHP this is a Code Example

<?php
$ObjectFactory= New COM("CrystalReports11.ObjectFactory.1");
  $crapp = $ObjectFactory->CreateObject("CrystalDesignRunTime.Application");
  $creport = $crapp->OpenReport("//report1.rpt", 1);

      $z= $creport->ParameterFields(1)->SetCurrentValue("Mango");
      $z= $creport->ParameterFields(2)->SetCurrentValue(5000);

  $creport->ExportOptions->DiskFileName="reportin.pdf";
  $creport->ExportOptions->PDFExportAllPages=true;
  $creport->ExportOptions->DestinationType=1;   $creport->ExportOptions->FormatType=31;
  $creport->Export(false);

$len = filesize("reportin.pdf");
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=reportin.pdf");
readfile("reportin.pdf");
?>
a dot kulikov at pool4tool dot com 13-Mar-2006 09:36
In case you are wondering how to group rows or columns in the freshly created EXCEL files, then this may help you

<?php
   /***
    * Grouping Rows optically in Excel Using a COM Object
    *
    * That was not easy, I have spent several hours of trial and error to get
    * this thing to work!!!
    *
    * @author Kulikov Alexey <a.kulikov@gmail.com>
    * @since  13.03.2006
    *
    * @see    Open Excel, Hit Alt+F11, thne Hit F2 -- this is your COM bible
    ***/

   //starting excel
   $excel = new COM("excel.application") or die("Unable to instanciate excel");
   print "Loaded excel, version {$excel->Version}\n";

   //bring it to front
   #$excel->Visible = 1;//NOT

   //dont want alerts ... run silent
   $excel->DisplayAlerts = 0;

   //create a new workbook
   $wkb = $excel->Workbooks->Add();

   //select the default sheet
   $sheet=$wkb->Worksheets(1);

   //make it the active sheet
   $sheet->activate;

   //fill it with some bogus data
   for($row=1;$row<=7;$row++){
       for ($col=1;$col<=5;$col++){

          $sheet->activate;
          $cell=$sheet->Cells($row,$col);
          $cell->Activate;
          $cell->value = 'pool4tool 4eva ' . $row . ' ' . $col . ' ak';
       }//end of colcount for loop
   }

   ///////////
   // Select Rows 2 to 5
   $r = $sheet->Range("2:5")->Rows;

   // group them baby, yeah
   $r->Cells->Group;

   // save the new file
   $strPath = 'tfile.xls';
   if (file_exists($strPath)) {unlink($strPath);}
   $wkb->SaveAs($strPath);

   //close the book
   $wkb->Close(false);
   $excel->Workbooks->Close();

   //free up the RAM
   unset($sheet);

   //closing excel
   $excel->Quit();

   //free the object
   $excel = null;
?>
Pedro Heliodoro 05-Mar-2006 02:38
Using the Windows Media Player OCX and the latest snap of PHP 5.1 i was able to eject a CD-ROM drive

<?php
//create an instance of Windows Media Player
$mp = new COM("WMPlayer.OCX");
//ejects the first cd-rom on the drive list
$mp->cdromcollection->item(0)->eject();

?>
allan666 at gmail dot com 29-Sep-2005 03:37
If you are using a COM object that opens windows or dialogs (like Office applications), those windows or dialogs will not appear and will stay invisible even if you use codes like

$word->visible = true;

To solve this problem, go to the web service properties (Administrative Tools) and click (in the Logon TAB) "Allow the Service to Iterate with desktop".

This explain lots of problems to close applications. When you try to close, the dialos asking to save the file must appear, but only in the option to iterate with desktop is on.

Hope it helps.
bruce at yourweb dot com dot au 23-Apr-2005 05:47
Simple convert xls to csv
<?php
// starting excel
$excel = new COM("excel.application") or die("Unable to instanciate excel");
print "Loaded excel, version {$excel->Version}\n";

//bring it to front
#$excel->Visible = 1;//NOT
//dont want alerts ... run silent
$excel->DisplayAlerts = 0;

//open  document
$excel->Workbooks->Open("C:\\mydir\\myfile.xls");
//XlFileFormat.xlcsv file format is 6
//saveas command (file,format ......)
$excel->Workbooks[1]->SaveAs("c:\\mydir\\myfile.csv",6);

//closing excel
$excel->Quit();

//free the object
$excel->Release();
$excel = null;
?>
michael at example dot com 23-Feb-2005 12:42
After alot of trouble with IIS 6/Windows 2003 and PHP 5.0.2 I figured out how to use Imagemagick COM+/OLE interface. Seems you have to recreate the COM object after each convert() otherwise it will sometimes fail with very strange errors, since the PHP COM interface is not as stable as the old ASP one apparently is.
06-Jan-2005 09:11
if you want to add a new hyperlink with excel :

<?php
$cell=$sheet->Range('O'.$j);
$cell->Hyperlinks->Add($cell ,'here_your_file');
?>

I write this note because is very difficult to find
the good method to do that .

Merci beaucoup
sorin dot andrei at mymail dot ro 25-Sep-2004 02:24
[Editor's Note:
Serializing the object, storing it and then (on the next page) unserializing it WILL work.
End Note]

the big problem for PHP is it can't save in session an COM object

an samples code is here. This works just first time, then give the error:
Call to undefined method com::Refresh() on line  $mMap->Refresh();
the reson is he can't save the object $mMap in session

<?php
    session_start();
      if (isset($_SESSION['map'])) {
            $mMap = $_SESSION['map'];
        }
        else
        {
        $ArcIMSConnector = new COM ("aims.ArcIMSConnector")  or die("can not create AIMS message object");
            echo "Loaded ArcIMSConnector, <br>";
            $ArcIMSConnector->ServerName = "map.sdsu.edu";
            $ArcIMSConnector->ServerPort = 5300;

            $mMap = new COM ("aims.Map")  or die("can not create aims.Map message object");
            echo "Loaded aims.Map, <br>";
            print "AIMS-ServerName= $ArcIMSConnector->ServerName <br>";

            $resultInit= $mMap->InitMap($ArcIMSConnector,"Worldgeography");

            $mMap->Width    = 400;            //                                'Width of the map in pixels
            $mMap->Height   = 300;            //                                'Height of the map in pixels
            $mMap->BackColor = 15130848;
            $_SESSION['map'] = $mMap;
        }

    $resultRefresh = $mMap->Refresh();                                //Refresh the map
    $urlImage      = $mMap->GetImageAsUrl();
    print "<br>urlImage=$urlImage<br>";

    print "<br><IMG SRC='$urlImage'>";

/*
    $ArcIMSConnector->Release();
    $ArcIMSConnector = null;

    $mMap->Release();
    $mMap = null;
*/

?>
ferozzahid [at] usa [dot] com 24-Aug-2004 12:06
To pass a parameter by reference to a COM function, you need to pass VARIANT to it. Common data types like integers and strings will not work for it.

As an example, calling a function that retrieves the name of a person will look like:

<?php
$Name = new VARIANT;

$comobj = new COM("MyCOMOBj.Component") or die("Couldn't create the COM Component");

if(!$comobj->GetName($Name)) {
    echo("Could not retrieve name");
}
else {
    echo("The name retrieved is : " . $Name->value);
}
?>

$Name->type will contain the type of the value stored in the VARIANT e.g. VT_BSTR.

Note For PHP 5:

Insted of '$Name->value', we can use only '$Name' for getting the value stored in the VARIANT. To get the type of the value stored in the VARIANT, use 'variant_get_type($Name)'.

Feroz Zahid
Shawn Coppock 11-Aug-2004 01:15
For those of us that are not experts with object models, if you have Microsoft Excel or Microsoft Word available, go into the Visual Basic Editor (Alt+F11). Now you can open the object browser window (F2) and see what you find.

If you select "Word" in the object browser, then the classes and members of that class are displayed below. For example, if you click on "Selection" in the classes column, and then "Font" in the members column, you will then see "Property Font As Font Member of Word.Selection" displayed at the bottom. Click on the "Font" link there.

Click on Word "Selection" again in the classes column, and then "PageSetup" in the members column, you will then see "Property PageSetup As PageSetup Member of word.Selection" displayed at the bottom. Click on the "PageSetup" link there.

Using the above examples, you can now formulate your Word Document from php. Here is a simple example that creates a 1 & 1/2" space for text based on the margin settings & with dark red text and an 8pt Helvetica font face:

<?php
$content = "Insert Sample Text Here\n\nThis starts a new paragraph line.";
$word= new COM("word.application") or die("Unable to create Word document");
print "Loaded Word, version {$word->Version}\n";
$word->Visible = 0;
$word->Documents->Add();
$word->Selection->PageSetup->LeftMargin = '3"';
$word->Selection->PageSetup->RightMargin = '4"';
$word->Selection->Font->Name = 'Helvetica';
$word->Selection->Font->Size = 8;
$word->Selection->Font->ColorIndex= 13; //wdDarkRed = 13
$word->Selection->TypeText("$content");
$word->Documents[1]->SaveAs("some_tst.doc");
$word->quit();
echo "done";
?>

This example (and others) worked for me with Microsoft Word 10.0 Object Library (MS Word 2002), Apache & PHP on Windows XP. Experimenting using the Visual Basic editor will yield some amazing documents from PHP as it will help you see the relationships of the objects used and give you an idea as to how to construct your code. But be prepared for an occaisional PHP.exe crash if your code is way off base.

Hope this helps!
angelo [at] mandato <dot> com 18-May-2004 04:30
Useful PHP functions I created (similar to other standard PHP database functions) for working with an ADO datasource:
<?php
    // ado.inc.php

    $ADO_NUM = 1;
    $ADO_ASSOC = 2;
    $ADO_BOTH = 3;

    function ado_connect( $dsn )
    {
        $link = new COM("ADODB.Connection");
        $link->Open($dsn);
        return $link;
    }

    function ado_close( $link )
    {
        $link->Close();
    }

    function ado_num_fields( $rs )
    {
        return $rs->Fields->Count;
    }

    function ado_error($link)
    {
        return $link->Errors[$link->Errors->Count-1]->Number;
    }

    function ado_errormsg($link)
    {
        return $link->Errors[$link->Errors->Count-1]->Description;
    }

    function ado_fetch_array( $rs, $result_type,  $row_number = -1 )
    {
        global $ADO_NUM, $ADO_ASSOC, $ADO_BOTH;
        if( $row_number > -1 ) // Defined in adoint.h - adBookmarkFirst    = 1
            $rs->Move( $row_number, 1 );

        if( $rs->EOF )
            return false;

        $ToReturn = array();
        for( $x = 0; $x < ado_num_fields($rs); $x++ )
        {
            if( $result_type == $ADO_NUM || $result_type == $ADO_BOTH )
                $ToReturn[ $x ] = $rs->Fields[$x]->Value;
            if( $result_type == $ADO_ASSOC || $result_type == $ADO_BOTH )
                $ToReturn[ $rs->Fields[$x]->Name ] = $rs->Fields[$x]->Value;
        }
        $rs->MoveNext();
        return $ToReturn;
    }

    function ado_num_rows( $rs )
    {
        return $rs->RecordCount;
    }

    function ado_free_result( $rs )
    {
        $rs->Close();
    }

    function ado_query( $link, $query )
    {
        return $link->Execute($query);
    }

    function ado_fetch_assoc( $rs,  $row_number = -1 )
    {
        global $ADO_ASSOC;
        return  ado_fetch_array( $rs, $ADO_ASSOC, $row_number);
    }

    function ado_fetch_row( $rs,  $row_number = -1 )
    {
        global $ADO_NUM;
        return ado_fetch_array( $rs, $ADO_NUM, $row_number);
    }

    // Extra functions:
    function ado_field_len( $rs, $field_number )
    {
        return $rs->Fields[$field_number]->Precision;
    }

    function ado_field_name( $rs, $field_number )
    {
        return $rs->Fields[$field_number]->Name;
    }

    function ado_field_scale( $rs, $field_number )
    {
        return $rs->Fields[$field_number]->NumericScale;
    }

    function ado_field_type( $rs, $field_number )
    {
        return $rs->Fields[$field_number]->Type;
    }

?>

The aod version was a typo.
mark dickens at mindspring dot com 29-Feb-2004 08:03
Just a note to those wanting to use COM to interface to printers under Windows 2000/XP.  If it doesn't work or seems to hang, try changing the logon identity under which the Apache (assuming you're using Apache) service is running from the System account to another account.  By default most services will install to run under the System account and although the System account has total authority on the computer it is running on, it has no authority outside of that realm as I understand it.  Apparently accessing printers is considered "outside the realm".  I used this technique to interface a Dymo thermal label printer to my server and it works now.
alanraycom at el hogar dot net com 03-Dec-2003 03:50
XSLT transformations using MSXML can be done with this code

<?php
function xsltransform1($xslpath,$xmlstring)
 {
  $xml= new COM("Microsoft.XMLDOM");
  $xml->async=false;
  // $xmlstring is an xml string
  $xml->load($xmlstring);
  $xsl = new COM("Microsoft.XMLDOM");
  $xsl->async=false;
  // $xslpath is path to an xsl file
  $xsl->load($xslpath);
  $response=$xml->transformNode($xsl);
  unset($xml);
  unset($xsl);
  return $response;
 }
?>

enjoy
Alan Young
chris at hitcatcher dot com 01-Dec-2003 04:19
Many COM objects don't do well when passing long (win32) filenames as function parameters.  You can get the 8.3 name of the folder or file on *most* (some win platforms don't support it, and it can be toggled off in the registry for performance reasons) servers using the following:

<?php
//create FSO instance
$exFSO = new COM("Scripting.FileSystemObject") or die ("Could not create Scripting.FileSystemObject");

//set vars
$myDir = "C:\\Program Files\\";
$myFile = "a long file name.txt";

//get folder & file objects
$exDir = $exFSO->GetFolder($myDir);
$exFile = $exFSO->GetFile($myDir . $myFile);
echo $exDir->ShortPath;
echo $exFile->ShortPath;
?>
23-Nov-2003 09:57
Here is an example of reading the custom properties like Author, Keywords, etc. which are stored in MS Office and other Windows files. You must install and register dsofile as described at http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351. The .frm file in that distribution lists most of the available properties.

<?php
// the file you wish to access
$fn = '/docs/MFA.xls';

$oFilePropReader = new COM('DSOleFile.PropertyReader');
$props = $oFilePropReader->GetDocumentProperties($fn);

// one syntax
$au = com_get($props, 'Author');
print "au: $au \n";

//another syntax
$str = 'LastEditedBy';
$lsb = $props->$str;
var_dump($lsb);

// set a property if you wish
if (!$props->IsReadOnly()) {
  $props->Subject = 'tlc';
}
?>
brana 17-Nov-2003 05:17
How to send email via MAPI (works with Windows NT4, apache launched as a service)

<?php
#New MAPI session...
$session = new COM("MAPI.Session");

#Login
$strProfileInfo = "exchange_server" . chr(10) . "exchange_user";
$session->Logon("", "", 0, 1, 0, 1, $strProfileInfo);

# New message...
$msg = $session->Outbox->Messages->Add();
$msg->Subject = "Subject";
$msg->Text = "body";

#set recipients...
$rcpts = $msg->Recipients;
$rcpts->AddMultiple("toto@toto.com", 1);   #To...
$rcpts->AddMultiple("titi@titi.com", 2);   #Cc...
$rcpts->AddMultiple("tutu@tutu.com", 3);   #Bcc...

# Resolve senders
$rcpts->Resolve();

#Send message
$msg->Send();

#Logoff
$session->Logoff();

#Cleanup
if($msg!=null) {
    $msg->Release();
    $msg = null;
}
if($session!=null) {
    $session->Release();
    $session = null;
}
?>

ps : NT account launching the service and exchange user must match !
php at dictim dot com 06-Sep-2003 01:17
This took me days to work out how to do so I gotta share it:

How to get the word count from a MS Word Document:

<?php
#Instantiate the Word component.

$word = new COM("word.application") or die("Unable to instantiate Word");

$word->Visible = 1;

$word->Documents->Open("c:/anydocument.doc");
$temp = $word->Dialogs->Item(228);
$temp->Execute();
$numwords = $temp->Words();

echo $numwords;

$word->Quit();
?>

Note that this is the only way to get the word count accurately:
$word->ActiveDocument->Words->Count;
Will see all carriage returns and punctuation as words so is wildy innaccurate.
tomas dot pacl at atlas dot cz 16-Jun-2003 06:07
Passing parameters by reference in PHP 4.3.2 (and in a future releases of PHP )

In PHP 4.3.2 allow_call_time_pass_reference option is set to "Off" by default and future versions may not support this option any longer.
Some COM functions has by-reference parameters. VARIANT object must be used to call this functions, but it would be passed without an '&' before variable name.

Example:

<?php
$myStringVariant = new VARIANT("over-write me", VT_BSTR);

/* works */
$result = $comobj->DoSomethingTo($myStringVariant );

/* works only with allow_call_time_pass_reference option set to "On" and may not work in a future release of PHP */
$result = $comobj->DoSomethingTo(&$myStringVariant );

/* The value in the variant can be retrieved by: */
$theActualValue = $myStringVariant->value;
?>
php at racinghippo dot co dot uk 22-Mar-2003 05:47
PASSING/RETURNING PARAMETERS BY REFERENCE
=========================================

Some COM functions not only return values through the return value, but also act upon a variable passed to it as a parameter *By Reference*:

RetVal = DoSomethingTo (myVariable)

Simply sticking an '&' in front of myVariable doesn't work - you need to pass it a variant of the correct type, as follows:

  $myStringVariant = new VARIANT("over-write me", VT_BSTR);
  $result = $comobj->DoSomethingTo( &$myStringVariant );

The value in the variant can then be retrieved by:

  $theActualValue = $myStringVariant->value;

Other types of variant can be created as your needs demand - see the preceding section on the VARIANT type.
richard dot quadling at carval dot co dot uk 26-Feb-2003 05:51
With thanks to Harald Radi and Wez Furlong.

Some VBA functions have optional parameters. Sometimes the parameters you want to pass are not consecutive.

e.g.

GoTo What:=wdGoToBookmark, Name="BookMarkName"
GoTo(wdGoToBookmark,,,"BookMarkName)

In PHP, the "blank" parameters need to be empty.

Which is ...

<?php
// Some servers may have an auto timeout, so take as long as you want.
set_time_limit(0);

// Show all errors, warnings and notices whilst developing.
error_reporting(E_ALL);

// Used as a placeholder in certain COM functions where no parameter is required.
$empty = new VARIANT();

// Load the appropriate type library.
com_load_typelib('Word.Application');

// Create an object to use.
$word = new COM('word.application') or die('Unable to load Word');
print "Loaded Word, version {$word->Version}\n";

// Open a new document with bookmarks of YourName and YourAge.
$word->Documents->Open('C:/Unfilled.DOC');

// Fill in the information from the form.
$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourName'); // Note use of wdGoToBookmark, from the typelibrary and the use of $empty.
$word->Selection->TypeText($_GET['YourName']);

$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourAge');
$word->Selection->TypeText($_GET['YourAge']);

// Save it, close word and finish.
$word->Documents[1]->SaveAs("C:/{$_GET['YourName']}.doc");
$word->Quit();
$word->Release();
$word = null;
print "Word closed.\n";
?>

The example document is ...

Hello [Bookmark of YourName], you are [Bookmark of YourAge] years old.

and it would be called ...

word.php?YourName=Richard%20Quadling&YourAge=35

Regards,

Richard.
pchason at juno dot com 11-Dec-2002 11:23
Searched for days on how to set up a multi-column html output grid that didn't use an array when creating an ADODB connection. Couldn't find one so I figured it out myself. Pretty simple. Wish I would have tried it myself sooner. Commented code with database connection is below...

<html>
<body>
<table>
<?php
//create the database connection
$conn = new COM("ADODB.Connection");
$dsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("mydb.mdb");
$conn->Open($dsn);
//pull the data through SQL string
$rs = $conn->Execute("select clients from web");
$clients = $rs->Fields(1);
//start the multicolumn data output
$i = 0;
$columns = 5;
while (!$rs->EOF){
//if $i equals 0, start a row
if($i == 0){
echo "<tr>";
}
//then start writing the cells in the row, increase $i by one, and move to the next record
echo "<td>" . $clients->value . "</td>";
$i++;
$rs->movenext();
//once $i increments to equal $columns, end the row,
//and start the process over by setting $i to 0
if($i == $columns || $rs->EOF) {
echo "</tr>";
$i = 0;
    }
}
//end multicolumn data output

//close the ADO connections and release resources
$rs->Close();
$conn->Close();
$rs = null;
$conn = null; ?>
</table>
</body>
</html>
tedknightusa at hotmail dot com 26-Sep-2002 09:29
A Notes example:

<?php
$session = new COM "Lotus.NotesSession" );
$session->Initialize($password);

$someDB = "C:\Lotus\Notes\Data\somedb.nsf";
$db = $session->GetDatabase("", $someDB) or die("Cannot get someDB.nsf");
$view = $db->GetView("some_view") or die("Some View not found");

$doc = $view->GetFirstDocument() or die("Unable to get Initial Some Document");

// loop through
while($doc){
  $col_vals = $doc->ColumnValues();
  echo $col_vals[0];
  $doc = $view->GetNextDocument($doc);
}
?>
dwt at myrealbox dot com 27-Aug-2002 03:31
When first writing applications instancing COM objects I always faced the problem of the instanced program not terminating correctly although everything else worked fine. In fact the process had to be killed manually by using the task manager. When experimenting a bit I was able to isolate the cause for this peculiar behaviour to be illustrated by the sample code below:

<?php

//Accessing arrays by retrieving elements via function ArrayName(Index) works, but certainly is neither efficient nor good style
$excel=new COM("Excel.Application");
$excel->sheetsinnewworkbook=1;
$excel->Workbooks->Add();

$book=$excel->Workbooks(1);
$sheet=$book->Worksheets(1);

$sheet->Name="Debug-Test";
$book->saveas("C:\\debug.xls");

$book->Close(false);
unset($sheet);
unset($book);
$excel->Workbooks->Close();
$excel->Quit();
unset($excel);

//Accessing arrays as usual (using the [] operator) works, buts leads to the application not being able to terminate by itself
$excel=new COM("Excel.Application");
$excel->sheetsinnewworkbook=1;
$excel->Workbooks->Add();

$excel->Workbooks[1]->Worksheets[1]->Name="Debug-Test";
$excel->Workbooks[1]->saveas("C:\\debug.xls");

$excel->Workbooks[1]->Close(false);
$excel->Workbooks->Close();
$excel->Quit();
unset($excel);

?>

The sample code performs the same action twice and each time the file is properly created. Yet for some mysterious reason the instanced excel process won't terminate once you've accessed an array the way most programmers (especially those who do a lot of oop in c++) do! Therefore until the PHP developers become aware of this problem we'll have to use the inefficient coding style illustrated in the first example.
madon at cma-it dot com 07-Mar-2002 12:59
I thought this excel chart example could be useful.

Note the use of Excel.application vs Excel.sheet.

<pre>
<?php
    print "Hi";
#Instantiate the spreadsheet component.
#    $ex = new COM("Excel.sheet") or Die ("Did not connect");
$exapp = new COM("Excel.application") or Die ("Did not connect");

#Get the application name and version
print "Application name:{$ex->Application->value}<BR>" ;
print "Loaded version: {$ex->Application->version}<BR>";

$wkb=$exapp->Workbooks->add();
#$wkb = $ex->Application->ActiveWorkbook or Die ("Did not open workbook");
print "we opened workbook<BR>";

$ex->Application->Visible = 1; #Make Excel visible.
print "we made excell visible<BR>";

$sheets = $wkb->Worksheets(1); #Select the sheet
print "selected a sheet<BR>";
$sheets->activate; #Activate it
print "activated sheet<BR>";

#This is a new sheet
$sheets2 = $wkb->Worksheets->add(); #Add a sheet
print "added a new sheet<BR>";
$sheets2->activate; #Activate it
print "activated sheet<BR>";

$sheets2->name="Report Second page";

$sheets->name="Report First page";
print "We set a name to the sheet: $sheets->name<BR>";

# fills a columns
$maxi=20;
for ($i=1;$i<$maxi;$i++) {
    $cell = $sheets->Cells($i,5) ; #Select the cell (Row Column number)
    $cell->activate; #Activate the cell
    $cell->value = $i*$i; #Change it to 15000
}

$ch = $sheets->chartobjects->add(50, 40, 400, 100); # make a chartobject

$chartje = $ch->chart; # place a chart in the chart object
$chartje->activate; #activate chartobject
$chartje->ChartType=63;
$selected = $sheets->range("E1:E$maxi"); # set the data the chart uses
$chartje->setsourcedata($selected); # set the data the chart uses
print "set the data the chart uses <BR>";

$file_name="D:/apache/Apache/htdocs/alm/tmp/final14.xls";
if (file_exists($file_name)) {unlink($file_name);}
#$ex->Application->ActiveWorkbook->SaveAs($file_name); # saves sheet as final.xls
$wkb->SaveAs($file_name); # saves sheet as final.xls
print "saved<BR>";

#$ex->Application->ActiveWorkbook->Close("False");
$exapp->Quit();
unset($exapp);
?>

</pre>

Alex Madon


グローバルユニーク ID (GUID) を生成する

  • ≪ COM関数
  • com_event_sink ≫
  • PHP Manual
  • COM関数
  • グローバルユニーク ID (GUID) を生成する

com_create_guid

(PHP 5, PHP 7, PHP 8)

com_create_guid — グローバルユニーク ID (GUID) を生成する

説明

com_create_guid(): string|false

グローバルユニーク ID (GUID) を生成します。

GUID は DCE UUID と同様の方法で生成されますが、Microsoft の 規約により、GUID が中括弧で囲まれるという点が異なります。

パラメータ

この関数にはパラメータはありません。

戻り値

GUID を文字列で返します。 失敗した場合に false を返します

参考

  • PECL uuid 拡張モジュールの uuid_create()

User Contributed Notes

internmail (at the google mail).com 22-Jan-2020 02:26
function create_guid() { // Create GUID (Globally Unique Identifier)
        $guid = '';
        $namespace = rand(11111, 99999);
        $uid = uniqid('', true);
        $data = $namespace;
        $data .= $_SERVER['REQUEST_TIME'];
        $data .= $_SERVER['HTTP_USER_AGENT'];
        $data .= $_SERVER['REMOTE_ADDR'];
        $data .= $_SERVER['REMOTE_PORT'];
        $hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
        $guid = substr($hash,  0,  8) . '-' .
                substr($hash,  8,  4) . '-' .
                substr($hash, 12,  4) . '-' .
                substr($hash, 16,  4) . '-' .
                substr($hash, 20, 12);
        return $guid;
    }
rogervila dot es 10-Sep-2019 02:16
I implemented a com_create_guid implementation for systems that do not support it as a Composer package in order to keep it separated from my applications

https://github.com/rogervila/com_create_guid
Dave Pearson (dave at pds-uk dot com) 14-Apr-2016 10:07
Here's my final version of a GUIDv4 function (based on others work here) that should work on all platforms and gracefully fallback to less cryptographically secure version if others are not supported...

<?php
/**
 * Returns a GUIDv4 string
 *
 * Uses the best cryptographically secure method
 * for all supported pltforms with fallback to an older,
 * less secure version.
 *
 * @param bool $trim
 * @return string
 */
function GUIDv4 ($trim = true)
{
    // Windows
    if (function_exists('com_create_guid') === true) {
        if ($trim === true)
            return trim(com_create_guid(), '{}');
        else
            return com_create_guid();
    }

    // OSX/Linux
    if (function_exists('openssl_random_pseudo_bytes') === true) {
        $data = openssl_random_pseudo_bytes(16);
        $data[6] = chr(ord($data[6]) & 0x0f | 0x40);    // set version to 0100
        $data[8] = chr(ord($data[8]) & 0x3f | 0x80);    // set bits 6-7 to 10
        return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
    }

    // Fallback (PHP 4.2+)
    mt_srand((double)microtime() * 10000);
    $charid = strtolower(md5(uniqid(rand(), true)));
    $hyphen = chr(45);                  // "-"
    $lbrace = $trim ? "" : chr(123);    // "{"
    $rbrace = $trim ? "" : chr(125);    // "}"
    $guidv4 = $lbrace.
              substr($charid,  0,  8).$hyphen.
              substr($charid,  8,  4).$hyphen.
              substr($charid, 12,  4).$hyphen.
              substr($charid, 16,  4).$hyphen.
              substr($charid, 20, 12).
              $rbrace;
    return $guidv4;
}
?>
indrora 08-Nov-2015 07:09
If you're going to generate random UUIDs, at least make them conform:

* The uppermost byte of the third stanza must be 4
* the uppermost byte of the fourth stanza may be any of (8 9 a b)

see also: The wikipedia page for UUIDs: https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29
pavel.volyntsev(at)gmail 27-Aug-2015 12:37
Use more cryptographically strong algorithm to generate pseudo-random bytes and format it as GUID v4 string

function guidv4()
{
    if (function_exists('com_create_guid') === true)
        return trim(com_create_guid(), '{}');

    $data = openssl_random_pseudo_bytes(16);
    $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
    $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
    return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
Alix Axel 16-Aug-2010 03:59
The phunction PHP framework (http://sourceforge.net/projects/phunction/) uses the following function to generate valid version 4 UUIDs:

<?php

function GUID()
{
    if (function_exists('com_create_guid') === true)
    {
        return trim(com_create_guid(), '{}');
    }

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}

?>

The output generated by the sprintf() and mt_rand() calls is identical to com_create_guid() results.


COM オブジェクトのイベントを PHP オブジェクトに接続する

  • ≪ com_create_guid
  • com_get_active_object ≫
  • PHP Manual
  • COM関数
  • COM オブジェクトのイベントを PHP オブジェクトに接続する

com_event_sink

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

com_event_sink — COM オブジェクトのイベントを PHP オブジェクトに接続する

説明

com_event_sink(variant $variant, object $sink_object, array|string|null $sink_interface = null): bool

variant が生成したイベントを PHP オブジェクト sink_object に通知するよう、COM に指示します。

この機能を利用する際には注意しましょう。もし以下の例のようなことを 行いたいのであれば、Web サーバー上でそれを行うことには まったく意味がありません。

パラメータ

variant

sink_object

sink_object には、要求されるディスパッチ インターフェイスと同じ名前のメソッドを持つクラスのインスタンスを 指定する必要があります。この要求を満たすクラスを作成するために、 com_print_typeinfo() を使用することができます。

sink_interface

PHP は variant に関連するタイプライブラリで 指定されたデフォルトのディスパッチインターフェイスを使用しようと しますが、使用させたいインターフェイス名を sink_interface に指定することで、それを 上書きすることが可能です。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | sink_interface は、nullable になりました。

例

例1 COM イベントシンクの例

<?php
class IEEventSinker {
var $terminated = false;

function ProgressChange($progress, $progressmax) {
echo "ダウンロードの進行状況: $progress / $progressmax\n";
}

function DocumentComplete(&$dom, $url) {
echo "ドキュメント $url 完了\n";
}

function OnQuit() {
echo "終了!\n";
$this->terminated = true;
}
}
$ie = new COM("InternetExplorer.Application");
$sink = new IEEventSinker();
com_event_sink($ie, $sink, "DWebBrowserEvents2");
$ie->Visible = true;
$ie->Navigate("http://www.example.org");
while(!$sink->terminated) {
com_message_pump(4000);
}
$ie = null;
?>

注意

警告

PHP 8.0.0 より前のバージョンでは、 イベントハンドラから exit() を呼ぶことはサポートされていませんでした。 そうしてしまうと、PHP がハングする可能性もありました。 この事象は、イベントハンドラから例外をスローしてメインのコードでキャッチし、 exit() を呼び出すことで回避できます。

参考

  • com_print_typeinfo() - ディスパッチインターフェイスのために、PHP のクラス定義を出力する
  • com_message_pump() - COM メッセージを処理し、timeoutms ミリ秒の間待つ

User Contributed Notes

veggie 25-Dec-2016 10:23
I got voice recognition working. I'm not sure why the way I called the sink function made it work but I'm more about results right now. This small example had me rolling on the floor laughing.

<?php
/*
 * Search this for more info on the voice stuff:
 * Automation Interfaces and Objects (SAPI 5.4)
 */

//directions:
//php friend.php
//then fire up windows voice recognition and turn it on and say stuff

$voice = new COM("SAPI.SpVoice");

print "Hit control+c to end.\n";
print "Friend: Hello friend!\n";

$voice->Speak("Hello friend!");

class listen
{

    function Recognition($StreamNumber, $StreamPosition, $RecognitionType, $ISpeechRecoResult)
    {

        $phrase = $ISpeechRecoResult->PhraseInfo;
        $text = $phrase->GetText();

        print "\nYou:$text\n";

        global $voice;
        $say = array('oh', 'nice', 'humm', 'interesting', 'you dont say', 'uh huh', 'right', 'what', 'ha ha', 'you have got to be joking', 'right back at you buddy');
        $idx = rand(0, count($say)-1);

        print "Friend: " . $say[$idx] . "\n";
        $voice->Speak($say[$idx]);

    }

}

$recog = new COM("SAPI.SpSharedRecognizer");

$context = $recog->CreateRecoContext();

//SRERecognition = 16 (default)
//SREAllEvents = 393215
//$context->EventInterests = 393215;

//try to listen to events on context
$listen = new listen(); //event handler
if (!com_event_sink($context, $listen, "RecognizerStateChange"))
{
    print "Unable to sink events\n";
    exit;
}

$grammar = $context->CreateGrammar();

$i = $grammar->DictationLoad();

$s = $grammar->DictationSetState(1); //1=on, 0=off

while(true)
{

    if(!com_message_pump(1000))
    {
        print ".";
    }

}

?>
fjortiz 14-Jul-2005 12:33
In case someone needs a skeleton sink for ADODB.Connection events:

class ADOConnectionEventSink    {

    function BeginTransComplete( $translevel, $objerror, $status, $objconn )    {
        return 0;
    }

    function CommitTransComplete( $objerror, $status, $objconn )    {
        return 0;
    }

    function RolbackTransComplete( $objerror, $status, $objconn )    {
        return 0;
    }

    function WillConnect ( $ConnectionString, $userid, $psword, $options, $status, $objconn )    {
        return 0;
    }

    function ConnectComplete ( $objerror, $status, $objconn)    {
        return 0;
    }

    function Disconnect( $status, $objConn )    {
        return 0;
    }

    function WillExecute ( $src, $cursortyp, $locktyp, $options, $status, $objcomm, $objrs, $objconn )    {
        return 0;
    }

    function ExecuteComplete ( $recaffected, $objerror, $status, $objcomm, $objrs, $objconn )    {
        return 0;
    }

    function InfoMessage ( $objerror, $status, $objconn)    {
        return 0;
    }
}

// later on...
$db = new COM("ADODB.Connection", NULL, $charPage);
$sink = new ADOConnectionEventSink();
com_event_sink($db, $sink, "ConnectionEvents");
//...


すでに実行中の COM オブジェクトのインスタンスへのハンドルを返す

  • ≪ com_event_sink
  • com_load_typelib ≫
  • PHP Manual
  • COM関数
  • すでに実行中の COM オブジェクトのインスタンスへのハンドルを返す

com_get_active_object

(PHP 5, PHP 7, PHP 8)

com_get_active_object — すでに実行中の COM オブジェクトのインスタンスへのハンドルを返す

説明

com_get_active_object(string $prog_id, ?int $codepage = null): variant

com_get_active_object() は、新しい com オブジェクトのインスタンスを作成することに 似ています。しかし、オブジェクトがすでに実行中の場合には そのオブジェクトが返されるという点が違います。 OLE アプリケーションは、既知のアプリケーションを一度だけ起動させる ことを許可するために、"Running Object Table" というものを使用します。 この関数は、実行中のインスタンスのハンドルを取得するために COM ライブラリ関数 GetActiveObject() を公開します。

パラメータ

prog_id

prog_id は、アクセスしたいオブジェクトの ProgID あるいは CLSID (たとえば Word.Application) である必要があります。

codepage

com クラスの場合と同様の働きをします。

戻り値

要求されたオブジェクトが実行中の場合は、他の COM オブジェクトと 同様にスクリプトへ返されます。

エラー / 例外

この関数が失敗する 理由はさまざまなものが考えられますが、最も一般的なのは オブジェクトがまだ起動していないことです。そのような場合、 例外のエラーコードは MK_E_UNAVAILABLE となります。例外オブジェクトの getCode メソッドを使用することで、例外コードの内容を調べることが可能です。

変更履歴

バージョン | 説明
8.0.0 | codepage は、nullable になりました。

注意

警告

Web 環境で com_get_active_object() を使用する ことは、あまり良い考えではありません。ほとんどの COM/OLE アプリケーションは複数のクライアントから同時に利用されることを 考慮していないのです。(あの) Microsoft Office でさえもです! この件に関する一般的な問題についての詳細な情報は、» Considerations for Server-Side Automation of Office を参照ください。

User Contributed Notes

gerrit at timingteam dot nl 04-Jan-2009 09:25
Please note the next behavior (Apache 2.2.8, W2K, WXP)

If Apache runs as a service, com_get_active_object() always returns MK_E_UNAVAILABLE, even when it is definitely sure that the Running Object Table contains a reference to the required object.

If Apache runs in a console, com_get_active_object()  returns the object handle as required.

This apparently is a Windows issue.


タイプライブラリを読み込む

  • ≪ com_get_active_object
  • com_message_pump ≫
  • PHP Manual
  • COM関数
  • タイプライブラリを読み込む

com_load_typelib

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

com_load_typelib — タイプライブラリを読み込む

説明

com_load_typelib(string $typelib, bool $case_insensitive = true): bool

タイプライブラリを読み込んで定数をエンジン内に登録し、それらが define() を使用して定義されているかのように 扱えるようにします。

あまり融通の利く方法ではありませんが、 com.typelib-file php.ini 設定を利用して定数の 事前読み込みと登録をすませるほうがずっと効率的であることに 注意しましょう。

com.autoregister-typelib を有効にすると、 PHP がインスタンス化した COM オブジェクトに関連付けられている定数を 自動的に登録しようと試みます。これは COM オブジェクト自身の提供する インターフェイスに依存し、常に可能であるとは限りません。

パラメータ

typelib

typelib は、以下のいずれかの形式となります。

  • .tlb ファイル、あるいはタイプライブラリを含む 実行モジュールのファイル名。

  • タイプライブラリの GUID の後にバージョン番号を続ける。たとえば {00000200-0000-0010-8000-00AA006D2EA4},2,0 のような形式。

  • タイプライブラリ名。たとえば Microsoft OLE DB ActiveX Data Objects 1.0 Library のような形式。

PHP は、この順序でタイプライブラリ名の解決を試みます。リストの下の ほうにいくほど検索処理のコストが高くなります。タイプライブラリ名に よる検索は、一致するものが見つかるまでレジストリを物理的に列挙していく という方法をとっています。

case_insensitive

case_insensitive は、 define() 関数の $case_insensitive とは逆の動きをします。

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

tomas dot burba at softneta dot lt 12-Mar-2012 11:38
I had some problems with a third-party Word-controlling code that is somewhat similar to Richard's example. (Word 2007 SP1, XP SP2.) Rewrote some parts according to that example, no luck. Error messages from Word were crazy:

"Bad parameter" -- it didn't like wdGoToBookmark but was ok with its numeric equivalent -1;

"Call to undefined method variant::SaveAs()" -- the same with Save() that was suitable in my case, so no options were remaining.

But then I ran the example via php.exe in the command line, and it worked! Eventually it turned out that Apache service must be run as some real user instead of SYSTEM.
RQuadling at GMail dot com 17-Jun-2008 03:40
Some libraries load other libraries as part of their functionality. For example Crystal Reports Object Factory uses the CreateObject() method to create an instance of a Crystal Design RunTime Application. If you want to use constants defined in the newly loaded library, you will need to manually register the library - even with com.autoregister_typelib set to true.

<?php
echo 'com.autoregister_typelib = ', ini_get('com.autoregister_typelib'), PHP_EOL;

$o_CrObjectFactory = New COM('CrystalReports11.ObjectFactory.1');

$o_CrApplication = $o_CrObjectFactory->CreateObject("CrystalDesignRunTime.Application");

echo 'Will not be defined : ', crOpenReportByDefault, PHP_EOL;

com_load_typelib('CrystalDesignRunTime.Application');

echo 'Will now be defined : ', crOpenReportByDefault, PHP_EOL;
?>

outputs ...

com.autoregister_typelib = 1
Will not be defined :
Notice: Use of undefined constant crOpenReportByDefault - assumed 'crOpenReportByDefault' in C:\refl.php on line 8
crOpenReportByDefault
Will now be defined : 0
03-May-2004 07:18
In case any of you were wondering what com_load_typelib actually DOES, I have found that it loads constants\enums that the COM obeject has defined.  The example below is using the Nero COM object (from Nero Burning rom, version 6+).  The Nero object defines a bunch of constants, but they can not be used as PHP constants unless you use the mentioned function.  So the example below will work just fine:

<?php
$aNero = new COM("Nero.Nero") or die ("Nero didn't load, too bad");
com_load_typelib("Nero.Nero");
$aNero->GetDrives(NERO_MEDIA_CD);
?>

But this one will not, since PHP will return a message saying that the constant is undefined:

<?php
$aNero = new COM("Nero.Nero") or die ("Nero didn't load, too bad");
$aNero->GetDrives(NERO_MEDIA_CD);
?>

This one took me a while to figure out, hope it helps.

Also, check out http://www.php.net/manual/en/faq.com.php to find out how to get COM events working in PHP.
ojpp at webdevfm dot com 30-Jan-2004 06:33
Hello PHP community, I want to help in a problem I found in this COM built-in function: com_load_typelib(), when I executed it in order to open a COM Server process (for example: Word, Excel, etc.) I was in trouble to release the object from memory, I figured it out, this is the solution:

Change a configuration in the php.ini:

; autoregister constants of a components typlib on com_load()
com.autoregister_typelib = true

When com.autoregister_typelib directive is true, PHP parser manage the COM server type library, I hope it helps.
richard dot quadling at carval dot co dot uk 26-Feb-2003 05:55
<?php
// Some servers may have an auto timeout, so take as long as you want.
set_time_limit(0);

// Show all errors, warnings and notices whilst developing.
error_reporting(E_ALL);

// Used as a placeholder in certain COM functions where no parameter is required.
$empty = new VARIANT();

// Load the appropriate type library.
com_load_typelib('Word.Application');

// Create an object to use.
$word = new COM('word.application') or die('Unable to load Word');
print "Loaded Word, version {$word->Version}\n";

// Open a new document with bookmarks of YourName and YourAge.
$word->Documents->Open('C:/Unfilled.DOC');

// Fill in the information from the form.
$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourName'); // Note use of wdGoToBookmark, from the typelibrary and the use of $empty.
$word->Selection->TypeText($_GET['YourName']);

$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourAge');
$word->Selection->TypeText($_GET['YourAge']);

// Save it, close word and finish.
$word->Documents[1]->SaveAs("C:/{$_GET['YourName']}.doc");
$word->Quit();
$word->Release();
$word = null;
print "Word closed.\n";
?>

The example document is ...

Hello [Bookmark of YourName], you are [Bookmark of YourAge] years old.

and it would be called ...

word.php?YourName=Richard%20Quadling&YourAge=35

Regards,

Richard.


COM メッセージを処理し、timeoutms ミリ秒の間待つ

  • ≪ com_load_typelib
  • com_print_typeinfo ≫
  • PHP Manual
  • COM関数
  • COM メッセージを処理し、timeoutms ミリ秒の間待つ

com_message_pump

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

com_message_pump — COM メッセージを処理し、timeoutms ミリ秒の間待つ

説明

com_message_pump(int $timeout_milliseconds = 0): bool

この関数は、timeout_milliseconds ミリ秒が経過するか キューにメッセージが到着するまで待機します。

この関数の目的は、別々の場所にある COM のコールを振り分け、同期の 問題をうまく処理することです。これにより、発生するイベントを 効率的にスクリプトで待ち受けられるようになり、バックグラウンドで 動作している他のコードやイベントも処理できるようになります。 COM オブジェクトのイベントを使用している間は、 com_event_sink() 関数の例で示したように この関数をループ内で使用すべきです。

パラメータ

timeout_milliseconds

タイムアウト。ミリ秒単位で指定します。

timeout_milliseconds の値を指定しなかった場合は 0 であるとみなされます。0 という値は、一切待機しないことを 意味します。処理待ち状態のメッセージがあればそれを処理し、 なければこの関数はすぐに false を返します。

戻り値

タイムアウトの前に メッセージが到着した場合は、そのメッセージが処理されて 関数は true を返します。メッセージを処理することなく タイムアウトが発生した場合は、この関数は false を返します。

User Contributed Notes

There are no user contributed notes for this page.


ディスパッチインターフェイスのために、PHP のクラス定義を出力する

  • ≪ com_message_pump
  • variant_abs ≫
  • PHP Manual
  • COM関数
  • ディスパッチインターフェイスのために、PHP のクラス定義を出力する

com_print_typeinfo

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

com_print_typeinfo — ディスパッチインターフェイスのために、PHP のクラス定義を出力する

説明

com_print_typeinfo(variant|string $variant, ?string $dispatch_interface = null, bool $display_sink = false): bool

この関数の目的は、イベントシンクに使用するスケルトンクラスの作成を支援することです。 もし 対象の COM オブジェクトが イントロスペクションのインターフェイスを十分サポートしており、 表示したいインターフェイスの名前をあなたが知っている場合、 その COM オブジェクトのダンプを生成するのにも使えます。

パラメータ

variant

variant は、COM オブジェクトのインスタンスか あるいはタイプライブラリの名前 (com_load_typelib() の規則にしたがって名前解決されます) のいずれかです。

dispatch_interface

結果を表示したいインターフェイスで、 このインターフェイスは IDispatch を継承したものです。

display_sink

true の場合、対応するシンクインターフェイスが代わりに表示されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • com_event_sink() - COM オブジェクトのイベントを PHP オブジェクトに接続する
  • com_load_typelib() - タイプライブラリを読み込む

User Contributed Notes

Richard Lynch 03-Oct-2006 04:51
In my particular version of PHP, the second and third arguments are not, in fact, optional.

Passing in '' for both, however, yielded a bucketful of information.

YMMV
csaba at alum dot mit dot edu 14-Feb-2005 12:49
com_print_typeinfo is really useful if you're trying to figure out what properties and methods you have access to.  For example, I might do:

<?php
    $oExplorer = new COM("Shell.Application");
    com_print_typeinfo($oExplorer);
?>

The first line shows me the class of the object (what VBScript calls 'typename'), in my case IShellDispatch4.  It's frequently the case that if you plunk that in as the second argument to com_print_typeinfo, you get way more methods/properties coming back.  Thus:

<?php
    $oExplorer = new COM("Shell.Application");
    com_print_typeinfo($oExplorer, "IShellDispatch4");
?>

Furthermore, you might get additional functions listed if you try lower number suffixes (or not).  At any rate, it would be useful for PHP to have a typename function like VBScript does.  For example, if you iterate through the Windows of $oExplorer you get both IE and Explorer windows and typename is the easy way to differentiate between them.  Here's what I'm using:

<?php
    function typeName($objCOM) {
    if (empty($objCOM)) return "no COM object";
    if (gettype($objCOM)!="object") return "not a COM object";
    ob_start();
    com_print_typeinfo($objCOM);
    $typeInfo = ob_get_contents();
    ob_end_clean();
    $pattern = "/^\\s*class (.*) \\{/";
    if (!($matchCnt = preg_match($pattern, $typeInfo, $aMatch))) return "Not found";
    return $aMatch[1];
}
?>

Csaba Gabor from Vienna


variant の絶対値を返す

  • ≪ com_print_typeinfo
  • variant_add ≫
  • PHP Manual
  • COM関数
  • variant の絶対値を返す

variant_abs

(PHP 5, PHP 7, PHP 8)

variant_abs — variant の絶対値を返す

説明

variant_abs(mixed $value): variant

variant の絶対値を返します。

パラメータ

value

variant。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

value の絶対値を返します。

エラー / 例外

失敗時に com_exception をスローします。

参考

  • abs() - 絶対値

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant 値を「加算」し、結果を返す

  • ≪ variant_abs
  • variant_and ≫
  • PHP Manual
  • COM関数
  • 2 つの variant 値を「加算」し、結果を返す

variant_add

(PHP 5, PHP 7, PHP 8)

variant_add — 2 つの variant 値を「加算」し、結果を返す

説明

variant_add(mixed $left, mixed $right): variant

(MSDN ライブラリによる) 以下の規則に従い、 left を right に加算します。この規則は Visual Basic の規則と一致します。

Variant の加算規則
もし～なら | このようにします
両者ともに文字列型 | 連結
一方が文字列型で、もう一方が文字 | 追加
一方が数値で、もう一方が文字列 | 追加
両者ともに数値 | 加算
どちらか一方が NULL | NULL が返される
両者ともに空の値 | Integer 型が返される

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

結果を返します。

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_sub() - 左の variant から右の variant を引き、その結果を返す

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant の論理積を計算し、結果を返す

  • ≪ variant_add
  • variant_cast ≫
  • PHP Manual
  • COM関数
  • 2 つの variant の論理積を計算し、結果を返す

variant_and

(PHP 5, PHP 7, PHP 8)

variant_and — 2 つの variant の論理積を計算し、結果を返す

説明

variant_and(mixed $left, mixed $right): variant

以下の表に基づいた論理 AND 処理を行います。通常の AND 操作とは 少し違いがあることに注意しましょう。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant の AND 規則
left | right | 結果
true | true | true
true | false | false
true | null | null
false | true | false
false | false | false
false | null | false
null | true | null
null | false | false
null | null | null

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_or() - 2 つの variant の論理和を計算する

User Contributed Notes

There are no user contributed notes for this page.


variant を、別の型の新しい variant に変換する

  • ≪ variant_and
  • variant_cat ≫
  • PHP Manual
  • COM関数
  • variant を、別の型の新しい variant に変換する

variant_cast

(PHP 5, PHP 7, PHP 8)

variant_cast — variant を、別の型の新しい variant に変換する

説明

variant_cast(variant $variant, int $type): variant

この関数は、variant のコピーを作成して、 それを指定した type に強制的に変換します。

この関数は、COM ライブラリの VariantChangeType() をラップしたものです。 詳細な情報は MSDN ライブラリを参照ください。

パラメータ

variant

variant。

type

type は、定数 VT_XXX の中のひとつでなければなりません。

戻り値

与えられた type の variant を返します。

参考

  • variant_set_type() - variant を「その場で」別の型に変換する

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant 値を連結し、その結果を返す

  • ≪ variant_cast
  • variant_cmp ≫
  • PHP Manual
  • COM関数
  • 2 つの variant 値を連結し、その結果を返す

variant_cat

(PHP 5, PHP 7, PHP 8)

variant_cat — 2 つの variant 値を連結し、その結果を返す

説明

variant_cat(mixed $left, mixed $right): variant

left と right を連結し、その結果を返します。

この関数は、理論上は $left . $right と等価です。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

連結した結果を返します。

エラー / 例外

失敗時に com_exception をスローします。

参考

  • 文字列の連結演算子については 文字列演算子

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant を比較する

  • ≪ variant_cat
  • variant_date_from_timestamp ≫
  • PHP Manual
  • COM関数
  • 2 つの variant を比較する

variant_cmp

(PHP 5, PHP 7, PHP 8)

variant_cmp — 2 つの variant を比較する

説明

variant_cmp(
mixed $left,
mixed $right,
int $locale_id = LOCALE_SYSTEM_DEFAULT,
int $flags = 0
): int

left と right を比較します。

この関数はスカラー値のみを比較します。配列や variant レコードは比較しません。

パラメータ

left

左オペランド。

right

右オペランド。

locale_id

文字列の比較に使用する有効なロケール識別子です (これは文字列の比較に影響します)。

flags

flags は、以下のひとつあるいは複数の値を OR で組み合わせたもので、文字列の比較に影響します。

Variant の比較フラグ
値 | 意味
NORM_IGNORECASE | 大文字小文字を区別せずに比較する
NORM_IGNORENONSPACE | 非スペーシング文字を無視する
NORM_IGNORESYMBOLS | 記号を無視する
NORM_IGNOREWIDTH | 全角半角を区別しない
NORM_IGNOREKANATYPE | ひらがなカタカナを区別しない
NORM_IGNOREKASHIDA | アラビア語の kashida 文字を無視する

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

以下のいずれかを返します。

Variant の比較結果
値 | 意味
VARCMP_LT | left は right より小さい
VARCMP_EQ | left は right と等しい
VARCMP_GT | left は right より大きい
VARCMP_NULL | left と right のいずれか、あるいは両方が null

User Contributed Notes

There are no user contributed notes for this page.


Unix タイムスタンプを、日付形式の variant で返す

  • ≪ variant_cmp
  • variant_date_to_timestamp ≫
  • PHP Manual
  • COM関数
  • Unix タイムスタンプを、日付形式の variant で返す

variant_date_from_timestamp

(PHP 5, PHP 7, PHP 8)

variant_date_from_timestamp — Unix タイムスタンプを、日付形式の variant で返す

説明

variant_date_from_timestamp(int $timestamp): variant

unix タイムスタンプ値 timestamp を VT_DATE 型の variant に変換します。 これにより、PHP の unix 的な部分と COM とのやりとりが容易になります。

パラメータ

timestamp

unix タイムスタンプ。

戻り値

VT_DATE 型の variant を返します。

参考

  • variant_date_to_timestamp() - 日付/時刻の variant 値を Unix タイムスタンプに変換する
  • mktime() - 日付を Unix のタイムスタンプとして取得する
  • time() - 現在の Unix タイムスタンプを返す

User Contributed Notes

There are no user contributed notes for this page.


日付/時刻の variant 値を Unix タイムスタンプに変換する

  • ≪ variant_date_from_timestamp
  • variant_div ≫
  • PHP Manual
  • COM関数
  • 日付/時刻の variant 値を Unix タイムスタンプに変換する

variant_date_to_timestamp

(PHP 5, PHP 7, PHP 8)

variant_date_to_timestamp — 日付/時刻の variant 値を Unix タイムスタンプに変換する

説明

variant_date_to_timestamp(variant $variant): ?int

variant を、VT_DATE (あるいはそれに似た型) から Unix タイムスタンプに変換します。 これにより、PHP の Unix 的な部分と COM とのやりとりが容易になります。

パラメータ

variant

variant。

戻り値

unix タイムスタンプを返します。 失敗時には null を返します。

参考

  • variant_date_from_timestamp() - Unix タイムスタンプを、日付形式の variant で返す
  • date() - Unixタイムスタンプを書式化する
  • strftime() - ロケールの設定に基づいてローカルな日付・時間をフォーマットする

User Contributed Notes

radek at tetik dot cz 25-Dec-2015 03:21
variant_date_to_timestamp() assumes the COM date in the current Windows time zone and converts it to the current PHP time zone


2 つの variant の除算結果を返す

  • ≪ variant_date_to_timestamp
  • variant_eqv ≫
  • PHP Manual
  • COM関数
  • 2 つの variant の除算結果を返す

variant_div

(PHP 5, PHP 7, PHP 8)

variant_div — 2 つの variant の除算結果を返す

説明

variant_div(mixed $left, mixed $right): mixed

left を right で割り、その結果を返します。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant の除算規則
もし～なら | このようにします
両者ともに文字列型・日付型・文字・論理型 | Double 型を返す
一方が文字列型で、もう一方が文字 | 除算結果を double 型で返す
一方が数値で、もう一方が文字列 | 除算結果を double 型で返す
両者ともに数値 | 除算結果を double 型で返す
どちらか一方が NULL | NULL が返される
right が空の値で left がそれ以外の型 | コード DISP_E_DIVBYZERO を持った com_exception がスローされる
left が空の値で right がそれ以外の型 | double 型の 0 が返される
両者ともに空の値 | コード DISP_E_OVERFLOW を持った com_exception がスローされる

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_idiv() - variants を整数に変換し、除算の結果を返す

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant のビット値が等しいかどうかを調べる

  • ≪ variant_div
  • variant_fix ≫
  • PHP Manual
  • COM関数
  • 2 つの variant のビット値が等しいかどうかを調べる

variant_eqv

(PHP 5, PHP 7, PHP 8)

variant_eqv — 2 つの variant のビット値が等しいかどうかを調べる

説明

variant_eqv(mixed $left, mixed $right): variant

2 つの variant のビット値が等しいかどうかを調べます。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

left の各ビットが right の対応するビットに等しい場合に true を、それ以外の場合に false を返します。

エラー / 例外

失敗時に com_exception をスローします。

User Contributed Notes

There are no user contributed notes for this page.


variant の整数部を返す

  • ≪ variant_eqv
  • variant_get_type ≫
  • PHP Manual
  • COM関数
  • variant の整数部を返す

variant_fix

(PHP 5, PHP 7, PHP 8)

variant_fix — variant の整数部を返す

説明

variant_fix(mixed $value): variant

variant の整数部を取得します。

パラメータ

value

variant。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

value が負の数の場合、variant の値以上の 最初の整数値を返します。それ以外の場合は value の値の整数部分を返します。

エラー / 例外

失敗時に com_exception をスローします。

注意

警告

このドキュメントは MSDN ドキュメントに基づいています。 この関数は variant_int() とまったく同じか、 そうでなければ MSDN ドキュメントに間違いがあると思われます。

参考

  • variant_int() - variant の整数部を返す
  • variant_round() - 指定した桁で variant を丸める
  • floor() - 端数の切り捨て
  • ceil() - 端数の切り上げ
  • round() - 浮動小数点数を丸める

User Contributed Notes

There are no user contributed notes for this page.


variant オブジェクトの型を返す

  • ≪ variant_fix
  • variant_idiv ≫
  • PHP Manual
  • COM関数
  • variant オブジェクトの型を返す

variant_get_type

(PHP 5, PHP 7, PHP 8)

variant_get_type — variant オブジェクトの型を返す

説明

variant_get_type(variant $variant): int

variant オブジェクトの型を返します。

パラメータ

variant

variant オブジェクト。

戻り値

この関数は、variant の型を表す整数値を返します。 variant は com、 dotnet あるいは variant クラスのインスタンスです。 返される値は、VT_XXX 定数のいずれかと比較することが可能です。

COM および DOTNET オブジェクトの返す値は、通常 VT_DISPATCH です。これらのクラスに対して この関数が動作する理由は、単に COM および DOTNET が VARIANT を 継承しているからというだけのことです。

参考

  • variant_set_type() - variant を「その場で」別の型に変換する

User Contributed Notes

There are no user contributed notes for this page.


variants を整数に変換し、除算の結果を返す

  • ≪ variant_get_type
  • variant_imp ≫
  • PHP Manual
  • COM関数
  • variants を整数に変換し、除算の結果を返す

variant_idiv

(PHP 5, PHP 7, PHP 8)

variant_idiv — variants を整数に変換し、除算の結果を返す

説明

variant_idiv(mixed $left, mixed $right): variant

left および right を 整数値に変換し、整数の除算を行います。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant の整数除算規則
もし～なら | このようにします
両者ともに文字列型・日付型・文字・論理型 | 除算結果を integer 型で返す
一方が文字列型で、もう一方が文字 | 除算
一方が数値で、もう一方が文字列 | 除算
両者ともに数値 | 除算
どちらか一方が NULL | NULL が返される
両者ともに空の値 | com_exception コード DISP_E_DIVBYZERO がスローされる

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_div() - 2 つの variant の除算結果を返す

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant のビット implication を行う

  • ≪ variant_idiv
  • variant_int ≫
  • PHP Manual
  • COM関数
  • 2 つの variant のビット implication を行う

variant_imp

(PHP 5, PHP 7, PHP 8)

variant_imp — 2 つの variant のビット implication を行う

説明

variant_imp(mixed $left, mixed $right): variant

ビットの implication 操作を行います。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant Implication テーブル
left | right | 結果
true | true | true
true | false | false
true | null | true
false | true | true
false | false | true
false | null | true
null | true | true
null | false | null
null | null | null

エラー / 例外

失敗時に com_exception をスローします。

User Contributed Notes

There are no user contributed notes for this page.


variant の整数部を返す

  • ≪ variant_imp
  • variant_mod ≫
  • PHP Manual
  • COM関数
  • variant の整数部を返す

variant_int

(PHP 5, PHP 7, PHP 8)

variant_int — variant の整数部を返す

説明

variant_int(mixed $value): variant

variant の整数部を返します。

パラメータ

value

variant。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

value が負の数の場合、variant の値以上の 最初の整数値を返します。それ以外の場合は value の値の整数部分を返します。

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_fix() - variant の整数部を返す
  • variant_round() - 指定した桁で variant を丸める
  • floor() - 端数の切り捨て
  • ceil() - 端数の切り上げ
  • round() - 浮動小数点数を丸める

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant の除算を行い、剰余を返す

  • ≪ variant_int
  • variant_mul ≫
  • PHP Manual
  • COM関数
  • 2 つの variant の除算を行い、剰余を返す

variant_mod

(PHP 5, PHP 7, PHP 8)

variant_mod — 2 つの variant の除算を行い、剰余を返す

説明

variant_mod(mixed $left, mixed $right): variant

left を right で除算し、剰余を返します。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

除算の剰余を返します。

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_div() - 2 つの variant の除算結果を返す
  • variant_idiv() - variants を整数に変換し、除算の結果を返す

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant の乗算を行い、その結果を返す

  • ≪ variant_mod
  • variant_neg ≫
  • PHP Manual
  • COM関数
  • 2 つの variant の乗算を行い、その結果を返す

variant_mul

(PHP 5, PHP 7, PHP 8)

variant_mul — 2 つの variant の乗算を行い、その結果を返す

説明

variant_mul(mixed $left, mixed $right): variant

left と right の乗算を行います。

パラメータ

left

左オペランド。

right

右オペランド。

論理型の値は、false が -1 に、そして true が 0 に変換されます。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant の乗算規則
もし～なら | このようにします
両者ともに文字列型・日付型・文字・論理型 | 乗算
一方が文字列型で、もう一方が文字 | 乗算
一方が数値で、もう一方が文字列 | 乗算
両者ともに数値 | 乗算
どちらか一方が NULL | NULL が返される
両者ともに空の値 | 空の文字列が返される

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_div() - 2 つの variant の除算結果を返す
  • variant_idiv() - variants を整数に変換し、除算の結果を返す

User Contributed Notes

There are no user contributed notes for this page.


variant の論理否定演算を行う

  • ≪ variant_mul
  • variant_not ≫
  • PHP Manual
  • COM関数
  • variant の論理否定演算を行う

variant_neg

(PHP 5, PHP 7, PHP 8)

variant_neg — variant の論理否定演算を行う

説明

variant_neg(mixed $value): variant

value の論理否定演算を行います。

パラメータ

value

variant。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

論理否定演算の結果を返します。

エラー / 例外

失敗時に com_exception をスローします。

User Contributed Notes

There are no user contributed notes for this page.


variant のビット否定演算を行う

  • ≪ variant_neg
  • variant_or ≫
  • PHP Manual
  • COM関数
  • variant のビット否定演算を行う

variant_not

(PHP 5, PHP 7, PHP 8)

variant_not — variant のビット否定演算を行う

説明

variant_not(mixed $value): variant

value のビット否定演算を行い、その結果を返します。

パラメータ

value

variant。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

ビット否定演算の結果を返します。 value が null の場合、 結果も null となります。

エラー / 例外

失敗時に com_exception をスローします。

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant の論理和を計算する

  • ≪ variant_not
  • variant_pow ≫
  • PHP Manual
  • COM関数
  • 2 つの variant の論理和を計算する

variant_or

(PHP 5, PHP 7, PHP 8)

variant_or — 2 つの variant の論理和を計算する

説明

variant_or(mixed $left, mixed $right): variant

論理 OR 処理を行います。通常の OR 操作とは少し違いがあることに注意しましょう。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant の OR 規則
left | right | 結果
true | true | true
true | false | true
true | null | true
false | true | true
false | false | false
false | null | null
null | true | true
null | false | null
null | null | null

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_and() - 2 つの variant の論理積を計算し、結果を返す
  • variant_xor() - 2 つの variant の排他的論理和を計算する

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant の累乗計算を行い、その結果を返す

  • ≪ variant_or
  • variant_round ≫
  • PHP Manual
  • COM関数
  • 2 つの variant の累乗計算を行い、その結果を返す

variant_pow

(PHP 5, PHP 7, PHP 8)

variant_pow — 2 つの variant の累乗計算を行い、その結果を返す

説明

variant_pow(mixed $left, mixed $right): variant

left の right 乗を返します。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

left の right 乗を返します。

エラー / 例外

失敗時に com_exception をスローします。

参考

  • pow() - 指数表現

User Contributed Notes

There are no user contributed notes for this page.


指定した桁で variant を丸める

  • ≪ variant_pow
  • variant_set ≫
  • PHP Manual
  • COM関数
  • 指定した桁で variant を丸める

variant_round

(PHP 5, PHP 7, PHP 8)

variant_round — 指定した桁で variant を丸める

説明

variant_round(mixed $value, int $decimals): ?variant

value を、 decimals で指定した桁で丸めた結果を返します。

パラメータ

value

variant。

decimals

小数点の位置。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

丸めた結果を返します。 失敗した場合は null を返します。

参考

  • round() - 浮動小数点数を丸める

User Contributed Notes

There are no user contributed notes for this page.


variant オブジェクトに新しい値を代入する

  • ≪ variant_round
  • variant_set_type ≫
  • PHP Manual
  • COM関数
  • variant オブジェクトに新しい値を代入する

variant_set

(PHP 5, PHP 7, PHP 8)

variant_set — variant オブジェクトに新しい値を代入する

説明

variant_set(variant $variant, mixed $value): void

value を variant に変換し、それを variant オブジェクトに代入します。 新しい variant オブジェクトは作成されず、 variant の元の値は開放されます。

パラメータ

variant

variant。

value

戻り値

値を返しません。

User Contributed Notes

There are no user contributed notes for this page.


variant を「その場で」別の型に変換する

  • ≪ variant_set
  • variant_sub ≫
  • PHP Manual
  • COM関数
  • variant を「その場で」別の型に変換する

variant_set_type

(PHP 5, PHP 7, PHP 8)

variant_set_type — variant を「その場で」別の型に変換する

説明

variant_set_type(variant $variant, int $type): void

この関数は variant_cast() に似ていますが、 「その場で」変換されるという点が異なります。新しい variant は 作成されません。この関数に渡すパラメータの意味は variant_cast() の場合と同じです。

パラメータ

variant

variant。

type

戻り値

値を返しません。

参考

  • variant_cast() - variant を、別の型の新しい variant に変換する
  • variant_get_type() - variant オブジェクトの型を返す

User Contributed Notes

martin at itmission dot com 22-May-2009 10:55
In my application I was using ADODB to retrieve data from Microsoft Access.  During queries, fields defined as "Date/Time" in Access were being returned to PHP as instances of the Variant class.

For some reason, the variant_date_to_timestamp function returned incorrect timestamps.  As a workaround, I used variant_set_type($variant, VT_BSTR) to get a string representation of the date.  This can be used for most variant types PHP doesn't handle.


左の variant から右の variant を引き、その結果を返す

  • ≪ variant_set_type
  • variant_xor ≫
  • PHP Manual
  • COM関数
  • 左の variant から右の variant を引き、その結果を返す

variant_sub

(PHP 5, PHP 7, PHP 8)

variant_sub — 左の variant から右の variant を引き、その結果を返す

説明

variant_sub(mixed $left, mixed $right): variant

right を left から引きます。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant の減算規則
もし～なら | このようにします
両者ともに文字列型 | 減算
一方が文字列型で、もう一方が文字 | 減算
一方が数値で、もう一方が文字列 | 減算
両者ともに数値 | 減算
どちらか一方が NULL | NULL が返される
両者ともに空の値 | 空の文字列が返される

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_add() - 2 つの variant 値を「加算」し、結果を返す

User Contributed Notes

There are no user contributed notes for this page.


2 つの variant の排他的論理和を計算する

  • ≪ variant_sub
  • win32service ≫
  • PHP Manual
  • COM関数
  • 2 つの variant の排他的論理和を計算する

variant_xor

(PHP 5, PHP 7, PHP 8)

variant_xor — 2 つの variant の排他的論理和を計算する

説明

variant_xor(mixed $left, mixed $right): variant

排他的論理和を計算します。

パラメータ

left

左オペランド。

right

右オペランド。

注意:

variant に関するすべての計算用関数と同様、この関数のパラメータには PHP のネイティブ型 (整数、文字列、浮動小数点数、boolean あるいは null) あるいは COM、VARIANT、DOTNET クラスのインスタンスが使用できます。 PHP のネイティブ型は、variant クラスのコンストラクタと同じ方法で variant に変換されます。 COM オブジェクトおよび DOTNET オブジェクトはデフォルトプロパティの値を持っており、 これを variant の値として使用します。

variant に関する計算関数は、COM ライブラリの同名の関数のラッパーです。 これらの関数についての詳細な情報は、MSDN ライブラリでご確認ください。 PHP での関数名は微妙に異なります。たとえば、PHP での関数 variant_add() に対応する関数は、MSDN のドキュメントでは VarAdd() となります。

戻り値

Variant の XOR 規則
left | right | 結果
true | true | false
true | false | true
false | true | true
false | false | false
null | null | null

エラー / 例外

失敗時に com_exception をスローします。

参考

  • variant_or() - 2 つの variant の論理和を計算する
  • variant_and() - 2 つの variant の論理積を計算し、結果を返す

User Contributed Notes

tinelbarb at yahoo dot com 30-Aug-2010 12:21
I've been using a lot the VARIANT_XOR function (all the VARIANT functions ar cool) and I was faceing the problem that some custom copilation of PHP, especially LAMP packs, doesn't have the VARANT functions included, so the scripts halts.
I had to find an alternative for those who doesn't have an implamentation of VARIANT_XOR.
I'd love if somebody improve my "A_XOR_B" function by changing the name in "VARIANT_XOR" and to run the original VARIANT_XOR function (being optimized) if it is already in the PHP compilation, else run the custom XOR code.

<?php
function a_xor_b($a=0, $b=0) {
    return ( ($a!=$b) && ($a||$b) ) ? TRUE : FALSE ;
}
?>

If using this function, make sure you use the same type for arguments ;-)

Here is a sample code using it:

<?php
if ( a_xor_b(strlen($column1)>0,strlen($column2)>0) ) {
  $add_and='';
}
if ( !a_xor_b(strlen($column1)>0,strlen($column2)>0 ) && strlen($column1)>0 ) {
  $add_and=' and ';
}
$some_sql_filter=$query_str.' having '.$column1.$add_and.$column2;
?>

The use of VARIANT_XOR was identical.

@PHP TEAM: the VARIANT set is so great :-)
tinelbarb at yahoo dot com 30-Aug-2010 12:20
I've been using a lot the VARIANT_XOR function (all the VARIANT functions ar cool) and I was faceing the problem that some custom copilation of PHP, especially LAMP packs, doesn't have the VARANT functions included, so the scripts halts.
I had to find an alternative for those who doesn't have an implamentation of VARIANT_XOR.
I'd love if somebody improve my "A_XOR_B" function by changing the name in "VARIANT_XOR" and to run the original VARIANT_XOR function (being optimized) if it is already in the PHP compilation, else run the custom XOR code.

<?php
function a_xor_b($a=0, $b=0) {
    return ( ($a!=$b) && ($a||$b) ) ? TRUE : FALSE ;
}
?>

If using this function, make sure you use the same type for arguments ;-)

Here is a sample code using it:

<?php
if ( a_xor_b(strlen($column1)>0,strlen($column2)>0) ) {
  $add_and='';
}
if ( !a_xor_b(strlen($column1)>0,strlen($column2)>0 ) && strlen($column1)>0 ) {
  $add_and=' and ';
}
$some_sql_filter=$query_str.' having '.$column1.$add_and.$column2;
?>

The use of VARIANT_XOR was identical.

@PHP TEAM: the VARIANT set is so great :-)
tinelbarb at yahoo dot com dot RE-MO-VE dot ME 30-Aug-2010 12:20
I've been using a lot the VARIANT_XOR function (all the VARIANT functions ar cool) and I was faceing the problem that some custom copilation of PHP, especially LAMP packs, doesn't have the VARANT functions included, so the scripts halts.
I had to find an alternative for those who doesn't have an implamentation of VARIANT_XOR.
I'd love if somebody improve my "A_XOR_B" function by changing the name in "VARIANT_XOR" and to run the original VARIANT_XOR function (being optimized) if it is already in the PHP compilation, else run the custom XOR code.

<?php
function a_xor_b($a=0, $b=0) {
    return ( ($a!=$b) && ($a||$b) ) ? TRUE : FALSE ;
}
?>

If using this function, make sure you use the same type for arguments ;-)

Here is a sample code using it:

<?php
if ( a_xor_b(strlen($column1)>0,strlen($column2)>0) ) {
  $add_and='';
}
if ( !a_xor_b(strlen($column1)>0,strlen($column2)>0 ) && strlen($column1)>0 ) {
  $add_and=' and ';
}
$some_sql_filter=$query_str.' having '.$column1.$add_and.$column2;
?>

The use of VARIANT_XOR was identical.

@PHP TEAM: the VARIANT set is so great :-)


win32service

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • 実行時設定
    • セキュリティの考慮
  • 定義済み定数
  • Win32ServiceException — The Win32ServiceException class
  • 例
  • win32service 関数
    • win32_continue_service — 中断したサービスを再開する
    • win32_create_service — SCM データベースに新しいサービスのエントリを作成する
    • win32_delete_service — SCM データベースからサービスのエントリを削除する
    • win32_get_last_control_message — サービスに送信された直近の制御メッセージを返す
    • win32_pause_service — サービスを中断する
    • win32_query_service_status — サービスの状態を問い合わせる
    • win32_send_custom_control — Send a custom control to the service
    • win32_set_service_exit_code — Define or return the exit code for the current running service
    • win32_set_service_exit_mode — Define or return the exit mode for the current running service
    • win32_set_service_status — サービスの状態を更新する
    • win32_start_service — サービスを開始する
    • win32_start_service_ctrl_dispatcher — スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
    • win32_stop_service — サービスを停止する

User Contributed Notes

jbnahan at php dot net 12-Jun-2019 11:45
The version 0.4 allow now to send and receive a custom control code.


はじめに

win32service は Windows 限定の拡張モジュールです。 サービスコントロールマネージャと連携してサービスの開始・停止・登録・解除を行ったり、 PHP スクリプトをサービスとして実行させる機能を提供します。

User Contributed Notes

There are no user contributed notes for this page.


インストール/設定

目次

  • 要件
  • インストール手順
  • 実行時設定
  • セキュリティの考慮

User Contributed Notes

There are no user contributed notes for this page.


要件

サポートされているWindows のバージョンは、 PHP をビルドするのに使う Visual C++ 再頒布可能パッケージ がサポートするバージョンと同じです。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 » https://pecl.php.net/package/win32service

User Contributed Notes

alphp 10-Jan-2017 03:08
Para actualizar esta extension a PHP-7 se esta trabajando en https://github.com/win32service/win32service
Ya ha disponibles algunos binarios para poder probar.

To update this extension to PHP-7 is working at https://github.com/win32service/win32service
Some binaries have already been available for testing.


セキュリティの考慮

この拡張モジュールでは、アクションによっては管理者権限が必要なものがあります。 たとえば create, delete, start, stop, pause そして continue です。 これによって、Webインターフェイスやリモートからのサービスの操作が可能な場合、 権限の昇格が起きる可能性があります。

現在の管理者のタスクを、非管理者またはサービスアカウントに委譲するために、 サービスにACLを設定できます。 詳細な手順は、 » Microsoft Knowledge Base を参照ください。

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

Win32Service サービス型のビットマスク
定数 | 値 | 説明
WIN32_SERVICE_WIN32_OWN_PROCESS | 0x00000010 | サービスは自分のプロセスで動作します。
WIN32_SERVICE_INTERACTIVE_PROCESS | 0x00000100 | サービスはデスクトップとのやりとりができます。このオプションは、Windows Vista 以降では使えません。
WIN32_SERVICE_WIN32_OWN_PROCESS_INTERACTIVE | 0x00000110 | サービスは自分のプロセスで動作し、デスクトップとのやりとりができます。このオプションは、Windows Vista 以降では使えません。
Win32Service サービスステータス定数
定数 | 値 | 説明
WIN32_SERVICE_CONTINUE_PENDING | 0x00000005 | サービスの続行が待機状態です。
WIN32_SERVICE_PAUSE_PENDING | 0x00000006 | サービスの中断が待機状態です。
WIN32_SERVICE_PAUSED | 0x00000007 | サービスは中断しています。
WIN32_SERVICE_RUNNING | 0x00000004 | サービスは実行中です。
WIN32_SERVICE_START_PENDING | 0x00000002 | サービスは開始中です。
WIN32_SERVICE_STOP_PENDING | 0x00000003 | サービスは停止中です。
WIN32_SERVICE_STOPPED | 0x00000001 | サービスは動作していません。
Win32Service サービス制御メッセージ定数
定数 | 値 | 説明
WIN32_SERVICE_CONTROL_CONTINUE | 0x00000003 | 停止中のサービスに再開を指示します。
WIN32_SERVICE_CONTROL_DEVICEEVENT | 0x0000000B |
WIN32_SERVICE_CONTROL_HARDWAREPROFILECHANGE | 0x0000000C |
WIN32_SERVICE_CONTROL_INTERROGATE | 0x00000004 | 現状の情報をサービス制御マネージャーに報告するようサービスに指示します。
WIN32_SERVICE_CONTROL_NETBINDADD | 0x00000007 | バインドする新しいコンポーネントがあった場合、ネットワークサービスに通知します。
WIN32_SERVICE_CONTROL_NETBINDDISABLE | 0x0000000A | バインドされているコンポーネントが無効にされた場合、ネットワークサービスに通知します。
WIN32_SERVICE_CONTROL_NETBINDENABLE | 0x00000009 | 無効にされていたバインディングが有効になった場合、ネットワークサービスに通知します。
WIN32_SERVICE_CONTROL_NETBINDREMOVE | 0x00000008 | バインドされているコンポーネントが削除された場合、ネットワークサービスに通知します。
WIN32_SERVICE_CONTROL_PARAMCHANGE | 0x00000006 | 起動時のパラメータが変更されたことをサービスに通知します。
WIN32_SERVICE_CONTROL_PAUSE | 0x00000002 | サービスに停止するよう指示します。
WIN32_SERVICE_CONTROL_POWEREVENT | 0x0000000D |
WIN32_SERVICE_CONTROL_PRESHUTDOWN | 0x0000000F | サービスに、システムのシャットダウンを通知します。 この通知を処理するサービスは、サービスが終了するかあるいはシャットダウン前のタイムアウトに達するまで システムのシャットダウンを待機させることができます。 この値は、Windows Server 2003 および Windows XP/2000 以降では使えません。
WIN32_SERVICE_CONTROL_SESSIONCHANGE | 0x0000000E |
WIN32_SERVICE_CONTROL_SHUTDOWN | 0x00000005 | サービスに、システムがシャットダウンするので後始末をするよう通知します。 サービスがこの制御コードを受け付けた場合は、 後始末のタスクを終えてからサービスを終了しなければなりません。 SCM がこの制御コードを送った後は、他の制御コードを送ることはできません。
WIN32_SERVICE_CONTROL_STOP | 0x00000001 | サービスに終了するよう指示します。
Win32Service サービス制御メッセージが受領されたときのビットマスク
定数 | 値 | 説明
WIN32_SERVICE_ACCEPT_HARDWAREPROFILECHANGE | 0x00000020 | コンピューターのハードウェアプロファイルが変化した場合にサービスに通知します。 これによって、システムは WIN32_SERVICE_CONTROL_HARDWAREPROFILECHANGE をサービスに通知できるようになります。
WIN32_SERVICE_ACCEPT_NETBINDCHANGE | 0x00000010 | このサービスは、停止や再起動なしに、 バインディングの変更を受け入れることができるネットワークコンポーネントです。 この制御コードは、サービスが WIN32_SERVICE_CONTROL_NETBINDADD, WIN32_SERVICE_CONTROL_NETBINDREMOVE, WIN32_SERVICE_CONTROL_NETBINDENABLE および WIN32_SERVICE_CONTROL_NETBINDDISABLE の通知を受け取れることを表します。
WIN32_SERVICE_ACCEPT_PARAMCHANGE | 0x00000008 | サービスを停止したり再起動することなく、スタートアップパラメータを再読込できるサービスです。 この制御コードは、サービスが WIN32_SERVICE_CONTROL_PARAMCHANGE の通知を受け取れることを表します。
WIN32_SERVICE_ACCEPT_PAUSE_CONTINUE | 0x00000002 | サービスは一時停止して続行できます。この制御コードは、サービスが WIN32_SERVICE_CONTROL_PAUSE および WIN32_SERVICE_CONTROL_CONTINUE の通知を受け取れることを表します。
WIN32_SERVICE_ACCEPT_POWEREVENT | 0x00000040 | コンピューターの電源状態が変化した時にサービスに通知します。 これによって、システムが WIN32_SERVICE_CONTROL_POWEREVENT 通知をサービスに送信できるようになります。
WIN32_SERVICE_ACCEPT_PRESHUTDOWN | 0x00000100 | サービスはシャットダウン前のタスクを処理できます。この制御コードは、サービスが WIN32_SERVICE_CONTROL_PRESHUTDOWN の通知を受け取れることを表します。 この値は Windows Server 2003 や Windows XP/2000 以降では使えません。
WIN32_SERVICE_ACCEPT_SESSIONCHANGE | 0x00000080 | コンピューターのセッション状態が変更された場合にサービスに通知します。 これによって、システムは WIN32_SERVICE_CONTROL_SESSIONCHANGE 通知をサービスに送信できるようになります。 Windows 2000 では、この値は使えません。
WIN32_SERVICE_ACCEPT_SHUTDOWN | 0x00000004 | サービスはシステムのシャットダウン通知を受け取ります。この制御コードは、サービスが WIN32_SERVICE_CONTROL_SHUTDOWN の通知を受け取れることを表します。
WIN32_SERVICE_ACCEPT_STOP | 0x00000001 | サービスは終了できます。この制御コードは、サービスが WIN32_SERVICE_CONTROL_STOP の通知を受け取れることを表します。
WIN32_SERVICE_ACCEPT_TIMECHANGE | 0x00000200 | システム時刻が変更された場合にサービスに通知します。 これによって、システムは WIN32_SERVICE_CONTROL_TIMECHANGE 通知をサービスに送信できるようになります。 Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP/2000 では、この制御コードはサポートされていません。
WIN32_SERVICE_ACCEPT_TRIGGEREVENT | 0x00000400 | サービスの登録イベントが起きた場合にサービスに通知します。 これによって、システムは WIN32_SERVICE_CONTROL_TRIGGEREVENT 通知をサービスに送信できるようになります。 Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP/2000 では、この制御コードはサポートされていません。
Win32Service サービス開始型定数
定数 | 値 | 説明
WIN32_SERVICE_BOOT_START | 0x00000000 | デバイスドライバがシステムローダによって開始されました。 この値はドライバサービス向けにのみ有効です。
WIN32_SERVICE_SYSTEM_START | 0x00000001 | デバイスドライバが IoInitSystem 関数によって開始されました。 この値はドライバサービス向けにのみ有効です。
WIN32_SERVICE_AUTO_START | 0x00000002 | システムの起動時に、サービス制御マネージャーが自動的にサービスを開始します。
WIN32_SERVICE_DEMAND_START | 0x00000003 | プロセスが StartService 関数をコールしたときに、 サービス制御マネージャーがサービスを開始します。
WIN32_SERVICE_DISABLED | 0x00000004 | サービスを開始することができません。開始させようとすると、エラーコード WIN32_ERROR_SERVICE_DISABLED を返します。
Win32Service サービスエラー制御定数
定数 | 値 | 説明
WIN32_SERVICE_ERROR_IGNORE | 0x00000000 | 起動プログラムはエラーを無視し、開始操作を続行します。
WIN32_SERVICE_ERROR_NORMAL | 0x00000001 | 起動プログラムはエラーをイベントログに記録し、開始操作を続行します。
WIN32_SERVICE_ERROR_SEVERE | 0x00000002 | 起動プログラムはエラーをイベントログに記録します。 最後に正常起動した構成で起動中の場合、 起動処理は続行されます。そうでない場合、 システムは最後に正常起動した構成で再起動されます。
WIN32_SERVICE_ERROR_CRITICAL | 0x00000003 | 起動プログラムは可能であれば、エラーをイベントログに記録します。 最後に正常起動した構成で起動中の場合、 起動処理は失敗します。 そうでない場合、 システムは最後に正常起動した構成で再起動されます。
Win32Service サービスフラグ定数
定数 | 値 | 説明
WIN32_SERVICE_RUNS_IN_SYSTEM_PROCESS | 0x00000001 | サービスはシステムプロセスで動作し、常に動作している必要があります。

注意:

これらの定数は、Win32Service 1.0.0 以降では使えません。

Win32 エラーコード
定数 | 値 | 説明
WIN32_ERROR_ACCESS_DENIED | 0x00000005 | SCM データベースへのハンドルに適切なアクセス権限がありません。
WIN32_ERROR_CIRCULAR_DEPENDENCY | 0x00000423 | 循環依存のサービスを指定しました。
WIN32_ERROR_DATABASE_DOES_NOT_EXIST | 0x00000429 | 指定したデータベースが存在しません。
WIN32_ERROR_DEPENDENT_SERVICES_RUNNING | 0x0000041B | 他の実行中のサービスがこのサービスに依存しているため、サービスを終了できません。
WIN32_ERROR_DUPLICATE_SERVICE_NAME | 0x00000436 | その表示名が、サービス制御マネージャーのデータベース内に (データベース名あるいは別の表示名として) 既に存在します。
WIN32_ERROR_FAILED_SERVICE_CONTROLLER_CONNECT | 0x00000427 | このエラーは、サービスではなくコンソールアプリケーションとしてプログラムを実行したときに返されます。 デバッグ用にコンソールアプリケーションとして実行する場合は、 サービスに固有のコードをコールしないようにしましょう。
WIN32_ERROR_INSUFFICIENT_BUFFER | 0x0000007A | サービス状況構造体用のバッファが小さすぎます。構造体には何も書き込まれませんでした。
WIN32_ERROR_INVALID_DATA | 0x0000000D | 指定したサービス状況構造体が無効です。
WIN32_ERROR_INVALID_HANDLE | 0x00000006 | サービス制御マネージャーデータベースへのハンドルが無効です。
WIN32_ERROR_INVALID_LEVEL | 0x0000007C | InfoLevel パラメータにサポートしていない値が含まれています。
WIN32_ERROR_INVALID_NAME | 0x0000007B | 指定したサービス名が無効です。
WIN32_ERROR_INVALID_PARAMETER | 0x00000057 | 指定したパラメータが無効です。
WIN32_ERROR_INVALID_SERVICE_ACCOUNT | 0x00000421 | user で指定したユーザーアカウントが存在しません。 win32_create_service() を参照ください。
WIN32_ERROR_INVALID_SERVICE_CONTROL | 0x0000041C | 指定した制御コードが無効、あるいはこのサービスでは処理できません。
WIN32_ERROR_PATH_NOT_FOUND | 0x00000003 | サービスのバイナリファイルが見つかりません。
WIN32_ERROR_SERVICE_ALREADY_RUNNING | 0x00000420 | サービスのインスタンスが既に動作中です。
WIN32_ERROR_SERVICE_CANNOT_ACCEPT_CTRL | 0x00000425 | 指定した制御コードをサービスに送れませんでした。サービスの状態が WIN32_SERVICE_STOPPED、 WIN32_SERVICE_START_PENDING あるいは WIN32_SERVICE_STOP_PENDING だったためです。
WIN32_ERROR_SERVICE_DATABASE_LOCKED | 0x0000041F | データベースがロックされています。
WIN32_ERROR_SERVICE_DEPENDENCY_DELETED | 0x00000433 | このサービスが依存する別のサービスが存在しないか、あるいは削除マークがつけられています。
WIN32_ERROR_SERVICE_DEPENDENCY_FAIL | 0x0000042C | このサービスが依存する別のサービスの起動に失敗しました。
WIN32_ERROR_SERVICE_DISABLED | 0x00000422 | サービスが無効化されました。
WIN32_ERROR_SERVICE_DOES_NOT_EXIST | 0x00000424 | 指定したサービスはインストール済みのサービスの中に存在しません。
WIN32_ERROR_SERVICE_EXISTS | 0x00000431 | 指定したサービスは既にこのデータベースに存在します。
WIN32_ERROR_SERVICE_LOGON_FAILED | 0x0000042D | ログオンに失敗したためサービスを起動できません。このエラーが発生するのは、 そのサービスが "Log on as a service" 権限のないアカウントで動作するように設定されている場合です。
WIN32_ERROR_SERVICE_MARKED_FOR_DELETE | 0x00000430 | 指定したサービスには既に削除マークがついています。
WIN32_ERROR_SERVICE_NO_THREAD | 0x0000041E | このサービスのスレッドを作成できません。
WIN32_ERROR_SERVICE_NOT_ACTIVE | 0x00000426 | サービスが起動していません。
WIN32_ERROR_SERVICE_REQUEST_TIMEOUT | 0x0000041D | サービスのプロセスは起動しましたが StartServiceCtrlDispatcher をコールしていません。あるいは StartServiceCtrlDispatcher をコールしたスレッドが制御ハンドラ関数でブロックされています。
WIN32_ERROR_SHUTDOWN_IN_PROGRESS | 0x0000045B | システムがシャットダウン中なので、この関数はコールできません。
WIN32_ERROR_SERVICE_SPECIFIC_ERROR | 0x0000042A | サービスがサービス特有のエラーコードを返しました。
WIN32_NO_ERROR | 0x00000000 | エラーはありません。
Win32 ベース優先度クラス
定数 | 値 | 説明
WIN32_ABOVE_NORMAL_PRIORITY_CLASS | 0x00008000 | WIN32_NORMAL_PRIORITY_CLASS よりも高いけれど WIN32_HIGH_PRIORITY_CLASS よりは低い優先度のプロセス。
WIN32_BELOW_NORMAL_PRIORITY_CLASS | 0x00004000 | WIN32_IDLE_PRIORITY_CLASS よりも高いけれど WIN32_NORMAL_PRIORITY_CLASS よりは低い優先度のプロセス。
WIN32_HIGH_PRIORITY_CLASS | 0x00000080 | ただちに実行しなければならないような、時間制約の厳しいプロセス。 このプロセスのスレッドは、優先度クラスが NORMAL あるいは IDLE であるすべてのプロセスのスレッドを先取りします。 このクラスを使う例はタスクリストです。 タスクリストは、ユーザーが呼び出したときは OS の負荷にかかわらずすぐに反応しなければなりません。 この優先度クラスを使うときには細心の注意が必要です。 この優先度クラスのアプリケーションは CPU をほぼすべて使い切ってしまうこともあるからです。
WIN32_IDLE_PRIORITY_CLASS | 0x00000040 | システムがアイドル状態のときにだけスレッドが実行されるプロセス。 より優先度クラスの高いプロセスが実行中の場合は、 そちらのスレッドが優先的に実行されます。 このクラスを使う例はスクリーンセーバーです。 この優先度クラスは、子プロセスにも引き継がれます。
WIN32_NORMAL_PRIORITY_CLASS | 0x00000020 | 特別なスケジューリングが不要なプロセス。
WIN32_REALTIME_PRIORITY_CLASS | 0x00000100 | 可能な限り優先度を高くするプロセス。 このプロセスのスレッドは、他のすべてのプロセスのスレッドを先取りします。 重要なタスクをこなす OS のプロセスであっても例外ではありません。 リアルタイムプロセスを非常に短い間隔で実行させると、 ディスクキャッシュがフラッシュされなくなったり マウスが反応しなくなったりすることがあり得ます。
Win32 リカバリアクション
定数 | 値 | 説明
WIN32_SC_ACTION_NONE | 0x00000000 | アクションを実行しません。
WIN32_SC_ACTION_RESTART | 0x00000001 | サービスを再起動します。
WIN32_SC_ACTION_REBOOT | 0x00000002 | サーバーを再起動します。
WIN32_SC_ACTION_RUN_COMMAND | 0x00000003 | コマンドを実行します。
Win32 サービスの情報
定数 | 値 | 説明
WIN32_INFO_SERVICE | "service" |
WIN32_INFO_DISPLAY | "display" |
WIN32_INFO_USER | "user" |
WIN32_INFO_PASSWORD | "password" |
WIN32_INFO_PATH | "path" |
WIN32_INFO_PARAMS | "params" |
WIN32_INFO_DESCRIPTION | "description" |
WIN32_INFO_START_TYPE | "start_type" |
INFO_LOAD_ORDER | "load_order" |
INFO_SVC_TYPE | "svc_type" |
INFO_ERROR_CONTROL | "error_control" |
INFO_DELAYED_START | "delayed_start" |
INFO_BASE_PRIORITY | "base_priority" |
INFO_DEPENDENCIES | "dependencies" |
INFO_RECOVERY_DELAY | "recovery_delay" |
INFO_RECOVERY_ACTION_1 | "recovery_action_1" |
INFO_RECOVERY_ACTION_2 | "recovery_action_2" |
INFO_RECOVERY_ACTION_3 | "recovery_action_3" |
INFO_RECOVERY_RESET_PERIOD | "recovery_reset_period" |
INFO_RECOVERY_ENABLED | "recovery_enabled" |
INFO_RECOVERY_REBOOT_MSG | "recovery_reboot_msg" |
INFO_RECOVERY_COMMAND | "recovery_command" |

User Contributed Notes

There are no user contributed notes for this page.


The Win32ServiceException class

(PECL win32service >=1.0.0)

はじめに

この例外は、 エラーを検知するために、 定数と比較する必要があった古いやり方を置き換えるものです。 この例外が持つコードは、対応する定数の値と等しく、 例外メッセージも対応する定数名に基づいています。

クラス概要

class Win32ServiceException extends Exception {
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 継承したメソッド */
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

User Contributed Notes

There are no user contributed notes for this page.


例

例1 PHP スクリプトをサービスとして登録する

<?php
win32_create_service(array(
'service' => 'dummyphp', # サービスの名前
'display' => 'sample dummy PHP service', # 短い説明
'description' => 'This is a dummy Windows service created using PHP.', # 長い説明
'params' => '"' . __FILE__ . '" run', # スクリプトへのパスとパラメータ
));
?>

例2 サービスの登録を解除する

<?php
win32_delete_service('dummyphp');
?>

例3 サービスとして実行する

<?php
if ($argv[1] == 'run') {
win32_start_service_ctrl_dispatcher('dummyphp');

while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# ここに実際の作業内容を書きます。
# 1 回のループに 30 秒以上かからないように心がけてください。
}
}
?>

User Contributed Notes

There are no user contributed notes for this page.


win32service 関数

目次

  • win32_continue_service — 中断したサービスを再開する
  • win32_create_service — SCM データベースに新しいサービスのエントリを作成する
  • win32_delete_service — SCM データベースからサービスのエントリを削除する
  • win32_get_last_control_message — サービスに送信された直近の制御メッセージを返す
  • win32_pause_service — サービスを中断する
  • win32_query_service_status — サービスの状態を問い合わせる
  • win32_send_custom_control — Send a custom control to the service
  • win32_set_service_exit_code — Define or return the exit code for the current running service
  • win32_set_service_exit_mode — Define or return the exit mode for the current running service
  • win32_set_service_status — サービスの状態を更新する
  • win32_start_service — サービスを開始する
  • win32_start_service_ctrl_dispatcher — スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
  • win32_stop_service — サービスを停止する

User Contributed Notes

brian dot ngure at gmail dot com 30-Apr-2010 03:03
An example of how it should be done:

<?php

class TestClass {
    private $args;

    function __construct($arg) {
        $this->args = $arg;
        $this->run();
    }

    private function run() {
        if ($this->args == 'run') {
            win32_start_service_ctrl_dispatcher('test_service');

            while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
                # do your work here.
                # try not to take up more than 30 seconds before going around the loop
                # again
            }
        }
    }
}

$object = new TestClass($argv[1]);

?>


中断したサービスを再開する

  • ≪ win32service 関数
  • win32_create_service ≫
  • PHP Manual
  • win32service 関数
  • 中断したサービスを再開する

win32_continue_service

(PECL win32service >=0.1.0)

win32_continue_service — 中断したサービスを再開する

説明

win32_continue_service(string $servicename, string $machine = ?): void

指定した名前の、中断しているサービスを再開します。 管理者権限、 またはサービスのACLで適切な権限が設定されたアカウントが必要です。

パラメータ

servicename

サービスの短い名前。

machine

マシン名。省略可能で、省略した場合はローカルマシンを使います。

戻り値

値を返しません。

バージョン 1.0.0 より前では、 成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

servicename の値が空の場合は、 ValueError がスローされます。

エラーが発生した場合は、 Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。
PECL win32service 0.3.0 | ACLが別のアカウントに設定されていた場合、 この関数には管理者権限が不要になりました。

参考

  • win32_start_service() - サービスを開始する
  • win32_stop_service() - サービスを停止する
  • win32_pause_service() - サービスを中断する
  • win32_send_custom_control() - Send a custom control to the service
  • Win32 エラーコード

User Contributed Notes

There are no user contributed notes for this page.


SCM データベースに新しいサービスのエントリを作成する

  • ≪ win32_continue_service
  • win32_delete_service ≫
  • PHP Manual
  • win32service 関数
  • SCM データベースに新しいサービスのエントリを作成する

win32_create_service

(PECL win32service >=0.1.0)

win32_create_service — SCM データベースに新しいサービスのエントリを作成する

説明

win32_create_service(array $details, string $machine = ?): void

SCM データベースに新しいサービスの追加を試みます。 この操作を成功させるには、管理者権限が必要です。

パラメータ

details

サービスの詳細情報を含む配列。

service

サービスの短い名前。net コマンドでサービスを 制御する際に、この名前を使用します。この名前は一意である（同名の サービスが 2 つ存在することがない）必要があり、スペースを含む 名前は可能な限り避けるべきです。

display

サービスの表示名。これは、サービスアプレットに表示される名前です。

description

サービスの長い名前。これは「サービス」アプレットで表示される名前です。

user

サービスを実行するユーザー名。指定しなかった場合、サービスは LocalSystem アカウントで実行されます。ユーザー名が指定された場合、 password も指定する必要があります。

password

user に対応するパスワード。

path

サービスの開始時に起動される実行モジュールのフルパス。 指定しなかった場合、現在の PHP プロセスへのパスが使用されます。

params

サービスの開始時に渡されるコマンドラインパラメータ。 PHP スクリプトをサービスとして実行したい場合は、最初のパラメータは 実行するスクリプトへのフルパスとなります。 スクリプト名やパスにスペースを含む場合は、PHP スクリプトへのフルパスを " で囲まなければなりません。

load_order

load_order を制御します。現時点では完全にはサポートされていません。

svc_type

サービスの型を指定します。指定しなかった場合、デフォルト値は WIN32_SERVICE_WIN32_OWN_PROCESS です。 よくわからない場合はこの値を変更しないでください。

start_type

サービスをどのように開始させるかを指定します。デフォルトは WIN32_SERVICE_AUTO_START で、これは マシンの起動時にサービスを開始させることを意味します。

error_control

サービスに問題が発生した際にとるべき行動を SCM に指示します。 デフォルトは WIN32_SERVER_ERROR_IGNORE です。 この値を変更することは、現時点では完全にはサポートされていません。

delayed_start

delayed_start を true にすると、 他の自動起動サービスが開始したあとで少し間をおいてサービスが起動するようになります。

任意のサービスに対してこれを指定することができますが、そのサービスの start_type が WIN32_SERVICE_AUTO_START でない場合は何の効果も及ぼしません。

この設定が使えるのは、Windows Vista および Windows Server 2008 以降のみです。

base_priority

プロセッサの使用状況への影響を考慮すると、 ベース優先度は通常より低めに設定しておかなければなりません。

base_priority には、 Win32 ベース優先度クラス で定義された定数のいずれかを設定します。

dependencies

サービスへの依存性を定義します。 サービス名の一覧を配列として設定する必要があるかもしれません。

recovery_delay

失敗時とリカバリアクションの実行の間に取る時間を定義します。 この値はマイクロ秒単位です。

デフォルトは 60000 です。

recovery_action_1

最初の失敗時に実行されるアクションです。 デフォルトの値は WIN32_SC_ACTION_NONE です。

recovery_action_1 は、 Win32 Recovery action で定義された定数のうちのひとつを設定できます。

recovery_action_2

二回目の失敗時に実行されるアクションです。 デフォルトの値は WIN32_SC_ACTION_NONE です。

recovery_action_2 は、 Win32 Recovery action で定義された定数のうちのひとつを設定できます。

recovery_action_3

3回目以降の失敗時に実行されるアクションです。 デフォルトの値は WIN32_SC_ACTION_NONE です。

recovery_action_3 は、 Win32 Recovery action で定義された定数のうちのひとつを設定できます。

recovery_reset_period

ここで定義された時間が経過すると、失敗のカウンタがリセットされます。 秒単位で設定します。

デフォルト値は 86400 です。

recovery_enabled

リカバリ設定を有効にする場合は true を設定します。 無効にする場合は false を設定します。

デフォルトは false です。

recovery_reboot_msg

リブート時に Windows のイベントログに記録されるメッセージを設定します。 アクションを WIN32_SC_ACTION_REBOOT に設定する場合にだけ使ってください。

recovery_command

アクションが WIN32_SC_ACTION_RUN_COMMAND に設定された場合に、実行されるコマンドを設定します。

machine

オプションで、サービスを作成したいマシン名を指定します。 指定しなかった場合は、ローカルマシンを使用します。

戻り値

値を返しません。

バージョン 1.0.0 より前では、成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

service 引数が空の場合、 ValueError がスローされます。

path 引数が渡されていないか、空の場合、 ValueError がスローされます。

svc_type 引数が不正な場合は、 ValueError がスローされます。

start_type 引数が不正な場合は、 ValueError がスローされます。

error_control 引数が不正な場合は、 ValueError がスローされます。

base_priority 引数が不正な場合は、 ValueError がスローされます。

recovery_delay 引数が 0 と PHP_INT_MAX の間にない場合は、 ValueError がスローされます。

recovery_action_1 引数が不正な場合は、 ValueError がスローされます。

recovery_action_2 引数が不正な場合は、 ValueError がスローされます。

recovery_action_3 引数が不正な場合は、 ValueError がスローされます。

recovery_reset_period 引数が 0 と PHP_INT_MAX の間にない場合は、 ValueError がスローされます。

エラーが発生した場合は、Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。
PECL win32service 0.4.0 | dependencies, recovery_delay, recovery_action_1, recovery_action_2, recovery_action_3, recovery_reset_period, recovery_enabled, recovery_reboot_msg および recovery_command パラメータが追加されました。

例

例1 win32_create_service() の例

'dummyphp' というショートネームのサービスを作ります。

<?php
$x = win32_create_service(array(
'service' => 'dummyphp', // サービスの名前
'display' => 'sample dummy PHP service', // 短い説明
'description' => 'This is a dummy Windows service created using PHP.', // 長い説明
'params' => '"' . __FILE__ . '" run', // スクリプトへのパスとパラメータ
));
debug_zval_dump($x);
?>

例2 依存性を用いた win32_create_service() の例

依存性がある 'dummyphp' というショートネームのサービスを作ります。

<?php
$x = win32_create_service(array(
'service' => 'dummyphp', // サービスの名前
'display' => 'sample dummy PHP service', // 短い説明
'description' => 'This is a dummy Windows service created using PHP.', // 長い説明
'params' => '"' . __FILE__ . '" run', // スクリプトへのパスとパラメータ
'dependencies' => array("Netman"), // 依存性のリスト
));
debug_zval_dump($x);
?>

例3 リカバリ設定を用いた win32_create_service() の例

リカバリ設定がある 'dummyphp' というショートネームのサービスを作ります。

<?php
$x = win32_create_service(array(
'service' => 'dummyphp', // サービスの名前
'display' => 'sample dummy PHP service', // 短い説明
'description' => 'This is a dummy Windows service created using PHP.', // 長い説明
'params' => '"' . __FILE__ . '" run', // スクリプトへのパスとパラメータ
'recovery_delay' => 120000, // 2分後に実行されるリカバリアクション
'recovery_action_1' => WIN32_SC_ACTION_RESTART, // 最初の失敗時にサービスを再起動する
'recovery_action_2' => WIN32_SC_ACTION_RUN_COMMAND, // 2回目の失敗時にはコマンドを実行
'recovery_action_3' => WIN32_SC_ACTION_NONE, // その他の失敗時には何もしない
'recovery_reset_period' => 86400, // 1日後には失敗のカウンタをリセット
'recovery_enabled' => true, // リカバリパラメータを有効にする
'recovery_reboot_msg' => null, // 不要ならリブート時のメッセージは定義するな
'recovery_command' => "c:\clean-service.bat", // アクションが WIN32_SC_ACTION_RUN_COMMAND の場合、このコマンドが実行される
));
debug_zval_dump($x);
?>

参考

  • win32_delete_service() - SCM データベースからサービスのエントリを削除する
  • Win32 Base Priority Classes
  • Win32 Recovery action
  • Win32 Error Codes

User Contributed Notes

Anonymous 08-Oct-2010 10:05
[An example of how to create a Windows service.  Evaluate code first and use at your own risk!]

<?php

//No timeouts, Flush Content immediatly
    set_time_limit(0);
    ob_implicit_flush();

//Service Settings
    $phpPath = "D:\\php\\php5.2.9";
    $ServiceName = 'phpServiceName';
    $ServiceDisplay = 'phpDisplayName';

//Windows Service Control
    $ServiceAction = "status";
    //$ServiceAction = "debug";
    if ( isset($_GET['ServiceAction']) and strlen($_GET['ServiceAction']) ) {
        $ServiceAction = addslashes($_GET['ServiceAction']);
    } else if ( isset($argv) and isset($argv[1]) and strlen($argv[1]) ) {
        $ServiceAction = $argv[1];
    }
    if( $ServiceAction == "status" ) {
        $ServiceStatus = win32_query_service_status($ServiceName);
        if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_STOPPED ) {
            echo "Service Stopped\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_START_PENDING ) {
            echo "Service Start Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_STOP_PENDING ) {
            echo "Service Stop Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_RUNNING ) {
            echo "Service Running\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_CONTINUE_PENDING ) {
            echo "Service Continue Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSE_PENDING ) {
            echo "Service Pause Pending\n\n";
        } else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSED ) {
            echo "Service Paused\n\n";
        } else{
            echo "Service Unknown\n\n";
        }
      exit;
    } else if ( $ServiceAction == "install" ) {
    //Install Windows Service
        win32_create_service( Array(
            'service' => $ServiceName,
            'display' => $ServiceDisplay,
            'params' => __FILE__ . " run",
            'path' => $phpPath."\\php.exe",
        ));
        echo "Service Installed\n\n";
        exit;
    } else if ( $ServiceAction == "uninstall" ) {
    //Remove Windows Service
        win32_delete_service($ServiceName);
        echo "Service Removed\n\n";
        exit;
    } else if( $ServiceAction == "start") {
    //Start Windows Service
      win32_start_service($ServiceName);
      echo "Service Started\n\n";
      exit;
    } else if( $ServiceAction == "stop" ) {
    //Stop Windows Service
      win32_stop_service($ServiceName);
      echo "Service Stopped\n\n";
      exit;
    } else if ( $ServiceAction == "run" ) {
    //Run Windows Service
        win32_start_service_ctrl_dispatcher($ServiceName);
        win32_set_service_status(WIN32_SERVICE_RUNNING);
    } else if ( $ServiceAction == "debug" ) {
    //Debug Windows Service
        set_time_limit(10);
    } else {
        exit();
    }

//Server Loop
    while (1) {
    //Handle Windows Service Request
        usleep(100*1000);
        if ( $ServiceAction == "run" ) {
            switch ( win32_get_last_control_message() ) {
                case WIN32_SERVICE_CONTROL_CONTINUE:
                    break;
                case WIN32_SERVICE_CONTROL_INTERROGATE:
                    win32_set_service_status(WIN32_NO_ERROR);
                break;
                case WIN32_SERVICE_CONTROL_STOP:
                    win32_set_service_status(WIN32_SERVICE_STOPPED);
                    exit;
                default:
                    win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED);
            }
        }
    //User Loop
        sleep(1);
        echo "\n<BR>YOUR CODE HERE";
    }

//Exit
    if ( $ServiceAction == "run" ) {
        win32_set_service_status(WIN32_SERVICE_STOPPED);
    }
    exit();
?>
pauljamesthomson at gmail dot com 22-Jan-2007 04:54
Other start_type values:

0x00000002: A service started automatically by the service control manager during system startup. For more information, see Automatically Starting Services.

0x00000000: A device driver started by the system loader. This value is valid only for driver services.

0x00000003: A service started by the service control manager when a process calls the win32_start_service() function.

0x00000004: A service that cannot be started. Attempts to start the service result in the error code

0x00000001: A device driver started by the IoInitSystem function. This value is valid only for driver services.

I can confirm that 0x00000003 works as expected (service is created, but must be started manually).

More here:

http://msdn2.microsoft.com/en-us/library/ms682450.aspx


SCM データベースからサービスのエントリを削除する

  • ≪ win32_create_service
  • win32_get_last_control_message ≫
  • PHP Manual
  • win32service 関数
  • SCM データベースからサービスのエントリを削除する

win32_delete_service

(PECL win32service >=0.1.0)

win32_delete_service — SCM データベースからサービスのエントリを削除する

説明

win32_delete_service(string $servicename, string $machine = ?): void

SCM データベースからサービスの削除を試みます。管理者権限が必要です。

この関数は、単にサービスに削除マークをつけるだけです。もし他のプロセス （サービスアプレットなど）が開かれた場合、削除処理はそのアプリケーションが 終了するまで延期されます。サービスに削除マークがつけられると、それ以降は 同じサービスに対する削除の試行は失敗します。また同名の新規サービスを作成 しようとする処理も失敗します。

パラメータ

servicename

サービスの短い名前。

machine

オプションのマシン名。指定しなかった場合、ローカルマシンが使用されます。

戻り値

値を返しません。

バージョン 1.0.0 より前では、 成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

servicename 引数が空の場合は、 ValueError がスローされます。

エラー時には Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。

例

例1 win32_delete_service() の例

dummyphp サービスを削除します。

<?php
win32_delete_service('dummyphp');
?>

参考

  • win32_create_service() - SCM データベースに新しいサービスのエントリを作成する
  • Win32 エラーコード

User Contributed Notes

There are no user contributed notes for this page.


サービスに送信された直近の制御メッセージを返す

  • ≪ win32_delete_service
  • win32_pause_service ≫
  • PHP Manual
  • win32service 関数
  • サービスに送信された直近の制御メッセージを返す

win32_get_last_control_message

(PECL win32service >=0.1.0)

win32_get_last_control_message — サービスに送信された直近の制御メッセージを返す

説明

win32_get_last_control_message(): int

サービスプロセスに送信された、直近の制御コードを返します。 サービスの実行中は、サービスを停止させる必要がないかを調べるために 定期的にこれをチェックすべきです。

警告

0.2.0 以降では、この関数は "cli" SAPI でのみ動作します。 他の SAPI では、この関数は無効になっています。

パラメータ

この関数にはパラメータはありません。

戻り値

制御コード定数を返します。以下の Win32Service サービス制御メッセージ定数 のひとつです。 WIN32_SERVICE_CONTROL_CONTINUE, WIN32_SERVICE_CONTROL_DEVICEEVENT, WIN32_SERVICE_CONTROL_HARDWAREPROFILECHANGE, WIN32_SERVICE_CONTROL_INTERROGATE, WIN32_SERVICE_CONTROL_NETBINDADD, WIN32_SERVICE_CONTROL_NETBINDDISABLE, WIN32_SERVICE_CONTROL_NETBINDENABLE, WIN32_SERVICE_CONTROL_NETBINDREMOVE, WIN32_SERVICE_CONTROL_PARAMCHANGE, WIN32_SERVICE_CONTROL_PAUSE, WIN32_SERVICE_CONTROL_POWEREVENT, WIN32_SERVICE_CONTROL_PRESHUTDOWN, WIN32_SERVICE_CONTROL_SESSIONCHANGE, WIN32_SERVICE_CONTROL_SHUTDOWN, WIN32_SERVICE_CONTROL_STOP。

値が 128 から 255 の場合、制御コードはカスタムの値です。

エラー / 例外

バージョン 1.0.0 より前のバージョンでは、SAPI が "cli" でない場合、 この関数は E_ERROR レベルのエラーを発生させていました。

バージョン 1.0.0 移行は、 SAPI が "cli" でない場合、 Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 0.2.0 | この関数は "cli" SAPI でのみ動作するようになりました。

参考

  • win32_start_service_ctrl_dispatcher() - スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
  • win32_set_service_status() - サービスの状態を更新する
  • win32_set_service_exit_mode() - Define or return the exit mode for the current running service
  • win32_set_service_exit_code() - Define or return the exit code for the current running service
  • Win32Service サービス制御メッセージ定数

User Contributed Notes

There are no user contributed notes for this page.


サービスを中断する

  • ≪ win32_get_last_control_message
  • win32_query_service_status ≫
  • PHP Manual
  • win32service 関数
  • サービスを中断する

win32_pause_service

(PECL win32service >=0.1.0)

win32_pause_service — サービスを中断する

説明

win32_pause_service(string $servicename, string $machine = ?): void

指定した名前のサービスを中断します。 管理者権限、 またはサービスのACLで適切な権限が設定されたアカウントが必要です。

パラメータ

servicename

サービスの短い名前。

machine

マシン名。省略可能で、省略した場合はローカルマシンを使います。

戻り値

値を返しません。

バージョン 1.0.0 より前では、 成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

servicename 引数が空の場合、 ValueError がスローされます。

エラー時には Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。
PECL win32service 0.3.0 | ACLが別のアカウントに設定されていた場合、 この関数には管理者権限が不要になりました。

参考

  • win32_start_service() - サービスを開始する
  • win32_stop_service() - サービスを停止する
  • win32_continue_service() - 中断したサービスを再開する
  • win32_send_custom_control() - Send a custom control to the service
  • Win32 エラーコード

User Contributed Notes

There are no user contributed notes for this page.


サービスの状態を問い合わせる

  • ≪ win32_pause_service
  • win32_send_custom_control ≫
  • PHP Manual
  • win32service 関数
  • サービスの状態を問い合わせる

win32_query_service_status

(PECL win32service >=0.1.0)

win32_query_service_status — サービスの状態を問い合わせる

説明

win32_query_service_status(string $servicename, string $machine = ?): array

サービスの稼動状況を問い合わせ、情報を配列で返します。

パラメータ

servicename

サービスの短い名前。

machine

オプションのマシン名。指定しなかった場合、ローカルマシンが使用されます。

戻り値

成功した場合に以下の情報を含む配列を返します。

バージョン 1.0.0 より前では、パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

ServiceType

dwServiceType Win32Service サービス型のビットマスク を参照ください。

CurrentState

dwCurrentState Win32Service サービスステータス定数 を参照ください。

ControlsAccepted

サービスが許可しているコントロール。 Win32Service サービス制御メッセージが受領されたときのビットマスク を参照ください。

Win32ExitCode

サービスが終了した際にプロセスが返すコード。 この値は終了モードがgracefulでなかった場合、 WIN32_ERROR_SERVICE_SPECIFIC_ERROR と同じです。 Win32Service エラーコード および win32_set_service_exit_mode() も参照ください。

ServiceSpecificExitCode

サービスが異常終了した際にイベントログに記録されるコード。 この値は win32_set_service_exit_code() で定義された値と同じです。

CheckPoint

サービスが終了する際に、現在のチェックポイント番号を保持します。 SCM はこれをいわゆる心拍のように扱い、反応しなくなったサービスを 検出するために使用します。この値は、WaitHint の値と組み合わせて 用いられます。

WaitHint

サービスが終了する際に、WaitHint を checkpoint の値に設定します。 この処理が終了した時点でサービスの終了処理が 100% 完了したことを示します。 これは、進捗状況のインジケータを実装する際に使用します。

ProcessId

Windows のプロセス ID 。0 の場合、プロセスは実行していません。

ServiceFlags

dwServiceFlags Win32Service サービスフラグ定数 を参照ください。

エラー / 例外

servicename 引数が空の場合、 ValueError がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が array になりました。 これより前のバージョンでは、mixed でした。

参考

  • Win32Service 定義済み定数

User Contributed Notes

demers dot alex at gmail dot com 21-Jul-2009 08:39
This function will return an array containing the above information as a return value, but if this fails it will return an integer which is a System Error Code. All the System Error Codes can be found here:

http://msdn.microsoft.com/en-us/library/ms681381%28VS.85%29.aspx

In my case, it returned 5, in which I immediately knew why and fixed the issue right away.

In the case of mnemotronic at netscape dot net, here in the documentation notes, it returned 1060 which is:

ERROR_SERVICE_DOES_NOT_EXIST
1060 (0x424)
The specified service does not exist as an installed service.

Again, it should not return FALSE, instead an System Error Code for Windows.


Send a custom control to the service

  • ≪ win32_query_service_status
  • win32_set_service_exit_code ≫
  • PHP Manual
  • win32service 関数
  • Send a custom control to the service

win32_send_custom_control

(PECL win32service >=0.4.0)

win32_send_custom_control — Send a custom control to the service

説明

win32_send_custom_control(string $servicename, int $control, string $machine = ?): void

See » Microsoft ControlService function for more details

パラメータ

servicename

The short name of the service.

control

The custom contole value between 128 and 255.

machine

Optional machine name. If omitted, the local machine is used.

戻り値

値を返しません。

Prior to version 1.0.0, 成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

Prior to version 1.0.0, if the control value is not between 128 and 255, this function emits an E_ERROR level error.

A ValueError is thrown if the value of servicename parameter is empty.

A ValueError is thrown if the value of control parameter is not between 128 and 255.

A Win32ServiceException is thrown on error.

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | Throws a ValueError on invalid data in parameters, previously false was returned.
PECL win32service 1.0.0 | Throws a Win32ServiceException on error, previously a Win32 Error Code was returned.
PECL win32service 1.0.0 | The return type is now void, previously it was mixed.

参考

  • win32_start_service() - サービスを開始する
  • win32_stop_service() - サービスを停止する
  • win32_pause_service() - サービスを中断する
  • win32_continue_service() - 中断したサービスを再開する
  • Win32 Error Codes

User Contributed Notes

There are no user contributed notes for this page.


Define or return the exit code for the current running service

  • ≪ win32_send_custom_control
  • win32_set_service_exit_mode ≫
  • PHP Manual
  • win32service 関数
  • Define or return the exit code for the current running service

win32_set_service_exit_code

(PECL win32service >=0.4.0)

win32_set_service_exit_code — Define or return the exit code for the current running service

説明

win32_set_service_exit_code(int $exitCode = 1): int

Change or return the exit code. The exit code is used only if the exit mode is not graceful. If the value is not zero, the recovery configuration can be used after service fail. See » Microsoft system error codes for more details

警告

This function work only in "cli" SAPI. On other SAPI this function is disabled.

パラメータ

exitCode

The return code used on exit.

戻り値

Return the current or old exit code.

エラー / 例外

Prior to version 1.0.0, if the SAPI is not "cli", this function emits an E_ERROR level error.

As of version 1.0.0, will throw a Win32ServiceException if SAPI is not "cli"

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | Throws a ValueError on invalid data in parameters, previously false was returned.
PECL win32service 1.0.0 | Throws a Win32ServiceException on error, previously a Win32 Error Code was returned.

参考

  • win32_start_service_ctrl_dispatcher() - スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
  • win32_set_service_status() - サービスの状態を更新する
  • win32_set_service_exit_mode() - Define or return the exit mode for the current running service

User Contributed Notes

There are no user contributed notes for this page.


Define or return the exit mode for the current running service

  • ≪ win32_set_service_exit_code
  • win32_set_service_status ≫
  • PHP Manual
  • win32service 関数
  • Define or return the exit mode for the current running service

win32_set_service_exit_mode

(PECL win32service >=0.4.0)

win32_set_service_exit_mode — Define or return the exit mode for the current running service

説明

win32_set_service_exit_mode(bool $gracefulMode = true): bool

If gracefulMode parameter is provided, the exit mode is changed. When the exit mode is not gracefuly, the exit code used can be set with the win32_set_service_exit_code() function.

警告

This function work only in "cli" SAPI. On other SAPI this function is disabled.

パラメータ

gracefulMode

true for exit graceful. false for exit with error.

戻り値

Return the current or old exit mode.

エラー / 例外

Prior to version 1.0.0, if the SAPI is not "cli", this function emits an E_ERROR level error.

As of version 1.0.0, will throw a Win32ServiceException if SAPI is not "cli"

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | Throws a ValueError on invalid data in parameters, previously false was returned.
PECL win32service 1.0.0 | Throws a Win32ServiceException on error, previously a Win32 Error Code was returned.

参考

  • win32_start_service_ctrl_dispatcher() - スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
  • win32_set_service_status() - サービスの状態を更新する
  • win32_set_service_exit_code() - Define or return the exit code for the current running service

User Contributed Notes

There are no user contributed notes for this page.


サービスの状態を更新する

  • ≪ win32_set_service_exit_mode
  • win32_start_service ≫
  • PHP Manual
  • win32service 関数
  • サービスの状態を更新する

win32_set_service_status

(PECL win32service >=0.1.0)

win32_set_service_status — サービスの状態を更新する

説明

win32_set_service_status(int $status, int $checkpoint = 0): void

SCM に、実行中のサービスの現在の状態を通知します。 この関数のコールは、現在実行中のサービスについてのみ有効です。

警告

バージョン 0.2.0 以降は、この関数は "cli" SAPI でのみ動作します。 他の SAPI では、この関数は無効になっています。

パラメータ

status

以下のステータスコードのうちのひとつ。 WIN32_SERVICE_RUNNING、 WIN32_SERVICE_STOPPED、 WIN32_SERVICE_STOP_PENDING、 WIN32_SERVICE_START_PENDING、 WIN32_SERVICE_CONTINUE_PENDING、 WIN32_SERVICE_PAUSE_PENDING、 WIN32_SERVICE_PAUSED。

checkpoint

start, stop, pause や continue の操作がとても時間がかかる場合に、 その状態を報告する目的で定期的にインクリメントされるチェックポイントの値。 たとえば、サービスが起動中の場合は、 初期化のステップがひとつ終了するたびに、 この値をインクリメントすべきです。

checkpoint の値は、 status が以下の場合のみ、正しい値です: WIN32_SERVICE_STOP_PENDING, WIN32_SERVICE_START_PENDING, WIN32_SERVICE_CONTINUE_PENDING, WIN32_SERVICE_PAUSE_PENDING.

戻り値

値を返しません。

バージョン 1.0.0 より前では、成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

バージョン 1.0.0 より前では、 SAPI が "cli" でない場合、 この関数は E_ERROR レベルのエラーを発生させていました。

バージョン 1.0.0 以降では、 SAPI が "cli" でない場合、 Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。
PECL win32service 0.2.0 | この関数は、"cli" SAPI でのみ動作するようになりました。

参考

  • win32_start_service_ctrl_dispatcher() - スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
  • win32_get_last_control_message() - サービスに送信された直近の制御メッセージを返す
  • win32_set_service_exit_mode() - Define or return the exit mode for the current running service
  • win32_set_service_exit_code() - Define or return the exit code for the current running service
  • Win32Service サービスステータス定数

User Contributed Notes

paul_nelson57071 at yahoo dot com 13-May-2010 11:04
So after much searching I finally found all the peices to make a working windows service & server including:
- Installing & Uninstalling the service
- Starting & Stopping the Service
- Actually running a basic Server
- Responding to windows Service to Stop/Start/Restart

I hope you find this useful! I did this using PHP 5.2 and the PECL library for 5.2 (PHP 5.3 at the time does not have a PECL Library compiled for it)

<?php
    //Service Settings
    $Service = 'MyServiceFinal';
    $Display = 'My PHP Service';

    //Server Settings
    $host = '127.0.0.1';        //Bind to IP #
    $port = 23;                            //On port #
    $max = 20;                            //Maximum Clients

    //Exit if no start-up argument is passed
    if (!isset($argv[1])){ShowHelp(); exit;}

    //Create Windows Service
    if ($argv[1] == 'install') {
    $x = win32_create_service(array(
        'service' => $Service,
        'display' => $Service,
        'params' => __file__ . ' run',
        'path' => 'c:\\php\\php.exe',
    ));
    debug_zval_dump($x);
    echo "Service Installed\n\n";
    exit;

  //Remove Windows Service
    } else if ($argv[1] == 'uninstall') {
        $x = win32_delete_service($Service);
        debug_zval_dump($x);
        echo "Service Removed\n\n";
        exit;

  //Start Windows Service
    } elseif($argv[1] == "start") {
      $x = win32_start_service($Service);
      debug_zval_dump($x);
      echo "Service Started\n\n";
      exit;

    //Stop Windows Service
    } elseif($argv[1] == "stop") {
      $x = win32_stop_service($Service);
      debug_zval_dump($x);
      echo "Service Stopped\n\n";
      exit;

    //Unkown Command
    } else if ($argv[1] != 'run') {
        ShowHelp(); exit();
    }

//Tell windows the service has started...
if (!win32_start_service_ctrl_dispatcher($Service)) die("Could not connect to service : $Service");
win32_set_service_status(WIN32_SERVICE_RUNNING);

// No timeouts, flush content immediatly
set_time_limit(0);
ob_implicit_flush();

//Server Loop
while (1) {
    usleep(500);

    //Handle Windows Service Request
    switch (win32_get_last_control_message()) {
        case WIN32_SERVICE_CONTROL_CONTINUE: break; // Continue server routine
        case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_NO_ERROR); break; // Respond with status
        case WIN32_SERVICE_CONTROL_STOP: win32_set_service_status(WIN32_SERVICE_STOPPED); exit; // Terminate script
        default: win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); // Add more cases to handle other service calls
    }
    //Acutal Server Code

}

//Clean up and Exit
win32_set_service_status(WIN32_SERVICE_STOPPED);
exit;

//*************** FUNCTIONS ***************
function ShowHelp(){
    echo "Usage:
    install:\t installs servce
    uninstall:\t deletes service
    start:\t\t Start the windows service
    stop:\t\t Stops the windows service
    run:\t\t called by CMS to run the service

For information on code numbers type 'net helpmsg xxxx'
EXAMPEL: 'net helpmsg 1072'

    ";
}
?>
m dot hald at surfto dot ch 12-May-2008 04:16
On my Machine (Win XP SP2) the function "win32_get_last_control_message" never returns 4 so i will have to reply to 0 also.

finally after mixing several examples i now have a version working woithout filling my event log with errors:

<?php

/*
 * PHP SAMPLE TEMPLATE
 */

/*
 * APP MAIN FUNCTION
 * Called each second after the function last time finished
 * Should not take longer than max 20 seconds to execute
 * ELSE you should call NTServiceResponder(); at least each 20 secs
 * WARNING: NTServiceResponder will exit; if there was a STOP request
 */
function Service_Main()
{
    // YOU APPLICATION CODE HERE !!!
    sleep(1); // dummy something
}

/********************************************************************
 *
 * SERVICE CONTROLLING
 *
 ********************************************************************/

$SERVICE_NAME = "phptestservice";
$SERVICE_DISPLAY = "Test Service with PHP";

// so u can get: $SERVICE_PATH_PARTS["dirname"] $SERVICE_PATH_PARTS["basename"]  $SERVICE_PATH_PARTS["extension"]
$SERVICE_PATH_PARTS = pathinfo(__FILE__);

$SERVICE_PARAMS = " run";

    if (!isset($argv[1]))
    {
        die("this application need to be installed as a service.\n run with param install");
    }

    if ($argv[1] == 'install')
    {
        $x = win32_create_service(array(
                                        'service' => $SERVICE_NAME,
                                        'display' => $SERVICE_DISPLAY,
                                        'params' =>  __FILE__ . $SERVICE_PARAMS,
                                        //'path' =>  $SERVICE_PATH_PARTS["dirname"] . '\php.exe'
                                        ));
        debug_zval_dump($x);
        exit;
    }
    else if ($argv[1] == 'uninstall')
    {
        $x = win32_delete_service('dummyphp');
        debug_zval_dump($x);
        exit;
    }
    else if ($argv[1] != 'run')
    {
        die("bogus args, needs to run as service");
    }

    // Connect to service dispatcher and notify that startup was successful
    if (!win32_start_service_ctrl_dispatcher($SERVICE_NAME)) die('Could not connect to service :'.$SERVICE_NAME);
    win32_set_service_status(WIN32_SERVICE_RUNNING);

    // Main Server Loop
    while (1)
    {
        NTServiceResponder();

        // Main script goes here
        Service_Main();

        sleep(1); // at least 1 sec delay per loop
    }
    win32_set_service_status(WIN32_SERVICE_STOPPED);

/*
 * Response to NTServiceRequests
 */
function NTServiceResponder()
{

    switch (win32_get_last_control_message())
    {
    case 0: // PATCH for: seems never to go to 4 (WIN32_SERVICE_CONTROL_INTERROGATE)
        win32_set_service_status(WIN32_SERVICE_RUNNING);
        return TRUE;
        break;
    case WIN32_SERVICE_CONTROL_CONTINUE:
        return TRUE; // "Continue"
    case WIN32_SERVICE_CONTROL_INTERROGATE:
        win32_set_service_status(WIN32_SERVICE_RUNNING);
        return TRUE; // Respond with status
    case WIN32_SERVICE_CONTROL_STOP:
        win32_set_service_status(WIN32_SERVICE_STOPPED);
        exit; // Terminate script
    default:
        win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); // Add more cases to handle other service calls
    }

    return FALSE;
}

?>


サービスを開始する

  • ≪ win32_set_service_status
  • win32_start_service_ctrl_dispatcher ≫
  • PHP Manual
  • win32service 関数
  • サービスを開始する

win32_start_service

(PECL win32service >=0.1.0)

win32_start_service — サービスを開始する

説明

win32_start_service(string $servicename, string $machine = ?): void

指定したサービスの開始を試みます。 管理者権限、 またはサービスのACLで適切な権限が設定されたアカウントが必要です。

パラメータ

servicename

サービスの短い名前。

machine

オプションのマシン名。指定しなかった場合、ローカルマシンが使用されます。

戻り値

値を返しません。

バージョン 1.0.0 より前では、 成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

servicename が空の場合、 ValueError がスローされます。

エラー時には、Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。
PECL win32service 0.3.0 | ACLが別のアカウントに設定されていた場合、 この関数には管理者権限が不要になりました。

参考

  • win32_stop_service() - サービスを停止する
  • win32_pause_service() - サービスを中断する
  • win32_continue_service() - 中断したサービスを再開する
  • win32_send_custom_control() - Send a custom control to the service
  • Win32 エラーコード

User Contributed Notes

There are no user contributed notes for this page.


スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする

  • ≪ win32_start_service
  • win32_stop_service ≫
  • PHP Manual
  • win32service 関数
  • スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする

win32_start_service_ctrl_dispatcher

(PECL win32service >=0.1.0)

win32_start_service_ctrl_dispatcher — スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする

説明

win32_start_service_ctrl_dispatcher(string $name, bool $gracefulMode = true): void

サービスコントロールマネージャ経由で起動させる際、サービスプロセスは 「チェックイン」を要求され、これによってサービスのモニタリングや 通信の機能を確立します。この関数は、サービスコントロールマネージャとの 低レベル通信を処理するスレッドを生成し、チェックインを実行します。

サービスが開始したら、サービスプロセスで行わなければならないことは次のふたつです。 まず最初は、サービスが実行中であることをサービスコントロールマネージャに通知することです。 これは、win32_set_service_status() に定数 WIN32_SERVICE_RUNNING を指定してコールすれば実現できます。 サービスが実際に動き出すまでに何らかの長い処理を要する場合は、定数 WIN32_SERVICE_START_PENDING を使うこともできます。 もうひとつは、常にサービスコントロールマネージャにチェックインし続け、 サービスをいつ終了させるべきかを確認することです。 これは、定期的に win32_get_last_control_message() をコールして戻り値を適切に処理することで実現できます。

警告

0.2.0 以降では、この関数は "cli" SAPI でのみ動作します。 他の SAPI では、この関数は無効になっています。

パラメータ

name

サービスの短い名前。win32_create_service() で登録されたもの。

gracefulMode

true の場合、graceful に終了します。 false の場合、エラーで終了します。 詳細は win32_set_service_exit_mode() を参照ください。

戻り値

値を返しません。

バージョン 1.0.0 より前では、成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

バージョン 1.0.0 より前では、 SAPI が "cli" でない場合、 この関数は E_ERROR レベルのエラーを発生させていました。

バージョン 1.0.0 以降では、 SAPI が "cli" でない場合、 Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。
PECL win32service 0.4.0 | gracefulMode パラメータが追加されました。
PECL win32service 0.2.0 | この関数は "cli" SAPI でのみ動作するようになりました。

例

例1 win32_start_service_ctrl_dispatcher() の例

サービスが SCM で実行されているかどうかを調べます。

<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
die("I'm probably not running under the service control manager");
}

win32_set_service_status(WIN32_SERVICE_START_PENDING);

// このサービスを処理するための、何らかの長い処理をします

win32_set_service_status(WIN32_SERVICE_RUNNING);

while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# ここでなんらかの処理をします。1 回のループに 30 秒以上かからない
# ように心がけてください。
}
?>

参考

  • win32_set_service_status() - サービスの状態を更新する
  • win32_get_last_control_message() - サービスに送信された直近の制御メッセージを返す
  • win32_set_service_exit_mode() - Define or return the exit mode for the current running service
  • win32_set_service_exit_code() - Define or return the exit code for the current running service
  • Win32 エラーコード

User Contributed Notes

andrea 09-Oct-2009 03:07
Insert value of params between " if the string have a space:

<?php
// First you need to create a service, you only need to do this once
/*
win32_create_service(array(
    'service' => 'myphpservice',
    'display' => 'My PHP Service',
    'params' => '"c:\\my folder\myphpservice.php"',
    'path' => 'c:\\PHP\\php.exe'));
*/
?>
dylan at nopower dot org 14-Jul-2007 07:59
<?php
// First you need to create a service, you only need to do this once
/*
win32_create_service(array(
    'service' => 'myphpservice',
    'display' => 'My PHP Service',
    'params' => 'c:\\myphpservice.php',
    'path' => 'c:\\PHP\\php.exe'));
*/

$myservicename = 'myphpservice';

// Connect to service dispatcher and notify that startup was successful
if (!win32_start_service_ctrl_dispatcher($myservicename)) die('Could not connect to service :'.$myservicename);
win32_set_service_status(WIN32_SERVICE_RUNNING);

// Main Server Loop
while (1) {
    switch (win32_get_last_control_message()) {
        case WIN32_SERVICE_CONTROL_CONTINUE: break; // Continue server routine
        case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_NO_ERROR); break; // Respond with status
        case WIN32_SERVICE_CONTROL_STOP: win32_set_service_status(WIN32_SERVICE_STOPPED); exit; // Terminate script
        default: win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); // Add more cases to handle other service calls
    }

    // Main script goes here

    sleep(10); // Run every 10 seconds
}
win32_set_service_status(WIN32_SERVICE_STOPPED);
?>
Guibod 10-Jul-2007 05:41
Don't try to call "win32_start_service_ctrl_dispatcher" too late in your code. You'd trigger a #2186 error : "The service is not responding to the control function." (from commande line) or a #1053 error : "The service did not respond to the start or control request in a timely fashion." (from services GUI).

Try not to load a bunch of PEAR classes before to register php script as Service like I did.

Another good hint, to get a verbose version of the return code, you can call "NET HELPMSG ###" from command line where ### is your error code.


サービスを停止する

  • ≪ win32_start_service_ctrl_dispatcher
  • XML 操作 ≫
  • PHP Manual
  • win32service 関数
  • サービスを停止する

win32_stop_service

(PECL win32service >=0.1.0)

win32_stop_service — サービスを停止する

説明

win32_stop_service(string $servicename, string $machine = ?): void

サービスを停止します。管理者権限、 またはサービスのACLで適切な権限が設定されたアカウントが必要です。

パラメータ

servicename

サービスの短い名前。

machine

オプションのマシン名。指定しなかった場合、ローカルマシンが使用されます。

戻り値

値を返しません。

バージョン 1.0.0 より前では、 成功した場合に WIN32_NO_ERROR を返していました。パラメータに問題がある場合は false、失敗した場合は Win32 エラーコード を返します。

エラー / 例外

servicename 引数が空の場合、 ValueError がスローされます。

エラー時には、Win32ServiceException がスローされます。

変更履歴

バージョン | 説明
PECL win32service 1.0.0 | 引数に不正な値があった場合、 ValueError をスローするようになりました。 これより前のバージョンでは、false を返していました。
PECL win32service 1.0.0 | エラー時に Win32ServiceException をスローするようになりました。 これより前のバージョンでは、 Win32 エラーコード を返していました。
PECL win32service 1.0.0 | 戻り値の型が void になりました。 これより前のバージョンでは、mixed でした。
PECL win32service 0.3.0 | ACLが別のアカウントに設定されていた場合、 この関数には管理者権限が不要になりました。

参考

  • win32_start_service() - サービスを開始する
  • win32_pause_service() - サービスを中断する
  • win32_continue_service() - 中断したサービスを再開する
  • win32_send_custom_control() - Send a custom control to the service
  • Win32 エラーコード

User Contributed Notes

There are no user contributed notes for this page.


XML 操作

  • DOM — Document Object Model
    • はじめに
    • インストール/設定
    • 定義済み定数
    • 例
    • DOMAttr — DOMAttr クラス
    • DOMCdataSection — DOMCdataSection クラス
    • DOMCharacterData — DOMCharacterData クラス
    • DOMChildNode — DOMChildNode インターフェイス
    • DOMComment — DOMComment クラス
    • DOMDocument — DOMDocument クラス
    • DOMDocumentFragment — DOMDocumentFragment クラス
    • DOMDocumentType — DOMDocumentType クラス
    • DOMElement — DOMElement クラス
    • DOMEntity — DOMEntity クラス
    • DOMEntityReference — DOMEntityReference クラス
    • DOMException — DOMException クラス
    • DOMImplementation — DOMImplementation クラス
    • DOMNamedNodeMap — DOMNamedNodeMap クラス
    • DOMNameSpaceNode — DOMNameSpaceNode クラス
    • DOMNode — DOMNode クラス
    • DOMNodeList — DOMNodeList クラス
    • DOMNotation — DOMNotation クラス
    • DOMParentNode — DOMParentNode インターフェイス
    • DOMProcessingInstruction — DOMProcessingInstruction クラス
    • DOMText — DOMText クラス
    • DOMXPath — DOMXPath クラス
    • DOM 関数
  • libxml
    • はじめに
    • インストール/設定
    • 定義済み定数
    • LibXMLError — LibXMLError クラス
    • libxml 関数
  • SimpleXML
    • はじめに
    • インストール/設定
    • 例
    • SimpleXMLElement — SimpleXMLElement クラス
    • SimpleXMLIterator — SimpleXMLIterator クラス
    • SimpleXML 関数
  • WDDX
    • はじめに
    • インストール/設定
    • 例
    • WDDX 関数
  • XMLDiff — XML diff and merge
    • はじめに
    • インストール/設定
    • XMLDiff\Base — The XMLDiff\Base class
    • XMLDiff\DOM — The XMLDiff\DOM class
    • XMLDiff\Memory — The XMLDiff\Memory class
    • XMLDiff\File — The XMLDiff\File class
  • XML パーサ
    • はじめに
    • インストール/設定
    • 定義済み定数
    • イベントハンドラ
    • 大文字変換(Case Folding)
    • エラーコード
    • 文字エンコーディング
    • 例
    • XML パーサ 関数
    • XMLParser — XMLParser クラス
  • XMLReader
    • はじめに
    • インストール/設定
    • XMLReader — XMLReader クラス
  • XMLWriter
    • はじめに
    • インストール/設定
    • 例
    • XMLWriter — XMLWriter クラス
  • XSL
    • はじめに
    • インストール/設定
    • 定義済み定数
    • 例
    • XSLTProcessor — XSLTProcessor クラス

User Contributed Notes

There are no user contributed notes for this page.


Document Object Model

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
  • 定義済み定数
  • 例
  • DOMAttr — DOMAttr クラス
    • DOMAttr::__construct — 新しい DOMAttr オブジェクトを作成する
    • DOMAttr::isId — 属性が定義済みの ID かどうかを調べる
  • DOMCdataSection — DOMCdataSection クラス
    • DOMCdataSection::__construct — 新しい DOMCdataSection オブジェクトを作成する
  • DOMCharacterData — DOMCharacterData クラス
    • DOMCharacterData::after — 文字データの後ろにノードを追加する
    • DOMCharacterData::appendData — ノードの文字データの最後に文字列を追加する
    • DOMCharacterData::before — ノードの前にノードを追加する
    • DOMCharacterData::deleteData — 指定した範囲の文字列をノードから削除する
    • DOMCharacterData::insertData — 指定した 16 ビット単位のオフセットに、文字列を挿入する
    • DOMCharacterData::remove — 文字データを削除する
    • DOMCharacterData::replaceData — DOMCharacterData ノードの文字列の一部を置換する
    • DOMCharacterData::replaceWith — 文字データを新しいノードで置き換える
    • DOMCharacterData::substringData — ノードから指定した範囲のデータを抽出する
  • DOMChildNode — DOMChildNode インターフェイス
    • DOMChildNode::after — ノードの後ろにノードを追加する
    • DOMChildNode::before — ノードの前にノードを追加する
    • DOMChildNode::remove — ノードを削除する
    • DOMChildNode::replaceWith — ノードを新しいノードで置き換える
  • DOMComment — DOMComment クラス
    • DOMComment::__construct — 新しい DOMComment オブジェクトを作成する
  • DOMDocument — DOMDocument クラス
    • DOMDocument::adoptNode — ノードを別のドキュメントに移す
    • DOMDocument::append — 最後の子ノードの後ろにノードを追加する
    • DOMDocument::__construct — 新しい DOMDocument オブジェクトを作成する
    • DOMDocument::createAttribute — 新しい属性を作成する
    • DOMDocument::createAttributeNS — 関連付けられた名前空間に新しい属性を作成する
    • DOMDocument::createCDATASection — 新しい cdata ノードを作成する
    • DOMDocument::createComment — 新しい comment ノードを作成する
    • DOMDocument::createDocumentFragment — 新しい文書片を作成する
    • DOMDocument::createElement — 新しい要素ノードを作成する
    • DOMDocument::createElementNS — 関連付けられた名前空間に新しい要素を作成する
    • DOMDocument::createEntityReference — 新しいエンティティ参照ノードを作成する
    • DOMDocument::createProcessingInstruction — 新しい PI ノードを作成する
    • DOMDocument::createTextNode — 新しいテキストノードを作成する
    • DOMDocument::getElementById — id に対応する要素を検索する
    • DOMDocument::getElementsByTagName — 指定したローカルタグ名に対応するすべての要素を検索する
    • DOMDocument::getElementsByTagNameNS — 指定した名前空間で、タグ名に対応するすべての要素を検索する
    • DOMDocument::importNode — 現在のドキュメントにノードをインポートする
    • DOMDocument::load — ファイルから XML を読み込む
    • DOMDocument::loadHTML — 文字列から HTML を読み込む
    • DOMDocument::loadHTMLFile — ファイルから HTML を読み込む
    • DOMDocument::loadXML — 文字列から XML を読み込む
    • DOMDocument::normalizeDocument — ドキュメントを正規化する
    • DOMDocument::prepend — 最初の子ノードの前にノードを追加する
    • DOMDocument::registerNodeClass — 基底ノード型を作成する際に使用する拡張クラスを登録する
    • DOMDocument::relaxNGValidate — ドキュメントを relaxNG で検証する
    • DOMDocument::relaxNGValidateSource — ドキュメントを relaxNG で検証する
    • DOMDocument::replaceChildren — ドキュメントの子を置換する
    • DOMDocument::save — 内部の XML ツリーをファイルに出力する
    • DOMDocument::saveHTML — 内部のドキュメントを HTML 形式の文字列として出力する
    • DOMDocument::saveHTMLFile — 内部のドキュメントを HTML 形式でファイルに出力する
    • DOMDocument::saveXML — 内部の XML ツリーを文字列として出力する
    • DOMDocument::schemaValidate — スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。
    • DOMDocument::schemaValidateSource — スキーマに基づいてドキュメントを検証する
    • DOMDocument::validate — DTD に基づいてドキュメントを検証する
    • DOMDocument::xinclude — DOMDocument オブジェクト内の XIncludes を置換する
  • DOMDocumentFragment — DOMDocumentFragment クラス
    • DOMDocumentFragment::append — 最後の子ノードの後ろにノードを追加する
    • DOMDocumentFragment::appendXML — 生の XML データを追加する
    • DOMDocumentFragment::__construct — DOMDocumentFragment オブジェクトを構築する
    • DOMDocumentFragment::prepend — 最初の子ノードの前にノードを追加する
    • DOMDocumentFragment::replaceChildren — 文書片の子を置換する
  • DOMDocumentType — DOMDocumentType クラス
  • DOMElement — DOMElement クラス
    • DOMElement::after — 要素の後ろにノードを追加する
    • DOMElement::append — 最後のノードの後ろにノードを追加する
    • DOMElement::before — 要素の前にノードを追加する
    • DOMElement::__construct — 新しい DOMElement オブジェクトを作成する
    • DOMElement::getAttribute — 属性の値を返す
    • DOMElement::getAttributeNames — 属性の名前を取得する
    • DOMElement::getAttributeNode — 属性ノードを返す
    • DOMElement::getAttributeNodeNS — 属性ノードを返す
    • DOMElement::getAttributeNS — 属性の値を返す
    • DOMElement::getElementsByTagName — タグ名から要素を取得する
    • DOMElement::getElementsByTagNameNS — 名前空間 URI とローカル名から要素を取得する
    • DOMElement::hasAttribute — 属性が存在するかどうかを調べる
    • DOMElement::hasAttributeNS — 属性が存在するかどうかを調べる
    • DOMElement::insertAdjacentElement — 隣接する要素を挿入する
    • DOMElement::insertAdjacentText — 隣接するテキストを挿入する
    • DOMElement::prepend — 最初の子ノードの前にノードを追加する
    • DOMElement::remove — 要素を削除する
    • DOMElement::removeAttribute — 属性を削除する
    • DOMElement::removeAttributeNode — 属性を削除する
    • DOMElement::removeAttributeNS — 属性を削除する
    • DOMElement::replaceChildren — 要素中の子を置換する
    • DOMElement::replaceWith — 要素を新しいノードで置換する
    • DOMElement::setAttribute — 属性を新しく追加する、または変更する
    • DOMElement::setAttributeNode — 新しい属性ノードを要素に追加する
    • DOMElement::setAttributeNodeNS — 新しい属性ノードを要素に追加する
    • DOMElement::setAttributeNS — 新しい属性を追加する
    • DOMElement::setIdAttribute — ID 型の属性を名前で宣言する
    • DOMElement::setIdAttributeNode — ID 型の属性をノードで宣言する
    • DOMElement::setIdAttributeNS — ID 型の属性をローカル名および名前空間 URI で宣言する
    • DOMElement::toggleAttribute — 属性の値を切り替える
  • DOMEntity — DOMEntity クラス
  • DOMEntityReference — DOMEntityReference クラス
    • DOMEntityReference::__construct — 新しい DOMEntityReference オブジェクトを作成する
  • DOMException — DOMException クラス
  • DOMImplementation — DOMImplementation クラス
    • DOMImplementation::__construct — 新しい DOMImplementation オブジェクトを作成する
    • DOMImplementation::createDocument — 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する
    • DOMImplementation::createDocumentType — 空の DOMDocumentType オブジェクトを作成する
    • DOMImplementation::hasFeature — DOM 実装が、指定した機能を実装しているかどうかを調べる
  • DOMNamedNodeMap — DOMNamedNodeMap クラス
    • DOMNamedNodeMap::count — マップにあるノードの数を取得する
    • DOMNamedNodeMap::getIterator — 外部のイテレータを取得する
    • DOMNamedNodeMap::getNamedItem — 名前で指定されたノードを取得する
    • DOMNamedNodeMap::getNamedItemNS — ローカル名および名前空間 URI で指定したノードを取得する
    • DOMNamedNodeMap::item — インデックスで指定したノードを取得する
  • DOMNameSpaceNode — DOMNameSpaceNode クラス
  • DOMNode — DOMNode クラス
    • DOMNode::appendChild — 子要素群の最後に新しい子要素を追加する
    • DOMNode::C14N — ノードを文字列に正規化する
    • DOMNode::C14NFile — ノードをファイルに正規化する
    • DOMNode::cloneNode — ノードを複製する
    • DOMNode::contains — ノードが別のノードを含んでいるかを調べる
    • DOMNode::getLineNo — ノードが存在する行の番号を取得します。
    • DOMNode::getNodePath — ノードの XPath を取得する
    • DOMNode::getRootNode — ルート(根)ノードを取得する
    • DOMNode::hasAttributes — ノードが属性を保持しているかどうかを調べる
    • DOMNode::hasChildNodes — ノードが子を保持しているかどうかを調べる
    • DOMNode::insertBefore — 参照しているノードの前に新しい子を追加する
    • DOMNode::isDefaultNamespace — 指定した namespaceURI がデフォルトの名前空間かどうかを調べる
    • DOMNode::isEqualNode — ノードが等しいかを調べる
    • DOMNode::isSameNode — 2 つのノードが等しいかどうかを調べる
    • DOMNode::isSupported — 指定したバージョンで機能がサポートされているかどうかを調べる
    • DOMNode::lookupNamespaceURI — プレフィックスに基づいて、ノードの名前空間 URI を取得する
    • DOMNode::lookupPrefix — 名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する
    • DOMNode::normalize — ノードを正規化する
    • DOMNode::removeChild — 子要素群から子要素を削除する
    • DOMNode::replaceChild — 子を置き換える
  • DOMNodeList — DOMNodeList クラス
    • DOMNodeList::count — リストにあるノードの数を取得する
    • DOMNodeList::getIterator — 外部のイテレータを取得する
    • DOMNodelist::item — インデックスで指定したノードを取得する
  • DOMNotation — DOMNotation クラス
  • DOMParentNode — DOMParentNode インターフェイス
    • DOMParentNode::append — 最後の子ノードの後ろにノードを追加する
    • DOMParentNode::prepend — 最初の子ノードの前にノードを追加する
    • DOMParentNode::replaceChildren — ノード中の子を置換する
  • DOMProcessingInstruction — DOMProcessingInstruction クラス
    • DOMProcessingInstruction::__construct — 新しい DOMProcessingInstruction オブジェクトを作成する
  • DOMText — DOMText クラス
    • DOMText::__construct — 新しい DOMText オブジェクトを作成する
    • DOMText::isElementContentWhitespace — このテキストノードが、要素の内容にホワイトスペースが含まれているかを返す
    • DOMText::isWhitespaceInElementContent — このテキストノードが空白を含むかどうかを示す
    • DOMText::splitText — 指定したオフセットでノードを 2 つに分割する
  • DOMXPath — DOMXPath クラス
    • DOMXPath::__construct — 新しい DOMXPath オブジェクトを作成する
    • DOMXPath::evaluate — 与えられた XPath 式を評価し、可能であれば結果を返す
    • DOMXPath::query — 与えられた XPath 式を評価する
    • DOMXPath::registerNamespace — DOMXPath オブジェクトの名前空間を登録する
    • DOMXPath::registerPhpFunctions — PHP の関数を XPath 関数として登録する
  • DOM 関数
    • dom_import_simplexml — SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する

User Contributed Notes

chealer at gmail dot com 05-Jul-2018 05:12
This extension allows editing an HTML snippet, for example removing an element:
??$dom = new DOMDocument();
??$dom->loadHTML('keep<b id="simple">REMOVE</b>');
$??remove = $dom->getElementById('simple');
??$dom->removeChild($??remove);
echo ??$dom->saveHTML();
...would output "keep".

But it does not preserve formatting. If your code defines attributes using double quotes, saveHTML() may for instance return single quotes instead.
emmanuellutula at hotmail dot com 24-Apr-2018 04:35
If you want to  use DOMDocument in your PHPUnit Tests drive on Symfony Controller (testing form)! Use like :

namespace Tests\YourBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use YourBundle\Controller\TextController;

class DefaultControllerTest extends WebTestCase
{
    public function testIndex()
    {
        $client = static::createClient(array(), array());

        $crawler = $client->request('GET', '/text/add');
        $this->assertTrue($crawler->filter("form")->count() > 0, "Text form exist !");

        $form = $crawler->filter("form")->form();

        $domDocument = new \DOMDocument;

        $domInput = $domDocument->createElement('input');
        $dom = $domDocument->appendChild($domInput);
        $dom->setAttribute('slug', 'bloc');

        $formInput = new \Symfony\Component\DomCrawler\Field\InputFormField($domInput);
        $form->set($formInput);

        $crawler = $client->submit($form);

        if ($client->getResponse()->isRedirect())
        {
            $crawler = $client->followRedirect(false);
        }

       // $this->assertTrue($client->getResponse()->isSuccessful());
        //$this->assertEquals(200, $client->getResponse()->getStatusCode(),
        //             "Unexpected HTTP status code for GET /backoffice/login");

    }
}
ohcc at 163 dot com 29-Oct-2015 05:31
<?php
    // this note is about how to get a DOMNode's outerHTML and innerHTML.
    $dom = new DOMDocument('1.0','UTF-8');
    $dom->loadHTML('<html><body><div><p>p1</p><p>p2</p></div></body></html>');
    $node = $dom->getElementsByTagName('div')->item(0);
    $outerHTML = $node->ownerDocument->saveHTML($node);
    $innerHTML = '';
    foreach ($node->childNodes as $childNode){
        $innerHTML .= $childNode->ownerDocument->saveHTML($childNode);
    }
    echo '<h2>outerHTML: </h2>';
    echo htmlspecialchars($outerHTML);
    echo '<h2>innerHTML: </h2>';
    echo htmlspecialchars($innerHTML);
?>
super dot puma at gmail dot com 13-May-2014 04:57
If  you want to print the DOM XML file content, you can use the next code:

$doc = new DOMDocument();
$doc->load($xmlFileName);
echo "<br>" . $doc->documentURI;
$x = $doc->documentElement;
getNodeContent($x->childNodes, 0);

function getNodeContent($nodes, $level){
    foreach ($nodes AS $item) {
    //  print "<br><br>TIPO: " . $item->nodeType ;
      printValues($item, $level);
      if ($item->nodeType == 1) { //DOMElement
          foreach ($item->attributes AS $itemAtt) {
              printValues($itemAtt, $level+3);
          }
          if($item->childNodes || $item->childNodes->lenth > 0) {
              getNodeContent($item->childNodes, $level+5);
          }
      }
    }
}

function printValues($item, $level){
    if ($item->nodeType == 1) { //DOMElement
        printLevel($level);
        print $item->nodeName . " = " . $item->nodeValue;
    }
    if ($item->nodeType == 2) { //DOMAttr
        printLevel($level);
        print $item->name . " = " . $item->value ;
    }
    if ($item->nodeType == 3) { //DOMText
      if ($item->isWhitespaceInElementContent() == false){
        printLevel($level);
        print $item->wholeText ;
      }
    }
}

function printLevel($level)
{
    print "<br>";
    if ($level == 0) {
        print "<br>";
    }
    for($i=0; $i < $level; $i++) {
        print "-";
    }
}
Drupella 16-Sep-2011 09:18
Here is a fast innerHTML function that returns the result without iterating over child nodes.

<?php
function innerHTML($el) {
  $doc = new DOMDocument();
  $doc->appendChild($doc->importNode($el, TRUE));
  $html = trim($doc->saveHTML());
  $tag = $el->nodeName;
  return preg_replace('@^<' . $tag . '[^>]*>|</' . $tag . '>$@', '', $html);
}
?>

Example
<?php
$doc = new DOMDocument();
// A corrupt HTML string
$doc->loadHTML('<HTML><A HREF="ss">asd</A>');
$body = $doc->getElementsByTagName('body')->item(0);
print htmlspecialchars(innerHTML($body));
// Prints <a href="ss">asd</a>
?>
ben_demott at hotmail dot com 23-Apr-2010 01:36
A function among several others to parse a google results page, I wrote this some time ago - google has probably changed their site since then, but I thought this might be helpful to someone.

I'm moving servers, but I will probably throw this up on my blog when I get it back up.

<?php

function googleResult($listItem) {
    // given a LIST ITEM element, this will validate, and return an array for that LI entry as an inline result from google.
    /*
     * <li class='g w0'>
     *   <h3 class='r'>
     *     <a href='the URL' class='l'>
     *       Description <em>description</em>
     *     </a>
     *   </h3>
     * </li>
     *
       UPDATE:
       This function will now look for any subcontainer that has an href, it doesn't have to be an H3
       this will make it work with a few more formatted search results.
     */

    $listItem = $listItem->childNodes;
        // Yes I don't use instanceof - I guess you'll have to deal.
    foreach($listItem as $element) {
        if(is_object($element) && get_class($element) == 'DOMElement' && $element->hasChildNodes()) {
            $hrefContainer = $element->childNodes;
            foreach($hrefContainer as $element2) {
                if(is_object($element2) && get_class($element2) == 'DOMElement' && $element2->nodeName == 'a' && $element2->hasAttribute('href')) {
                    $anchor = $element2;
                    unset($h3);
                    unset($element2);
                    break;
                } else {
                  //print __LINE__ ." :: Breaking out of loop (normal result) element is not an annchor Element='".$element2->nodeName."'\n";
                }
            }
            unset($element);
            unset($listItem);
            break;
        }
    }
    if(empty($anchor) || !is_object($anchor) || get_class($anchor) != 'DOMElement') {
        //print __LINE__ ." :: Returning false, did not locate anchor through iteration...";
        return false;
    }
    $href = $anchor->getAttribute('href');
    if(empty($href)) {
        //print __LINE__ ." :: Found anchor object, could not read href attribute / href is empty? href='$href'\n";
        return false;
    }
    $description = $anchor->childNodes;
    $urlDescription = '';
    foreach($description as $words) {
        $name =  trim($words->nodeName);
        if($name == 'em' || $name == '#text' || $name == 'b') {
            if(!empty($words->nodeValue)) {
                $text = trim($words->nodeValue);
                $urlDescription = $urlDescription . $text . ' ';
            }
        }
    }
    $urlDescription = htmlspecialchars_decode($urlDescription, ENT_QUOTES);
    $urlDescription = trim($urlDescription);
    return array('description' => $urlDescription, 'href' => $href);
}
sweisman at pobox dot com 24-Sep-2009 01:19
I had problems with the dom2array_full function by "nospam at ya dot ru". Here's my function, which works correctly for my project, and might work for yours:

<?php
function dom_to_array($root)
{
    $result = array();

    if ($root->hasAttributes())
    {
        $attrs = $root->attributes;

        foreach ($attrs as $i => $attr)
            $result[$attr->name] = $attr->value;
    }

    $children = $root->childNodes;

    if ($children->length == 1)
    {
        $child = $children->item(0);

        if ($child->nodeType == XML_TEXT_NODE)
        {
            $result['_value'] = $child->nodeValue;

            if (count($result) == 1)
                return $result['_value'];
            else
                return $result;
        }
    }

    $group = array();

    for($i = 0; $i < $children->length; $i++)
    {
        $child = $children->item($i);

        if (!isset($result[$child->nodeName]))
            $result[$child->nodeName] = dom_to_array($child);
        else
        {
            if (!isset($group[$child->nodeName]))
            {
                $tmp = $result[$child->nodeName];
                $result[$child->nodeName] = array($tmp);
                $group[$child->nodeName] = 1;
            }

            $result[$child->nodeName][] = dom_to_array($child);
        }
    }

    return $result;
}
?>
odessa131 at aol dot nospam dot com 20-Sep-2009 06:49
I had the hardest time updating a complex XML document. Here's a quick example on how to do it.

<?php

// Load the XML from a file.
$xml = "a2062.xml"; // This is an XFDL form previously unencoded and ungzipped.
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->Load($xml);

// Create an XPath query.
// Note: you must define the namespace if the XML document has defined namespaces.
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('xfdl', "http://www.PureEdge.com/XFDL/6.5");

// Locate the value for the first Item Description field.
$query = "//xfdl:page/xfdl:field[@sid='ITEMDESA']/xfdl:value";
$nodeList = $xpath->query($query);

$nodeList->item(0)->nodeValue = "This is the text in the value node of the first Item Description field inside the DA 2062 PureEdge form.";

$dom->save($xml);

?>

I hope this helps someone.
philipwaynerollins at gmail dot com 29-Jul-2009 02:06
You can get the "innerHTML" by nodeValue so

<?php
    $doc = new DOMDocument( );
    $ele = $doc->createElement( 'p', 'Sensei Ninja' );
    print $ele->nodeValue;
?>

You can even set it if you want

<?php
    $doc = new DOMDocument( );
    $ele = $doc->createElement( 'p' );
    $ele->nodeValue = 'Sensei Ninja';
    $doc->appendChild( $ele );
    print $doc->saveHTML( );
?>
Junior 20-Mar-2009 01:26
innerHTML in PHP DOM

<?php
function DOMinnerHTML($element)
{
    $innerHTML = "";
    $children = $element->childNodes;
    foreach ($children as $child)
    {
        $tmp_dom = new DOMDocument();
        $tmp_dom->appendChild($tmp_dom->importNode($child, true));
        $innerHTML.=trim($tmp_dom->saveHTML());
    }
    return $innerHTML;
}
?>

Example:

<?php
$dom= new DOMDocument();
$dom->load($html_string);
$dom->preserveWhiteSpace = false;

$domTable = $dom->getElementsByTagName("table");

foreach ($domTable as $tables)
{
    echo DOMinnerHTML($tables);
}
?>
nospam at ya dot ru 06-Jan-2009 10:18
<?PHP
function dom2array_full($node){
    $result = array();
    if($node->nodeType == XML_TEXT_NODE) {
        $result = $node->nodeValue;
    }
    else {
        if($node->hasAttributes()) {
            $attributes = $node->attributes;
            if(!is_null($attributes))
                foreach ($attributes as $index=>$attr)
                    $result[$attr->name] = $attr->value;
        }
        if($node->hasChildNodes()){
            $children = $node->childNodes;
            for($i=0;$i<$children->length;$i++) {
                $child = $children->item($i);
                if($child->nodeName != '#text')
                if(!isset($result[$child->nodeName]))
                    $result[$child->nodeName] = dom2array($child);
                else {
                    $aux = $result[$child->nodeName];
                    $result[$child->nodeName] = array( $aux );
                    $result[$child->nodeName][] = dom2array($child);
                }
            }
        }
    }
    return $result;
}
?>
fantasyman3000 at gmail dot com 06-Dec-2008 05:37
In response to "simlee at indiana dot edu",
- First of all thanks for sharing your funciton.
- It didn't work for me so i rewrite it from scratch using different method.

Here is the new version, hope it helps someone :

<?php
/**
* result sample : /html[1]/body[1]/span[1]/fieldset[1]/div[1]
* @return string
*/
function getNodeXPath( $node ) {
    $result='';
    while ($parentNode = $node->parentNode) {
        $nodeIndex=-1;
        $nodeTagIndex=0;
        do {
            $nodeIndex++;
            $testNode = $parentNode->childNodes->item( $nodeIndex );

            if ($testNode->nodeName==$node->nodeName and $testNode->parentNode->isSameNode($node->parentNode) and $testNode->childNodes->length>0) {
                //echo "{$testNode->parentNode->nodeName}-{$testNode->nodeName}-{}<br/>";
                $nodeTagIndex++;
            }

        } while (!$node->isSameNode($testNode));

        $result="/{$node->nodeName}[{$nodeTagIndex}]".$result;
        $node=$parentNode;
    };
    return $result;
}
?>

By Sina.Salek.ws
miguelangelhdz at NOSPAM dot com 22-Sep-2008 06:19
After searching how to extend the DOMDocument and DOMElement I found a way in the bug: http://bugs.php.net/bug.php?id=35104. The following code shows how:

<?php
class extDOMDocument extends DOMDocument {
 public function createElement($name, $value=null) {
  $orphan = new extDOMElement($name, $value); // new  sub-class object
  $docFragment = $this->createDocumentFragment(); // lightweight container maintains "ownerDocument"
  $docFragment->appendChild($orphan); // attach
  $ret = $docFragment->removeChild($orphan); // remove
  return $ret; // ownerDocument set; won't be destroyed on  method exit
 }
 // .. more class definition
}

class extDOMElement extends DOMElement {
 function __construct($name, $value='', $namespaceURI=null) {
  parent::__construct($name, $value, $namespaceURI);
 }
  //  ... more class definition here
}

$doc = new extDOMDocument('test');
$el = $doc->createElement('tagname');
$el->setAttribute("attr", "val");
$doc->appendChild($el);

// append discards the DOMDocumentFragment and just adds its child nodes, but ownerDocument is maintained.
echo get_class($el)."<br/>";
echo get_class($doc->documentElement)."<br/>";
echo "<xmp>".$doc->saveXML()."</xmp>";
?>
tobiasz.cudnik[at]gmail.com 29-Jul-2008 06:47
If you need simple interface to DOM check out phpQuery - jQuery port to PHP:
http://code.google.com/p/phpquery/

It uses CSS selectors to fetch nodes.
Here's example how it works:
<?php
// just one file to include
require('phpQuery/phpQuery.php');

$html = '
<div>
    mydiv
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</div>';

// intialize new DOM from markup
phpQuery::newDocument($markup)
    ->find('ul > li')
        ->addClass('my-new-class')
        ->filter(':last')
            ->addClass('last-li');

// query all unordered lists in last used DOM
pq('ul')->insertAfter('div');

// iterate all LIs from last used DOM
foreach(pq('li') as $li) {
    // iteration returns plain DOM nodes, not phpQuery objects
    pq($li)->addClass('my-second-new-class');
}

// same as pq('anything')->htmlOuter()
// but on document root (returns doctype etc)
print phpQuery::getDocument();
?>

It uses DOM extension and XPath so it works only in PHP5.
Sven Arduwie 16-Mar-2008 06:28
I needed a function that quickly converts an xml with key/value pairs to an array.

for example:
<?xml version="1.0" encoding="UTF-8"?>
<test>
    <key id="Array key #1" value="Value #1"/>
    <key id="Array key #2" value="Value #2"/>
    <key id="Dupe" value="Duplicate keys"/>
    <key id="Dupe" value="create numeric arrays"/>
    <key id="And another key">
        <![CDATA[
            Multiline
            data
            works
            just
            as
            well.
        ]]>
    </key>
    <nested>
        <key id="Nested key" value="Nested data works as well, but it still results in a 1 dimensional array."/>
    </nested>
</test>

Results in the following array:
array(5) {
  ["Array key #1"]=>
  string(8) "Value #1"
  ["Array key #2"]=>
  string(8) "Value #2"
  ["Dupe"]=>
  array(2) {
    [0]=>
    string(14) "Duplicate keys"
    [1]=>
    string(21) "create numeric arrays"
  }
  ["And another key"]=>
  string(49) "Multiline
            data
            works
            just
            as
            well."
  ["Nested key"]=>
  string(73) "Nested data works as well, but it still results in a 1 dimensional array."
}

Here's the code:
<?php
    function xml2array($xml) {
        $domDocument = new DOMDocument;
        $domDocument->loadXML($xml);
        $domXPath = new DOMXPath($domDocument);
        $array = array();
        foreach ($domXPath->query('//key') as $keyDOM) {
            $id = $keyDOM->getAttribute('id');
            $value = $keyDOM->hasAttribute('value') ? $keyDOM->getAttribute('value') : trim($keyDOM->textContent);
            if (array_key_exists($id, $array)) {
                if (is_array($array[$id])) {
                    $array[$id][] = $value;
                } else {
                    $array[$id] = array($array[$id]);
                    $array[$id][] = $value;
                }
            } else {
                $array[$id] = $value;
            }
        }
        return $array;
    }
?>
danf dot 1979 at []gmail[] dot com 24-Feb-2008 07:47
This is a couple of classes to deal with yahoo yui menu.

/*
  $menubar = new MenuBar();

  $file = new Menu("File");
  $file->setAttribute("href", "http://file.com");

  $quit = new Menu("Quit");
  $quit->setAttribute("href", "http://quit.com");

  $file->appendChild($quit);
  $menubar->appendChild($file);

  echo $menubar->grab();
*/

//
// Author: Daniel Queirolo.
// LGPL
//

/** ---------------------------------
/**  Class MenuBar()
/**  Creates a the menubar and appends
/**  yuimenubaritems to it.
/** ---------------------------------*/

class MenuBar extends DOMDocument
{

  public $menuID = "nav_menu";  // holds the css id that javascript yui menu code should have to recognize
  private $UL;                  // This node holds every menu, This is THE node.

  /** ---------------------------------
  /**  Constructor
  /**  Generates a menubar skeleton and the UL node
  /** ---------------------------------*/

  public function __construct() {

    parent::__construct();

    $rootdiv = parent::createElement("div");
    $rootdiv->setAttribute("class", "yui-skin-sam");

    parent::appendChild($rootdiv);

    $yui_menubar = parent::createElement("div");
    $yui_menubar->setAttribute("id", $this->menuID);
    $yui_menubar->setAttribute("class", "yuimenubar");

    $rootdiv->appendChild($yui_menubar);

    $bd = parent::createElement("div");
    $bd->setAttribute("class", "bd");

    $yui_menubar->appendChild($bd);

    $ul = parent::createElement("ul");
    $ul->setAttribute("class", "first-of-type");

    // ALL Menu() instances ocurr inside an <ul> tag.

    $this->UL = $bd->appendChild($ul);

  }

  /** ---------------------------------
  /**  appendChild()
  /**  Appends a new yuimenubaritem to the menubar UL node.
  /**  This function changes <li> and <a> classes to yuiMENUBARsomething
  /** ---------------------------------*/

  public function appendChild($child) {

    $li = parent::importNode($child->LI, true);

    $li->setAttribute("class", "yuimenubaritem");

    $li->getElementsByTagName("a")->item(0)->setAttribute("class", "yuimenubaritemlabel");

    $this->UL->appendChild($li);

  }

  public function grab() {

    return parent::saveHTML();

  }

}

/** ---------------------------------
/**  Class Menu()
/**  Creates a yuimenuitem li node
/** ---------------------------------*/

class Menu extends DOMDocument {

  public $LI; // stores the <li> node (THE link) that will be exported to MenuBar() or used on appendChild()

  /** ---------------------------------
  /**  Constructor
  /**  Generates a yuimenuitem li node
  /**  No yuimenubar items are created here. MenuBar handles that.
  /** ---------------------------------*/

  public function __construct($link_name) {

    parent::__construct();

    $li = parent::createElement("li");
    $li->setAttribute("class", "yuimenuitem");

    // LI node stores THE link.
    // if appendChild is used, the new (sub) Menu() would be LI node child.

    $this->LI = parent::appendChild($li);

    $a = parent::createElement("a", $link_name);
    $a->setAttribute("class", "yuimenuitemlabel");

    $li->appendChild($a);

    $this->li = $li;
    $this->a = $a;

  }

  /** ---------------------------------
  /**  appendChild
  /**  Appends a (sub) Menu() to current Menu() in LI
  /** ---------------------------------*/

  public function appendChild($child) {

    $yuimenu = parent::createElement("div");
    $yuimenu->setAttribute("class", "yuimenu");

    $this->LI->appendChild($yuimenu);

    $bd = parent::createElement("div");
    $bd->setAttribute("class", "bd");

    $yuimenu->appendChild($bd);

    $ul = parent::createElement("ul");

    $bd->appendChild($ul);

    // child->NODE holds THE link from the new child (from child's __construct())

    $ul->appendChild(parent::importNode($child->LI, true));

  }

  public function setAttribute($name, $value, $node="a") {

      if ($node == "a") {
        $this->a->setAttribute($name, $value);
      }

      else {
        $this->li->setAttribute($name, $value);
      }
  }

}
Anonymous 29-Jan-2008 11:37
In response to...
"If you create your own custom element extending DOMElement and append him in place of the document element, you cannot access to any new members newly defined in your custom class via DOMDocument::$documentElement."

... it is not a bug, it is a feature. The DOMDocument::$documentElement property name may be misleading but according to the DOM Level 2 Core specification it is a convenience attribute meant to access the root element of your DOMDocument. See here: http://www.w3.org/TR/DOM-Level-2-Core/core.html#i-Document
ryoroxdahouse at hotmail dot com 25-Jan-2008 12:14
I use DOM to generate dynamically XHTML document.

When trying to extend the DOMDocument and DOMElement classes, I found a very annoying bug concerning DOMDocument::$documentElement.

If you create your own custom element extending DOMElement and append him in place of the document element, you cannot access to any new members newly defined in your custom class via DOMDocument::$documentElement.

In my situation, I cannot use DOMDocument::registerNodeClass() because the document element is not necessarily the base class for all the elements in my document.

*******
problem
*******

See bellow for the repro step:

<?php
    class MyElement extends DOMElement{
        public $myProp="myProp";
        public function myMethod(){
            return 'myMethod()';
        }
    }

    $myDocument=new DOMDocument();
    $myDocument->appendChild(new MyElement('myElement','myElement'));
    echo ('$myElement->myProp :'.$myDocument->documentElement->myProp.'<br />');
    echo ('$myElement->myMethod :'.$myDocument->documentElement->myMethod().'<br />');
?>

will output:

Notice: Undefined property: DOMElement::$myProp in C:\Program Files\EasyPHP 2.0b1\www\testDOMBug\test2.php on line 11
$myElement->myProp :

Fatal error: Call to undefined method DOMElement::myMethod() in C:\Program Files\EasyPHP 2.0b1\www\testDOMBug\test2.php on line 12

*******
solution
*******

After searching around, I found a pretty odd way to fix this problem. It seems that you have to stock a reference to your appended document element in an user-defined (and persistent) variable (in other words, not only in DOMDocument::$documentElement). See below:

<?php
    class MyElement extends DOMElement{
        public $myProp="myProp";
        public function myMethod(){
            return 'myMethod()';
        }
    }

    $myDocument=new DOMDocument();
    $mydocumentElement=$myDocument->appendChild(new MyElement('myElement','myElement')); //here is the hack
    echo ('$myElement->myProp :'.$myDocument->documentElement->myProp.'<br />');
    echo ('$myElement->myMethod :'.$myDocument->documentElement->myMethod().'<br />');
?>

will output:

$myElement->myProp :myProp
$myElement->myMethod :myMethod()

Hope it will help.
naudyj at aus3d.com 03-Jan-2008 05:06
The following can take a XML_TEXT_NODE node and return the contents in an array. Yanick's contribution rocks - but
it overwrote with duplicates only keeping the last line
in the returned array. All the other functions i tested from various sources failed to handle text nodes correctly. Hope this helps someone. It is adapted from code on this site.

function myTextNode($n, &$a)
{
 static $depth = 0;
 static $sz = '';

 if ($cn = $n->firstChild)
 {
  while ($cn)
  {
   if ($cn->nodeType == XML_TEXT_NODE)
   {
    $sz .= $cn->nodeValue;
   }
   elseif ($cn->nodeType == XML_ELEMENT_NODE)
   {
    $b = 1;
    if ($cn->hasChildNodes())
    {
     $depth++;
     if ($this->myHeadings($cn, $a))
     {
      if ($sz){
       array_push($a, $sz);
       $sz = '';
      }
     }
     $depth--;
    }
   }
   $cn = $cn->nextSibling;
  }
  return $b;
 }
}

so you could use:

$nodes = $dom->getElementsByTagName("td");
if($nodes){
 foreach ($nodes as $node){
  $a = Array();
  myTextNode($node, $a);
 }
}
jim.filter (at gmail.com) 03-Nov-2007 07:42
Array to DOM

Here is a recursive function to turn a multidimensional array into an XML document.  It will handle multiple elements of the same tag, but only one per parent element. IE:

Can't generate:         Can generate:
<root>                  <root>
  <sub1>data1</sub1>      <subs1>
  <sub1>data2</sub1>         <value>data1</value>
  <sub2>data1</sub2>         <value>data2</value>
  <sub2>data2</sub2>      </subs1>
</root>                   <subs2>
                            <value>data1</value>
                            <value>data2</value>
                          <subs2>
                        </root>

Also, the function performs no type of error checking on your array and will throw a DOMException if a key value you used in your array contains invalid characters for a proper DOM tag. This function is untested for "deep" multidimensional arrays.

Complete code ready to run with example:

<?PHP
  function AtoX($array, $DOM=null, $root=null){

    if($DOM  == null){$DOM  = new DOMDocument('1.0', 'iso-8859-1');}
    if($root == null){$root = $DOM->appendChild($DOM->createElement('root'));}

    $name = $array['#MULTIPLE_ELEMENT_NAME'];

      foreach($array as $key => $value){
        if(is_int($key) && $name != null){
          if(is_array($value)){
            $subroot = $root->appendChild($DOM->createElement($name));
            AtoX($value, $DOM, $subroot);
          }
          else if(is_scalar($value)){
            $root->appendChild($DOM->createElement($name, $value));
          }
        }
        else if(is_string($key) && $key != '#MULTIPLE_ELEMENT_NAME'){
          if(is_array($value)){
            $subroot = $root->appendChild($DOM->createElement($key));
            AtoX($value, $DOM, $subroot);
          }
          else if(is_scalar($value)){
            $root->appendChild($DOM->createElement($key, $value));
          }
        }
      }
    return $DOM;
  }

  $array = array(
                    '#MULTIPLE_ELEMENT_NAME' => 'GenericDatas',
                    'Date'      => 'November 03, 2007',
                    'Company'   => 'Facility One',
                    'Field'     => 'Facility Management Software',
                    'Employees' => array(
                                      '#MULTIPLE_ELEMENT_NAME' => 'Employee',
                                      'Cindy',
                                      'Sean',
                                      'Joe',
                                      'Owen',
                                      'Jim',
                                      'Dale',
                                      'Kelly',
                                      'Ryan',
                                      'Johnathan',
                                      'Robin',
                                      'William Marcus',
                                      'NewCoops' => array(
                                                          '#MULTIPLE_ELEMENT_NAME' => 'Coop',
                                                          'John',
                                                          'Tyler',
                                                          'Ray',
                                                          'Dawn'
                                                         )
                                    ),
                    'Datas',
                    'DATAS',
                    'OtherDatas'
                );

  $DOM  = new DOMDocument('1.0', 'iso-8859-1');
  $root = $DOM->appendChild($DOM->createElement('CompanyData'));
  $DOM  = AtoX($array, $DOM, $root);
  $DOM->save('C:\test.xml');
?>
PHPdeveloper 06-Sep-2007 02:46
The Yanik's dom2array() function (added on 14-Mar-2007 08:40) does not handle multiple nodes with the same name, i.e.:

<foo>
  <name>aa</name>
  <name>bb</name>
</foo>

It will overwrite former and your array will contain just the last one ("bb")
Francois Hill 01-Aug-2007 11:21
In response to lutfi at smartconsultant dot us :

(see my post on
http://fr2.php.net/manual/en/
function.dom-domdocument-getelementsbytagname.php
)

Use this class I wrote:

class XPathableNode extends DOMNode
{
    protected $Node;
    protected $DOMDocument_from_node;
    protected $DOMXpath_for_node;

    public function __construct(/* DOMNode */ $node)
    {
        $this->Node=$node;
        $this->DOMDocument_from_node=new
                                                          DomDocument();
        $domNode=$this->DOMDocument_from_node
                                  ->importNode($this->Node, true);
        $this->DOMDocument_from_node
                                 ->appendChild($domNode);
        $this->DomXpath_for_node =
                    new Domxpath($this->
                                         DOMDocument_from_node);
    }

    public function convertHTML()
    {    return $this->DOMDocument_from_node
                                                             ->saveHTML();
    }

    public /*DomNodeList*/ function applyXpath($xpath)
    {    return $this->DomXpath_for_node
                                                       ->query($xpath);
    }
}

(sorry for the display... What a terrible hinderance on the
part of php.net !)

Then :
Make a new XPathableNode out of your parent node.
You may then retrieve a DOMNodeList from it by applying a
xpath (thus being able to specify the depth  and name of
elements you want).

Has got me around some (of the many) DOM awkwardnesses a few times.

;o)
Sanados at failure dot at 05-Jun-2007 02:45
appended to
brian dot reynolds at risaris dot com
20-Feb-2007 10:09

when you got variable nodes at start you array fails and looses nodes  beneath.
solution that counts occurance though eats up performance:

function xmlToArray($n)
{
    $xml_array = array();
    $occurance = array();

     foreach($n->childNodes as $nc)
     {
         $occurance[$nc->nodeName]++;
     }

    foreach($n->childNodes as $nc){
        if( $nc->hasChildNodes() )
        {
            if($occurance[$nc->nodeName] > 1)
            {
                $xml_array[$nc->nodeName][] = xmlToArray($nc);
            }
            else
            {
                $xml_array[$nc->nodeName] = xmlToArray($nc);
            }
        }
        else
        {
            return utf8_decode($nc->nodeValue);
        }
    }
    return $xml_array;
}
Yanik <clonyara(at)ahoo(dot)com> 13-Mar-2007 11:40
I hate DOM model !
so I wrote dom2array simple function (simple for use):

function dom2array($node) {
  $res = array();
  print $node->nodeType.'<br/>';
  if($node->nodeType == XML_TEXT_NODE){
      $res = $node->nodeValue;
  }
  else{
      if($node->hasAttributes()){
          $attributes = $node->attributes;
          if(!is_null($attributes)){
              $res['@attributes'] = array();
              foreach ($attributes as $index=>$attr) {
                  $res['@attributes'][$attr->name] = $attr->value;
              }
          }
      }
      if($node->hasChildNodes()){
          $children = $node->childNodes;
          for($i=0;$i<$children->length;$i++){
              $child = $children->item($i);
              $res[$child->nodeName] = dom2array($child);
          }
      }
  }
  return $res;
}
Nevyn at N dot O dot S dot P dot A dot M dot emai dot it 10-Mar-2007 07:35
I wrote a couple of functions to:
 - create a DOMDocument from a file
 - parse the namespaces in it
 - create a XPath object with all the namespaces registered
 - load the schemalocations
 - validate the file on the main schema (the one without prefix)

It is useful for me, see if it is also for someone else!!

Giulio

function decodeNode($node)
{
    $out = $node->ownerDocument->saveXML($node);
    $re = "{^<((?:\\w*:)?\\w*)". //the tag name
    "[\\s\n\r]*((?:[\\s\n\r]*".
    "(?:\\w*:)?\\w+[\\s\n\r]*=[\\s\n\r]*". //possible attribute name
    "(?:\"[^\"]*\"|\'[^\']*\'))*)". //attribute value
    "[\\s\n\r]*>[\r\n]*".
    "((?:.*[\r\n]*)*)". //content
    "[\r\n]*</\\1>$}"; //closing tag
    preg_match($re, $out, $mat);
    return $mat;
}

function innerXml($node)
{
    $mat = decodeNode($node);
    return $mat[3];
}

function getnodeAttributes($node)
{
    $mat = decodeNode($node);
    $txt = $mat[2];
    $re = "{((?:\\w*:)?\\w+)[\\s\n\r]*=[\\s\n\r]*(\"[^\"]*\"|\'[^\']*\')}";
    preg_match_all($re, $txt, $mat);
    $att = array();
    for ($i=0; $i<count($mat[0]); $i++)
    {
        $value = $mat[2][$i];
        if ($value[0] == "\'" || $value[0] == "\"")
        {
            $len = strlen($value);
            $value = substr($value, 1, strlen($value)-2);
        }
        $att[ $mat[1][$i] ] = $value;
    }
    return $att;
}

function loadXml($file)
{
    $doc = new DOMDocument();
    $doc->load($file);
    //cerca l'attributo xmlns
    $xsi = false;
    $doc->namespaces = array();
    $doc->xpath = new DOMXPath($doc);

    $attr = getnodeAttributes($doc->documentElement);
    foreach ($attr as $name => $value)
    {
        if (substr($name,0,5) == "xmlns")
        {
            $uri = $value;
            $pre = $doc->documentElement->lookupPrefix($uri);
            if ($uri == "http://www.w3.org/2001/XMLSchema-instance")
                $xsi = $pre;
            $doc->namespaces[$pre] = $uri;
            if ($pre == "")
                $pre = "noname";
            $doc->xpath->registerNamespace($pre, $uri);
        }
    }

    if ($xsi)
    {
        $doc->schemaLocations = array();
        $lst = $doc->xpath->query("//@$xsi:schemaLocation");
        foreach($lst as $el)
        {
            $re = "{[\\s\n\r]*([^\\s\n\r]+)[\\s\n\r]*([^\\s\n\r]+)}";
            preg_match_all($re, $el->nodeValue, $mat);
            for ($i=0; $i<count($mat[0]); $i++)
            {
                $value = $mat[2][$i];
                $doc->schemaLocations[ $mat[1][$i] ] = $value;
            }
        }

        $olddir = getcwd();
        chdir(dirname($file));
        $schema = $doc->schemaLocations[$doc->namespaces[""]];
        if (substr($schema,0,7) == "file://")
        {
            $schema = substr($value,7);
        }
        if (!$doc->schemaValidate($schema))
            dbg()->err("Invalid file");
        chdir($olddir);
    }

    return $doc;
}
brian dot reynolds at risaris dot com 20-Feb-2007 01:09
I found the xml2array function below very useful, but there seems to be a bug in it. The $item variable was never getting set. I've expanded this out to be a bit more readable, and the corrected code is :

function xmlToArray($n)
{
    $return=array();

    foreach($n->childNodes as $nc){
        if( $nc->hasChildNodes() ){
            if( $n->firstChild->nodeName== $n->lastChild->nodeName&&$n->childNodes->length>1){
                $item = $n->firstChild;
                $return[$nc->nodeName][]=$this->xmlToArray($item);
            }
            else{
                 $return[$nc->nodeName]=$this->xmlToArray($nc);
            }
       }
       else{
           $return=$nc->nodeValue;
       }
    }
    return $return;
}
cooper at asu dot ntu-kpi dot kiev dot ua 22-Nov-2006 02:32
If you are using not object-oriented functions and it takes too much time to change them all (or you'll be replacing them later) then as a temporary decision can be used this modules:

For DOM XML:
http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/

For XSLT:
http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
sean at lookin3d dot com 17-Aug-2006 10:21
$xmlDoc=<<<XML
<?xml version="1.0"?>
<methodCall>
   <methodName>examples.getStateName</methodName>
   <params>
      <param>
         <value><i4>41</i4></value>
         </param>
      </params>
   </methodCall>
XML;

$xml= new DOMDocument();
$xml->preserveWhiteSpace=false;
$xml->loadXML($xmlDoc);
print_r(xml2array($xml));

function xml2array($n)
{
    $return=array();
    foreach($n->childNodes as $nc)
    ($nc->hasChildNodes())
    ?($n->firstChild->nodeName== $n->lastChild->nodeName&&$n->childNodes->length>1)
    ?$return[$nc->nodeName][]=xml2array($item)
    :$return[$nc->nodeName]=xml2array($nc)
    :$return=$nc->nodeValue;
    return $return;
}
simlee at indiana dot edu 29-Dec-2005 12:16
The project I'm currently working on uses XPaths to dynamically navigate through chunks of an XML file.  I couldn't find any PHP code on the net that would build the XPath to a node for me, so I wrote my own function.  Turns out it wasn't as hard as I thought it might be (yay recursion), though it does entail using some PHP shenanigans...

Hopefully it'll save someone else the trouble of reinventing this wheel.

<?php
    function getNodeXPath( $node ) {
        // REMEMBER THAT XPATHS USE BASE-1 INSTEAD OF BASE-0!!!

        // Get the index for the current node by looping through the siblings.
        $parentNode = $node->parentNode;
        if( $parentNode != null ) {
            $nodeIndex = 0;
            do {
                $testNode = $parentNode->childNodes->item( $nodeIndex );
                $nodeName = $testNode->nodeName;
                $nodeIndex++;

                // PHP trickery!  Here we create a counter based on the node
                //  name of the test node to use in the XPath.
                if( !isset( $$nodeName ) ) $$nodeName = 1;
                else $$nodeName++;

                // Failsafe return value.
                if( $nodeIndex > $parentNode->childNodes->length ) return( "/" );
            } while( !$node->isSameNode( $testNode ) );

            // Recursively get the XPath for the parent.
            return( getNodeXPath( $parentNode ) . "/{$node->nodeName}[{$$nodeName}]" );
        } else {
            // Hit the root node!  Note that the slash is added when
            //  building the XPath, so we return just an empty string.
            return( "" );
        }
    }
?>
johanwthijs-at-hotmail-dot-com 14-Dec-2005 06:25
Being an experienced ASP developer I was wondering how to replace textual content of a node (with msxml this is simply acheived by setting the 'text' property of a node). Out of frustration I started to play around with SimpleXml but I could not get it to work in combination with xPath.

I took me a lot of time to find out so I hope this helps others:

function replaceNodeText($objXml, $objNode, $strNewContent){
    /*
    This function replaces a node's string content with strNewContent
    */
    $objNodeListNested = &$objNode->childNodes;
    foreach ( $objNodeListNested as $objNodeNested ){
         if ($objNodeNested->nodeType == XML_TEXT_NODE)$objNode->removeChild ($objNodeNested);
    }

    $objNode->appendChild($objXml->createTextNode($strNewContent));
}

$objXml= new DOMDocument();
$objXml->loadXML('<root><node id="1">bla</note></root>');
$objXpath = new domxpath($objXml);

$strXpath="/root/node[@id='1']";
$objNodeList = $objXpath ->query($strXpath);
foreach ($objNodeList as $objNode){
//pass the node by reference
replaceNodeText($objXml, &$objNode, $strImportedValue);
}
mark at vectrex dot org dot uk 17-Nov-2005 02:10
Note that these DOM functions expect (and presumably return) all their data in UTF-8 character encoding, regardless of what PHP's current encoding is. This means that text nodes, attribute values etc, should be in utf8.

This applies even if you're generating an XML document which is not ultimately in utf8.

Mark
toby at tobiasly dot com 22-Oct-2005 11:08
This module is not included by default either in the CentOS 4 "centosplus" repository. For those using PHP5 on CentOS 4, a simple "yum --enablerepo=centosplus install php-xml" will do the trick (this will install both the XML and DOM modules).
pes_cz 29-Sep-2005 12:32
When I tried to parse my XHTML Strict files with DOM extension, it couldn't understand xhtml entities (like &copy;). I found post about it here (14-Jul-2005 09:05) which adviced to add resolveExternals = true, but it was very slow. There was some small note about xml catalogs but without any glue. Here it is:

XML catalogs is something like cache. Download all needed dtd's to /etc/xml, edit file /etc/xml/catalog and add this line: <public publicId="-//W3C//DTD XHTML 1.0 Strict//EN" uri="file:///etc/xml/xhtml1-strict.dtd" />

Thats all. Thanks to http://www.whump.com/moreLikeThis/link/03815
amir.laherATcomplinet.com 22-Aug-2005 05:09
This particular W3C page provides invaluable documentation for the DOM classes implemented in php5 (via libxml2). It fills in plenty of php.net's gaps:

http://www.w3.org/TR/DOM-Level-2-Core/core.html

Some key examples:
* concise summary of the class heirachy (1.1.1)
* clarification that DOM level 2 doesn't allow for population of internal DTDs
* explanation of DOMNode->normalize()
* explanation of the DOMImplementation class

The interfaces are described in OMG's Interface Definition Language
aidan at php dot net 19-Jul-2005 06:04
As of PHP 5.1, libxml options may be set using constants rather than the use of proprietary DomDocument properties.

DomDocument->resolveExternals is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDATTR

DomDocument->validateOnParse is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDVALID

PHP 5.1 users are encouraged to use the new constants.

Example:

DomDocument->load($file, LIBXML_DTDLOAD|LIBXML_DTDATTR);

DomDocument->load($file, LIBXML_DTDLOAD|LIBXML_DTDVALID);
aidan at php dot net 18-Jul-2005 08:27
When dealing with validation or loading, the output errors can be quite annoying.

PHP 5.1 introduces libxml_get_errors().

http://php.net/libxml_get_errors
php at webdevelopers dot cz 14-Jul-2005 12:05
[Editor's Note: If you're using entities, then you have no choice. XML Catalogs can speed DTD resolution.]

Never use

$dom->resolveExternals=true;

when parsing XHTML document that has the DOCTYPE declaration with DTD URL specified in it.

Otherwise parsing the XHTML with DOCTYPE like this one:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

will result in PHP/DOM downloading the DTD file from W3C site when parsing your document. It will add extra delay to your script - I experienced that $dom->load()'s total time was from 1 to 16 seconds.

elixon
spammable69 at hotmail dot com 11-Apr-2005 10:18
I wrote a framework to implement the StyleSheet interfaces as specified on the W3C website.  The code is written in PHP, and is NOT a complete implementation.  Use it how ya like.  I was planning on adding the CSSStyleSheet interfaces as well.  Feel free to ask.

<?
    class StyleSheetList {
        public length;
        private self;

        function __construct ( ) {
            $this->self = array();
        }

        function __get($property, $&ret) {
            if($property == 'length')
                $ret = count($this->self);
            return true;
        }

        function __set($property, $val) {
            if($property == 'length')
                return true;
        }

        function item( $index ) {
            return $this->self[$index];
        }
    }

    class MediaList extends StyleSheetList {

        function appendMedium ( $newMedium ) {
            array_push($this->self, $newMedium);
        }

        function deleteMedium ( $oldMedium ) {
            foreach($this->self as $item) {
                if( $item == $oldMedium ) {
                    $item = $this->self[ $this->length-1 ];
                    array_pop($this->self);
                    break;
                }
            }
        }
    }

    class DocumentStyle {
        public styleSheets;

        function __construct ( ) {
            $this->styleSheets = new StyleSheetList();
        }

        function __set($property, $val) {
            if($property == 'styleSheets')
                return true;
        }
    }

    class LinkStyle {
        public sheet;

        function __construct () {
            $this->sheet = new StyleSheet();
        }

        function __set($property, $val) {
            if($property == 'sheet')
                return true;
        }
    }

    class StyleSheet {
        public type;
        public disabled;
        public ownerNode;
        public parentStyleSheet;
        public href;
        public title;
        public media;

        function __construct( $type, $disabled, $ownerNode, $parentStyleSheet, $href, $title){
            $this->type = $type;
            $this->disabled = $disabled;
            $this->media = new MediaList();
            $this->ownerNode = $ownerNode;
            $this->parentStyleSheet = $parentStyleSheet;
            $this->href = $href;
            $this->title = $title;
        }
    }
?>

Only contactable via http://murpsoft.com/contact.html


はじめに

DOM 拡張モジュールを使用すると、DOM API を使用した XML や HTML ドキュメントの操作を PHP で行えます。

注意:

DOM拡張モジュール は UTF-8 エンコーディングを使います。他のエンコーディングを扱う場合は、mb_convert_encoding(), UConverter::transcode(), iconv() を使ってください。

User Contributed Notes

captainjester at hotmail dot com 27-Mar-2020 12:59
Be careful when using this for partial HTML. This will only take complete HTML documents with at least an HTML element and a BODY element. If you are working on partial HTML and you fill in the missing elements around it and don't specify in META elements the character encoding then it will be treated as ISO-8859-1 and will mangle UTF-8 strings. Example:

<?php
$body = getHtmlBody();
$doc = new DOMDocument();
$doc->loadHtml("<html><body>".$body."</body></html>");
// $doc will treat your HTML ISO-8859-1.
// this is correct but may not be what you want if your source is UTF-8
?>

<?php
$body = getHtmlBody();
$doc = new DOMDocument();
$doc->loadHtml("<html><head><meta charset=\"UTF-8\"><meta http-equiv=\"Content-Type\" content=\"text/html; CHARSET=shift-jis\"></head><body>".$body."</body></html>");
// $doc will treat your HTML correctly as UTF-8.
?>


インストール手順

この拡張モジュールはデフォルトで有効になっています。無効にしたい場合は、次のオプションを指定してコンパイルします。 --disable-dom

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

XML 定数
定数 | 値 | 説明
XML_ELEMENT_NODE (int) | 1 | ノードは DOMElement です。
XML_ATTRIBUTE_NODE (int) | 2 | ノードは DOMAttr です。
XML_TEXT_NODE (int) | 3 | ノードは DOMText です。
XML_CDATA_SECTION_NODE (int) | 4 | ノードは DOMCharacterData です。
XML_ENTITY_REF_NODE (int) | 5 | ノードは DOMEntityReference です。
XML_ENTITY_NODE (int) | 6 | ノードは DOMEntity です。
XML_PI_NODE (int) | 7 | ノードは DOMProcessingInstruction です。
XML_COMMENT_NODE (int) | 8 | ノードは DOMComment です。
XML_DOCUMENT_NODE (int) | 9 | ノードは DOMDocument です。
XML_DOCUMENT_TYPE_NODE (int) | 10 | ノードは DOMDocumentType です。
XML_DOCUMENT_FRAG_NODE (int) | 11 | ノードは DOMDocumentFragment です。
XML_NOTATION_NODE (int) | 12 | ノードは DOMNotation です。
XML_HTML_DOCUMENT_NODE (int) | 13 |
XML_DTD_NODE (int) | 14 |
XML_ELEMENT_DECL_NODE (int) | 15 |
XML_ATTRIBUTE_DECL_NODE (int) | 16 |
XML_ENTITY_DECL_NODE (int) | 17 |
XML_NAMESPACE_DECL_NODE (int) | 18 |
XML_ATTRIBUTE_CDATA (int) | 1 |
XML_ATTRIBUTE_ID (int) | 2 |
XML_ATTRIBUTE_IDREF (int) | 3 |
XML_ATTRIBUTE_IDREFS (int) | 4 |
XML_ATTRIBUTE_ENTITY (int) | 5 |
XML_ATTRIBUTE_NMTOKEN (int) | 7 |
XML_ATTRIBUTE_NMTOKENS (int) | 8 |
XML_ATTRIBUTE_ENUMERATION (int) | 9 |
XML_ATTRIBUTE_NOTATION (int) | 10 |
XML_LOCAL_NAMESPACE (int) |  | 名前空間を宣言したノード
DOMException 定数
定数 | 値 | 説明
DOM_PHP_ERR (int) | 0 | DOM の仕様にないエラーコードです。PHP のエラーを意味します。
DOM_INDEX_SIZE_ERR (int) | 1 | インデックスあるいはサイズが負です。または上限を超えています。
DOMSTRING_SIZE_ERR (int) | 2 | 指定したテキストは DOMString 内に収まりません。
DOM_HIERARCHY_REQUEST_ERR (int) | 3 | そのノードが所属できない場所に挿入されました。
DOM_WRONG_DOCUMENT_ERR (int) | 4 | ノードが、もともと作成されたのと別のドキュメントで使用されました。
DOM_INVALID_CHARACTER_ERR (int) | 5 | 名前などで、不正な文字が指定されました。
DOM_NO_DATA_ALLOWED_ERR (int) | 6 | データをサポートしていないノードでデータが指定されました。
DOM_NO_MODIFICATION_ALLOWED_ERR (int) | 7 | 変更が許可されていないオブジェクトを変更しようとしました。
DOM_NOT_FOUND_ERR (int) | 8 | 存在しないノードを参照しようとしました。
DOM_NOT_SUPPORTED_ERR (int) | 9 | 指定した型のオブジェクトや操作は、この実装ではサポートしていません。
DOM_INUSE_ATTRIBUTE_ERR (int) | 10 | 別の場所で使用中の属性を追加しようとしました。
DOM_INVALID_STATE_ERR (int) | 11 | 現在使用できない、あるいは使用できなくなったオブジェクトを 使用しようとしました。
DOM_SYNTAX_ERR (int) | 12 | 不正な文字列が指定されました。
DOM_INVALID_MODIFICATION_ERR (int) | 13 | 基底オブジェクトの型を変更しようとしました。
DOM_NAMESPACE_ERR (int) | 14 | 名前空間に存在しないオブジェクトを作成または変更しようとしました。
DOM_INVALID_ACCESS_ERR (int) | 15 | パラメータや操作は基底オブジェクトではサポートされていません。
DOM_VALIDATION_ERR (int) | 16 | insertBefore や removeChild のようなメソッドのコールによってノードの 「部分的な妥当性」が満たされなくなった際にこの例外が発生し、操作は 行われません。

User Contributed Notes

There are no user contributed notes for this page.


例

このリファレンスの多くの例で、XMLファイルが必要です。 私たちは、次のような形式の book.xml を使用します。

例1 book.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
 "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
]>
<book id="listing">
 <title>My lists</title>
 <chapter id="books">
  <title>My books</title>
  <para>
   <informaltable>
    <tgroup cols="4">
     <thead>
      <row>
       <entry>Title</entry>
       <entry>Author</entry>
       <entry>Language</entry>
       <entry>ISBN</entry>
      </row>
     </thead>
     <tbody>
      <row>
       <entry>The Grapes of Wrath</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>0140186409</entry>
      </row>
      <row>
       <entry>The Pearl</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>014017737X</entry>
      </row>
      <row>
       <entry>Samarcande</entry>
       <entry>Amine Maalouf</entry>
       <entry>fr</entry>
       <entry>2253051209</entry>
      </row>
      <!-- TODO: I have a lot of remaining books to add.. -->
     </tbody>
    </tgroup>
   </informaltable>
  </para>
 </chapter>
</book>

User Contributed Notes

There are no user contributed notes for this page.


DOMAttr クラス

(PHP 5, PHP 7, PHP 8)

はじめに

DOMNode を継承します。DOMAttr は、DOMElement オブジェクトの属性を表します。

クラス概要

class DOMAttr extends DOMNode {
/* プロパティ */
public readonly string $name;
public readonly bool $specified = true;
public string $value;
public readonly ?DOMElement $ownerElement;
public readonly mixed $schemaTypeInfo = null;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $name, string $value = "")
public isId(): bool
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

name

属性の名前

ownerElement

属性を保持する要素。存在しない場合は null になります。

schemaTypeInfo

未実装です。常に null を返します。

specified

未実装です。常に true を返します。

value

属性の値

注意:

値を設定する際には、XML のエンティティが展開されるので注意してください。 つまり、& 文字は特別な意味を持ちます。 value に & が含まれている場合、それを直接設定すると処理が失敗します。 エンティティの展開を避けるためには、 DOMElement::setAttribute() を代わりに使います。

参考

  • » W3C specification of Attr

目次

  • DOMAttr::__construct — 新しい DOMAttr オブジェクトを作成する
  • DOMAttr::isId — 属性が定義済みの ID かどうかを調べる

User Contributed Notes

greubel at nkey dot de 06-Dec-2014 03:04
Please take care on debugging DOMAttr related code. This will cause an E_WARNING that retrieving schemaTypeInfo attribute is not implemented yet. An IDE like Eclipse will inspect the object and its member elements. In conjunction with registered error handlers, which will translate the E_WARNING into Exception your debugging session will end unexpectedly. This has caused me some trouble while debugging my PHPUnit test case in eclipse using "Makegood" plugin.

A possible workarround is to deactivate the error handling during debugging using error_reporting(0). Remove the statement after finishing your debugging session.

Notable ticket in Bugtracker: https://bugs.php.net/bug.php?id=61858
And a xdebug tracker ticket: http://bugs.xdebug.org/view.php?id=910
chregu at php dot net 23-Mar-2009 11:20
See also the properties from the inherited class DOMNode ( http://php.net/manual/en/class.domnode.php ), eg. namespaceURI, prefix, localName, etc, especially if you have to deal with namespaced attributes


新しい DOMAttr オブジェクトを作成する

  • ≪ DOMAttr
  • DOMAttr::isId ≫
  • PHP Manual
  • DOMAttr
  • 新しい DOMAttr オブジェクトを作成する

DOMAttr::__construct

(PHP 5, PHP 7, PHP 8)

DOMAttr::__construct — 新しい DOMAttr オブジェクトを作成する

説明

public DOMAttr::__construct(string $name, string $value = "")

新しい DOMAttr オブジェクトを作成します。 このオブジェクトは読み込み専用です。このオブジェクトはドキュメントに 追加することができますが、さらに追加のノードを付け加えるためには ノードをドキュメントに関連付ける必要があります。書き込み可能な ノードを作成するには、 DOMDocument::createAttribute を使用します。

パラメータ

name

属性のタグ名。

value

属性の値。

例

例1 新しい DOMAttr オブジェクトを作成する

<?php

$dom = new DOMDocument('1.0', 'iso-8859-1');
$element = $dom->appendChild(new DOMElement('root'));
$attr = $element->setAttributeNode(new DOMAttr('attr', 'attrvalue'));
echo $dom->saveXML();

?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="iso-8859-1"?>
<root attr="attrvalue" />

参考

  • DOMDocument::createAttribute() - 新しい属性を作成する

User Contributed Notes

Anonymous 18-Sep-2014 10:48
The output should be:

<?xml version="1.0" encoding="iso-8859-1"?>
<root attr="attrvalue"/>


属性が定義済みの ID かどうかを調べる

  • ≪ DOMAttr::__construct
  • DOMCdataSection ≫
  • PHP Manual
  • DOMAttr
  • 属性が定義済みの ID かどうかを調べる

DOMAttr::isId

(PHP 5, PHP 7, PHP 8)

DOMAttr::isId — 属性が定義済みの ID かどうかを調べる

説明

public DOMAttr::isId(): bool

この関数は、属性が定義済みの ID かどうかを調べます。

DOM 標準規格によると、DTD では ID 型の属性 ID が定義されていなければ なりません。この関数を使用する前には、 DOMDocument::validate あるいは DOMDocument::$validateOnParse を使用して ドキュメントを検証する必要があります。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 DOMAttr::isId() の例

<?php

$doc = new DomDocument;

// id を参照する前に、ドキュメントを検証しなければなりません
$doc->validateOnParse = true;
$doc->Load('book.xml');

// chapter 要素から、id という名前の属性を取得します
$attr = $doc->getElementsByTagName('chapter')->item(0)->getAttributeNode('id');

var_dump($attr->isId()); // bool(true)

?>

User Contributed Notes

There are no user contributed notes for this page.


DOMCdataSection クラス

(PHP 5, PHP 7, PHP 8)

はじめに

DOMCdataSection は DOMText を継承したクラスで、 CData のテキスト表現に使います。

クラス概要

class DOMCdataSection extends DOMText {
/* 継承したプロパティ */
public readonly string $wholeText;
public string $data;
public readonly int $length;
public readonly ?DOMElement $previousElementSibling;
public readonly ?DOMElement $nextElementSibling;
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $data)
/* 継承したメソッド */
public DOMText::isElementContentWhitespace(): bool
public DOMText::isWhitespaceInElementContent(): bool
public DOMText::splitText(int $offset): DOMText|false
public DOMCharacterData::after(DOMNode|string ...$nodes): void
public DOMCharacterData::appendData(string $data): true
public DOMCharacterData::before(DOMNode|string ...$nodes): void
public DOMCharacterData::deleteData(int $offset, int $count): bool
public DOMCharacterData::insertData(int $offset, string $data): bool
public DOMCharacterData::remove(): void
public DOMCharacterData::replaceData(int $offset, int $count, string $data): bool
public DOMCharacterData::replaceWith(DOMNode|string ...$nodes): void
public DOMCharacterData::substringData(int $offset, int $count): string|false
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

目次

  • DOMCdataSection::__construct — 新しい DOMCdataSection オブジェクトを作成する

User Contributed Notes

There are no user contributed notes for this page.


新しい DOMCdataSection オブジェクトを作成する

  • ≪ DOMCdataSection
  • DOMCharacterData ≫
  • PHP Manual
  • DOMCdataSection
  • 新しい DOMCdataSection オブジェクトを作成する

DOMCdataSection::__construct

(PHP 5, PHP 7, PHP 8)

DOMCdataSection::__construct — 新しい DOMCdataSection オブジェクトを作成する

説明

public DOMCdataSection::__construct(string $data)

新しい CDATA ノードを作成します。これは、DOMText クラスと同じように動作します。

パラメータ

data

CDATA ノードの値。省略した場合は、空の CDATA ノードを作成します。

例

例1 新しい DOMCdataSection オブジェクトの作成

<?php

$dom = new DOMDocument('1.0', 'utf-8');
$element = $dom->appendChild(new DOMElement('root'));
$text = $element->appendChild(new DOMCdataSection('root value'));
echo $dom->saveXML();

?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="utf-8"?>
<root><![CDATA[root value]]></root>

参考

  • DOMText::__construct() - 新しい DOMText オブジェクトを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

There are no user contributed notes for this page.


DOMCharacterData クラス

(PHP 5, PHP 7, PHP 8)

はじめに

文字データノードを表します。このクラスに直接対応するノードはなく、 他のノードがこれを継承します。

クラス概要

class DOMCharacterData extends DOMNode implements DOMChildNode {
/* プロパティ */
public string $data;
public readonly int $length;
public readonly ?DOMElement $previousElementSibling;
public readonly ?DOMElement $nextElementSibling;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public after(DOMNode|string ...$nodes): void
public appendData(string $data): true
public before(DOMNode|string ...$nodes): void
public deleteData(int $offset, int $count): bool
public insertData(int $offset, string $data): bool
public remove(): void
public replaceData(int $offset, int $count, string $data): bool
public replaceWith(DOMNode|string ...$nodes): void
public substringData(int $offset, int $count): string|false
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

data

ノードの内容。

length

内容の長さ。

nextElementSibling

次の兄弟要素。存在しない場合は null になります。

previousElementSibling

前の兄弟要素。存在しない場合は null になります。

変更履歴

バージョン | 説明
8.0.0 | プロパティ nextElementSibling と previousElementSibling が追加されました。
8.0.0 | DOMCharacterData は、 DOMChildNode を実装しました。

参考

  • » W3C specification of CharacterData

目次

  • DOMCharacterData::after — 文字データの後ろにノードを追加する
  • DOMCharacterData::appendData — ノードの文字データの最後に文字列を追加する
  • DOMCharacterData::before — ノードの前にノードを追加する
  • DOMCharacterData::deleteData — 指定した範囲の文字列をノードから削除する
  • DOMCharacterData::insertData — 指定した 16 ビット単位のオフセットに、文字列を挿入する
  • DOMCharacterData::remove — 文字データを削除する
  • DOMCharacterData::replaceData — DOMCharacterData ノードの文字列の一部を置換する
  • DOMCharacterData::replaceWith — 文字データを新しいノードで置き換える
  • DOMCharacterData::substringData — ノードから指定した範囲のデータを抽出する

User Contributed Notes

jesdisciple dot FOO at gmail dot BAR dot com 08-Jul-2010 04:35
In case you're looking for the CDATA class to which nodes /do/ correspond, it's called DOMCdataSection (per my PHP installation) and isn't documented on php.net.  Presumably, it doesn't add anything to this API.

See also: http://www.php.net/manual/en/domdocument.createcdatasection.php


文字データの後ろにノードを追加する

  • ≪ DOMCharacterData
  • DOMCharacterData::appendData ≫
  • PHP Manual
  • DOMCharacterData
  • 文字データの後ろにノードを追加する

DOMCharacterData::after

(PHP 8)

DOMCharacterData::after — 文字データの後ろにノードを追加する

説明

public DOMCharacterData::after(DOMNode|string ...$nodes): void

渡された nodes をノードの後ろに追加します。

パラメータ

nodes

ノードの後ろに追加されるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMCharacterData::after() の例

文字データの後ろにノードを追加します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><![CDATA[hello]]></container>");
$cdata = $doc->documentElement->firstChild;

$cdata->after("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container><![CDATA[hello]]>beautiful<world/></container>

参考

  • DOMChildNode::after() - ノードの後ろにノードを追加する
  • DOMCharacterData::before() - ノードの前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


ノードの文字データの最後に文字列を追加する

  • ≪ DOMCharacterData::after
  • DOMCharacterData::before ≫
  • PHP Manual
  • DOMCharacterData
  • ノードの文字データの最後に文字列を追加する

DOMCharacterData::appendData

(PHP 5, PHP 7, PHP 8)

DOMCharacterData::appendData — ノードの文字データの最後に文字列を追加する

説明

public DOMCharacterData::appendData(string $data): true

ノードの文字データの最後に文字列 data を追加します。

パラメータ

data

追加する文字列。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.3.0 | この関数の仮の戻り値の型が、true になりました。

参考

  • DOMCharacterData::deleteData() - 指定した範囲の文字列をノードから削除する
  • DOMCharacterData::insertData() - 指定した 16 ビット単位のオフセットに、文字列を挿入する
  • DOMCharacterData::replaceData() - DOMCharacterData ノードの文字列の一部を置換する
  • DOMCharacterData::substringData() - ノードから指定した範囲のデータを抽出する

User Contributed Notes

There are no user contributed notes for this page.


ノードの前にノードを追加する

  • ≪ DOMCharacterData::appendData
  • DOMCharacterData::deleteData ≫
  • PHP Manual
  • DOMCharacterData
  • ノードの前にノードを追加する

DOMCharacterData::before

(PHP 8)

DOMCharacterData::before — ノードの前にノードを追加する

説明

public DOMCharacterData::before(DOMNode|string ...$nodes): void

渡された nodes をノードの前に追加します。

パラメータ

nodes

ノードの前に追加されるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMCharacterData::before() の例

文字データの前にノードを追加します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><![CDATA[world]]></container>");
$cdata = $doc->documentElement->firstChild;

$cdata->before("hello", $doc->createElement("beautiful"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container>hello<beautiful/><![CDATA[world]]></container>

参考

  • DOMChildNode::before() - ノードの前にノードを追加する
  • DOMCharacterData::after() - 文字データの後ろにノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


指定した範囲の文字列をノードから削除する

  • ≪ DOMCharacterData::before
  • DOMCharacterData::insertData ≫
  • PHP Manual
  • DOMCharacterData
  • 指定した範囲の文字列をノードから削除する

DOMCharacterData::deleteData

(PHP 5, PHP 7, PHP 8)

DOMCharacterData::deleteData — 指定した範囲の文字列をノードから削除する

説明

public DOMCharacterData::deleteData(int $offset, int $count): bool

offset で指定した位置から count 文字ぶんの文字を削除します。

パラメータ

offset

削除開始位置のオフセット。

count

削除する文字の数。 offset と count の和が文字列の長さをこえている場合、データ末尾までのすべての データが削除されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

DOM_INDEX_SIZE_ERR

offset が負、あるいは 16 ビット単位の データ長より大きい場合、または count が 負の場合に発生します。

参考

  • DOMCharacterData::appendData() - ノードの文字データの最後に文字列を追加する
  • DOMCharacterData::insertData() - 指定した 16 ビット単位のオフセットに、文字列を挿入する
  • DOMCharacterData::replaceData() - DOMCharacterData ノードの文字列の一部を置換する
  • DOMCharacterData::substringData() - ノードから指定した範囲のデータを抽出する

User Contributed Notes

There are no user contributed notes for this page.


指定した 16 ビット単位のオフセットに、文字列を挿入する

  • ≪ DOMCharacterData::deleteData
  • DOMCharacterData::remove ≫
  • PHP Manual
  • DOMCharacterData
  • 指定した 16 ビット単位のオフセットに、文字列を挿入する

DOMCharacterData::insertData

(PHP 5, PHP 7, PHP 8)

DOMCharacterData::insertData — 指定した 16 ビット単位のオフセットに、文字列を挿入する

説明

public DOMCharacterData::insertData(int $offset, string $data): bool

offset の位置に、文字列 data を挿入します。

パラメータ

offset

挿入する場所の文字オフセット。

data

挿入する文字列。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

DOM_INDEX_SIZE_ERR

offset が負であるか、あるいは 16 ビット単位の データ長より大きい場合に発生します。

参考

  • DOMCharacterData::appendData() - ノードの文字データの最後に文字列を追加する
  • DOMCharacterData::deleteData() - 指定した範囲の文字列をノードから削除する
  • DOMCharacterData::replaceData() - DOMCharacterData ノードの文字列の一部を置換する
  • DOMCharacterData::substringData() - ノードから指定した範囲のデータを抽出する

User Contributed Notes

There are no user contributed notes for this page.


文字データを削除する

  • ≪ DOMCharacterData::insertData
  • DOMCharacterData::replaceData ≫
  • PHP Manual
  • DOMCharacterData
  • 文字データを削除する

DOMCharacterData::remove

(PHP 8)

DOMCharacterData::remove — 文字データを削除する

説明

public DOMCharacterData::remove(): void

文字データを削除します。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

例

例1 DOMCharacterData::remove() の例

文字データを削除します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><![CDATA[hello]]><world/></container>");
$cdata = $doc->documentElement->firstChild;

$cdata->remove();

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container><world/></container>

参考

  • DOMChildNode::remove() - ノードを削除する
  • DOMCharacterData::after() - 文字データの後ろにノードを追加する
  • DOMCharacterData::before() - ノードの前にノードを追加する
  • DOMCharacterData::replaceWith() - 文字データを新しいノードで置き換える
  • DOMNode::removeChild() - 子要素群から子要素を削除する

User Contributed Notes

There are no user contributed notes for this page.


DOMCharacterData ノードの文字列の一部を置換する

  • ≪ DOMCharacterData::remove
  • DOMCharacterData::replaceWith ≫
  • PHP Manual
  • DOMCharacterData
  • DOMCharacterData ノードの文字列の一部を置換する

DOMCharacterData::replaceData

(PHP 5, PHP 7, PHP 8)

DOMCharacterData::replaceData — DOMCharacterData ノードの文字列の一部を置換する

説明

public DOMCharacterData::replaceData(int $offset, int $count, string $data): bool

位置 offset から count 文字ぶんのデータを、data に置換します。

パラメータ

offset

置換開始位置のオフセット。

count

置換する文字の数。 offset と count の和が文字列の長さをこえている場合、データ末尾までのすべての データが置換されます。

data

置換する文字列。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

DOM_INDEX_SIZE_ERR

offset が負、あるいは 16 ビット単位の データ長より大きい場合、または count が 負の場合に発生します。

参考

  • DOMCharacterData::appendData() - ノードの文字データの最後に文字列を追加する
  • DOMCharacterData::deleteData() - 指定した範囲の文字列をノードから削除する
  • DOMCharacterData::insertData() - 指定した 16 ビット単位のオフセットに、文字列を挿入する
  • DOMCharacterData::substringData() - ノードから指定した範囲のデータを抽出する

User Contributed Notes

There are no user contributed notes for this page.


文字データを新しいノードで置き換える

  • ≪ DOMCharacterData::replaceData
  • DOMCharacterData::substringData ≫
  • PHP Manual
  • DOMCharacterData
  • 文字データを新しいノードで置き換える

DOMCharacterData::replaceWith

(PHP 8)

DOMCharacterData::replaceWith — 文字データを新しいノードで置き換える

説明

public DOMCharacterData::replaceWith(DOMNode|string ...$nodes): void

文字データを新しい nodes で置き換えます。

パラメータ

nodes

置き換えるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMCharacterData::replaceWith() の例

文字データを新しいノードで置き換えます。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><![CDATA[hello]]></container>");
$cdata = $doc->documentElement->firstChild;

$cdata->replaceWith("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container>beautiful<world/></container>

参考

  • DOMChildNode::replaceWith() - ノードを新しいノードで置き換える
  • DOMCharacterData::after() - 文字データの後ろにノードを追加する
  • DOMCharacterData::before() - ノードの前にノードを追加する
  • DOMCharacterData::remove() - 文字データを削除する

User Contributed Notes

There are no user contributed notes for this page.


ノードから指定した範囲のデータを抽出する

  • ≪ DOMCharacterData::replaceWith
  • DOMChildNode ≫
  • PHP Manual
  • DOMCharacterData
  • ノードから指定した範囲のデータを抽出する

DOMCharacterData::substringData

(PHP 5, PHP 7, PHP 8)

DOMCharacterData::substringData — ノードから指定した範囲のデータを抽出する

説明

public DOMCharacterData::substringData(int $offset, int $count): string|false

指定した部分文字列を返します。

パラメータ

offset

部分文字列の抽出開始位置のオフセット。

count

抽出する文字数。

戻り値

指定された部分文字列を返します。 offset と count の和が文字列の長さをこえている場合、データの末尾までのすべての 16 ビット単位が返されます。

エラー / 例外

DOM_INDEX_SIZE_ERR

offset が負、あるいは 16 ビット単位の データ長より大きい場合、または count が 負の場合に発生します。

参考

  • DOMCharacterData::appendData() - ノードの文字データの最後に文字列を追加する
  • DOMCharacterData::deleteData() - 指定した範囲の文字列をノードから削除する
  • DOMCharacterData::insertData() - 指定した 16 ビット単位のオフセットに、文字列を挿入する
  • DOMCharacterData::replaceData() - DOMCharacterData ノードの文字列の一部を置換する

User Contributed Notes

There are no user contributed notes for this page.


DOMChildNode インターフェイス

(PHP 8)

インターフェイス概要

interface DOMChildNode {
/* メソッド */
public after(DOMNode|string ...$nodes): void
public before(DOMNode|string ...$nodes): void
public remove(): void
public replaceWith(DOMNode|string ...$nodes): void
}

目次

  • DOMChildNode::after — ノードの後ろにノードを追加する
  • DOMChildNode::before — ノードの前にノードを追加する
  • DOMChildNode::remove — ノードを削除する
  • DOMChildNode::replaceWith — ノードを新しいノードで置き換える

User Contributed Notes

There are no user contributed notes for this page.


ノードの後ろにノードを追加する

  • ≪ DOMChildNode
  • DOMChildNode::before ≫
  • PHP Manual
  • DOMChildNode
  • ノードの後ろにノードを追加する

DOMChildNode::after

(PHP 8)

DOMChildNode::after — ノードの後ろにノードを追加する

説明

public DOMChildNode::after(DOMNode|string ...$nodes): void

渡された nodes をノードの後ろに追加します。

パラメータ

nodes

ノードの後ろに追加されるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

参考

  • DOMChildNode::before() - ノードの前にノードを追加する
  • DOMChildNode::remove() - ノードを削除する
  • DOMChildNode::replaceWith() - ノードを新しいノードで置き換える
  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する

User Contributed Notes

There are no user contributed notes for this page.


ノードの前にノードを追加する

  • ≪ DOMChildNode::after
  • DOMChildNode::remove ≫
  • PHP Manual
  • DOMChildNode
  • ノードの前にノードを追加する

DOMChildNode::before

(PHP 8)

DOMChildNode::before — ノードの前にノードを追加する

説明

public DOMChildNode::before(DOMNode|string ...$nodes): void

渡された nodes をノードの前に追加します。

パラメータ

nodes

ノードの前に追加されるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

参考

  • DOMChildNode::after() - ノードの後ろにノードを追加する
  • DOMChildNode::remove() - ノードを削除する
  • DOMChildNode::replaceWith() - ノードを新しいノードで置き換える

User Contributed Notes

There are no user contributed notes for this page.


ノードを削除する

  • ≪ DOMChildNode::before
  • DOMChildNode::replaceWith ≫
  • PHP Manual
  • DOMChildNode
  • ノードを削除する

DOMChildNode::remove

(PHP 8)

DOMChildNode::remove — ノードを削除する

説明

public DOMChildNode::remove(): void

ノードを削除します。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

参考

  • DOMChildNode::after() - ノードの後ろにノードを追加する
  • DOMChildNode::before() - ノードの前にノードを追加する
  • DOMChildNode::replaceWith() - ノードを新しいノードで置き換える
  • DOMNode::removeChild() - 子要素群から子要素を削除する

User Contributed Notes

There are no user contributed notes for this page.


ノードを新しいノードで置き換える

  • ≪ DOMChildNode::remove
  • DOMComment ≫
  • PHP Manual
  • DOMChildNode
  • ノードを新しいノードで置き換える

DOMChildNode::replaceWith

(PHP 8)

DOMChildNode::replaceWith — ノードを新しいノードで置き換える

説明

public DOMChildNode::replaceWith(DOMNode|string ...$nodes): void

ノードを新しい nodes で置き換えます。

パラメータ

nodes

置き換えるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

参考

  • DOMChildNode::after() - ノードの後ろにノードを追加する
  • DOMChildNode::before() - ノードの前にノードを追加する
  • DOMChildNode::remove() - ノードを削除する
  • DOMNode::replaceChild() - 子を置き換える

User Contributed Notes

There are no user contributed notes for this page.


DOMComment クラス

(PHP 5, PHP 7, PHP 8)

はじめに

コメントノード、つまり <!-- と --> で囲まれた文字を表します。

クラス概要

class DOMComment extends DOMCharacterData {
/* 継承したプロパティ */
public string $data;
public readonly int $length;
public readonly ?DOMElement $previousElementSibling;
public readonly ?DOMElement $nextElementSibling;
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $data = "")
/* 継承したメソッド */
public DOMCharacterData::after(DOMNode|string ...$nodes): void
public DOMCharacterData::appendData(string $data): true
public DOMCharacterData::before(DOMNode|string ...$nodes): void
public DOMCharacterData::deleteData(int $offset, int $count): bool
public DOMCharacterData::insertData(int $offset, string $data): bool
public DOMCharacterData::remove(): void
public DOMCharacterData::replaceData(int $offset, int $count, string $data): bool
public DOMCharacterData::replaceWith(DOMNode|string ...$nodes): void
public DOMCharacterData::substringData(int $offset, int $count): string|false
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

参考

  • » W3C specification of Comment

目次

  • DOMComment::__construct — 新しい DOMComment オブジェクトを作成する

User Contributed Notes

npelov at croler dot net 09-Sep-2021 04:41
Note that textContent property of a comment is not entity decoded, it is decoded in DOMElement::textContent :

<?php

   $xml = new DOMDocument();
    $xml->loadXML('<?xml version="1.0" encoding="utf-8"?>
      <configuration version="2">
      <!-- test &#45;&#45;&gt; -->
      test &#45;&#45;&gt;
      </configuration>'
    );
$xpath = new DOMXPath($xml);
$comments = $xpath->query('//comment()');
$elements = $xpath->query('//configuration');

echo $comments[0]->textContent;
// result: test &#45;&#45;&gt;

echo $elements[0]->textContent;
// result: test -->

?>


新しい DOMComment オブジェクトを作成する

  • ≪ DOMComment
  • DOMDocument ≫
  • PHP Manual
  • DOMComment
  • 新しい DOMComment オブジェクトを作成する

DOMComment::__construct

(PHP 5, PHP 7, PHP 8)

DOMComment::__construct — 新しい DOMComment オブジェクトを作成する

説明

public DOMComment::__construct(string $data = "")

新しい DOMComment オブジェクトを作成します。 このオブジェクトは読み込み専用です。このオブジェクトをドキュメントに 追加することが可能ですが、ノードがドキュメントと関連付けられるまでは ノードを追加することはできません。書き込み可能なノードを作成するには、 DOMDocument::createComment を使用します。

パラメータ

data

コメントの値。

例

例1 新しい DOMComment を作成する

<?php

$dom = new DOMDocument('1.0', 'iso-8859-1');
$element = $dom->appendChild(new DOMElement('root'));
$comment = $element->appendChild(new DOMComment('root comment'));
echo $dom->saveXML(); /* <?xml version="1.0" encoding="iso-8859-1"?><root><!--root comment--></root> */

?>

参考

  • DOMDocument::createComment() - 新しい comment ノードを作成する

User Contributed Notes

There are no user contributed notes for this page.


DOMDocument クラス

(PHP 5, PHP 7, PHP 8)

はじめに

HTML ドキュメントあるいは XML ドキュメント全体を表し、 ドキュメントツリーのルートとなります。

クラス概要

class DOMDocument extends DOMNode implements DOMParentNode {
/* プロパティ */
public readonly ?DOMDocumentType $doctype;
public readonly DOMImplementation $implementation;
public readonly ?DOMElement $documentElement;
public readonly ?string $actualEncoding;
public ?string $encoding;
public readonly ?string $xmlEncoding;
public bool $standalone;
public bool $xmlStandalone;
public ?string $version;
public ?string $xmlVersion;
public bool $strictErrorChecking;
public ?string $documentURI;
public readonly mixed $config;
public bool $formatOutput;
public bool $validateOnParse;
public bool $resolveExternals;
public bool $preserveWhiteSpace;
public bool $recover;
public bool $substituteEntities;
public readonly ?DOMElement $firstElementChild;
public readonly ?DOMElement $lastElementChild;
public readonly int $childElementCount;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $version = "1.0", string $encoding = "")
public adoptNode(DOMNode $node): DOMNode|false
public append(DOMNode|string ...$nodes): void
public createAttribute(string $localName): DOMAttr|false
public createAttributeNS(?string $namespace, string $qualifiedName): DOMAttr|false
public createCDATASection(string $data): DOMCdataSection|false
public createComment(string $data): DOMComment
public createDocumentFragment(): DOMDocumentFragment
public createElement(string $localName, string $value = ""): DOMElement|false
public createElementNS(?string $namespace, string $qualifiedName, string $value = ""): DOMElement|false
public createEntityReference(string $name): DOMEntityReference|false
public createProcessingInstruction(string $target, string $data = ""): DOMProcessingInstruction|false
public createTextNode(string $data): DOMText
public getElementById(string $elementId): ?DOMElement
public getElementsByTagName(string $qualifiedName): DOMNodeList
public getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList
public importNode(DOMNode $node, bool $deep = false): DOMNode|false
public load(string $filename, int $options = 0): bool
public loadHTML(string $source, int $options = 0): bool
public loadHTMLFile(string $filename, int $options = 0): bool
public loadXML(string $source, int $options = 0): bool
public normalizeDocument(): void
public prepend(DOMNode|string ...$nodes): void
public registerNodeClass(string $baseClass, ?string $extendedClass): bool
public relaxNGValidate(string $filename): bool
public relaxNGValidateSource(string $source): bool
public replaceChildren(DOMNode|string ...$nodes): void
public save(string $filename, int $options = 0): int|false
public saveHTML(?DOMNode $node = null): string|false
public saveHTMLFile(string $filename): int|false
public saveXML(?DOMNode $node = null, int $options = 0): string|false
public schemaValidate(string $filename, int $flags = 0): bool
public schemaValidateSource(string $source, int $flags = 0): bool
public validate(): bool
public xinclude(int $options = 0): int|false
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

actualEncoding

非推奨。ドキュメントの実際のエンコーディング。 読み込み専用で、 encoding と同等の内容です。

childElementCount

子要素の数

config

非推奨。 DOMDocument::normalizeDocument() を実行する際に使用する設定。

doctype

このドキュメントに関連付けられた文書型宣言

documentElement

最初のドキュメント要素を示す DOMElement オブジェクト。 存在しない場合は null になります。

documentURI

ドキュメントの位置。未定義の場合は null

encoding

XML 宣言で指定したドキュメントのエンコーディング。 この属性は、DOM Level 3 の最終的な仕様には存在しません。 しかし、この実装で XML ドキュメントのエンコーディングを扱うにはこれを使用するしかありません。

firstElementChild

最初の子要素。存在しない場合は null になります。

formatOutput

字下げや空白を考慮してきれいに整形した出力を行う。 これは、ドキュメントを preserveWhitespace を有効にして読み込んだ場合は効果がありません。

implementation

このドキュメントを処理する DOMImplementation オブジェクト

lastElementChild

最後の子要素。存在しない場合は null になります。

preserveWhiteSpace

余分な空白を取り除かない。デフォルトは true false に設定すると、 DOMDocument::load() の option に LIBXML_NOBLANKS を渡すのと同じ効果があります。

recover

非標準。 リカバリーモードを有効にし、整形式でないドキュメントのパースを試みます。 この属性は DOM の仕様にはなく、libxml 固有の独自仕様です。

resolveExternals

文書型宣言で外部エンティティを読み込む際に true を設定する。 XML ドキュメントに文字エンティティを含める際に便利です。

standalone

非推奨。 そのドキュメントがスタンドアローンかどうかを XML 宣言で指定したもの。 xmlStandalone に対応します。

strictErrorChecking

エラー時に DOMException をスローする。デフォルトは true

substituteEntities

非標準。 エンティティの置換を行うかどうか。 この属性は DOM の仕様にはなく、libxml 固有の独自仕様です。 デフォルトは false です。

警告

エンティティの置換を有効にすると、XML外部エンティティ参照攻撃(XXE) を容易にしてしまうかもしれません。

validateOnParse

DTD を読み込んで検証する。デフォルトは false

警告

DTD の検証を有効にすると、XML外部エンティティ参照攻撃(XXE) を容易にしてしまうかもしれません。

version

非推奨。 XML のバージョン。 xmlVersion に対応します。

xmlEncoding

XML 宣言の一部として、このドキュメントのエンコーディングを 指定する属性。指定されていない場合や不明な場合 (たとえば ドキュメントがメモリ上に存在する場合など) は null

xmlStandalone

XML 宣言の一部として、このドキュメントがスタンドアローンか どうかを指定する。指定されていない場合は false スタンドアローンドキュメントとは、 外部のマークアップ宣言を持たないドキュメントのことです。 スタンドアローンドキュメントの例としては、 DTD がデフォルトの値で宣言されているものが挙げられます。

xmlVersion

XML 宣言の一部として、このドキュメントのバージョン番号を指定する。 バージョン番号が定義されておらず、ドキュメントが "XML" の機能を サポートしている場合は、値は "1.0"

変更履歴

バージョン | 説明
8.0.0 | DOMDocument は、 DOMParentNode を実装しました。
8.0.0 | 実装されていなかったメソッド DOMDocument::renameNode() が削除されました。

注意

注意:

DOM拡張モジュール は UTF-8 エンコーディングを使います。他のエンコーディングを扱う場合は、mb_convert_encoding(), UConverter::transcode(), iconv() を使ってください。

注意:

DOMDocument オブジェクトに対して json_encode() を使うと、結果は空オブジェクトをエンコードしたものになります。

参考

  • » W3C specification for Document

目次

  • DOMDocument::adoptNode — ノードを別のドキュメントに移す
  • DOMDocument::append — 最後の子ノードの後ろにノードを追加する
  • DOMDocument::__construct — 新しい DOMDocument オブジェクトを作成する
  • DOMDocument::createAttribute — 新しい属性を作成する
  • DOMDocument::createAttributeNS — 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection — 新しい cdata ノードを作成する
  • DOMDocument::createComment — 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment — 新しい文書片を作成する
  • DOMDocument::createElement — 新しい要素ノードを作成する
  • DOMDocument::createElementNS — 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference — 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction — 新しい PI ノードを作成する
  • DOMDocument::createTextNode — 新しいテキストノードを作成する
  • DOMDocument::getElementById — id に対応する要素を検索する
  • DOMDocument::getElementsByTagName — 指定したローカルタグ名に対応するすべての要素を検索する
  • DOMDocument::getElementsByTagNameNS — 指定した名前空間で、タグ名に対応するすべての要素を検索する
  • DOMDocument::importNode — 現在のドキュメントにノードをインポートする
  • DOMDocument::load — ファイルから XML を読み込む
  • DOMDocument::loadHTML — 文字列から HTML を読み込む
  • DOMDocument::loadHTMLFile — ファイルから HTML を読み込む
  • DOMDocument::loadXML — 文字列から XML を読み込む
  • DOMDocument::normalizeDocument — ドキュメントを正規化する
  • DOMDocument::prepend — 最初の子ノードの前にノードを追加する
  • DOMDocument::registerNodeClass — 基底ノード型を作成する際に使用する拡張クラスを登録する
  • DOMDocument::relaxNGValidate — ドキュメントを relaxNG で検証する
  • DOMDocument::relaxNGValidateSource — ドキュメントを relaxNG で検証する
  • DOMDocument::replaceChildren — ドキュメントの子を置換する
  • DOMDocument::save — 内部の XML ツリーをファイルに出力する
  • DOMDocument::saveHTML — 内部のドキュメントを HTML 形式の文字列として出力する
  • DOMDocument::saveHTMLFile — 内部のドキュメントを HTML 形式でファイルに出力する
  • DOMDocument::saveXML — 内部の XML ツリーを文字列として出力する
  • DOMDocument::schemaValidate — スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。
  • DOMDocument::schemaValidateSource — スキーマに基づいてドキュメントを検証する
  • DOMDocument::validate — DTD に基づいてドキュメントを検証する
  • DOMDocument::xinclude — DOMDocument オブジェクト内の XIncludes を置換する

User Contributed Notes

610010559 at qq dot com 17-Mar-2022 02:39
when you add the new element to formatted XML data through appendChild() method, you would the new element you add is not be formatted(that is not indexed, not line break).  here is my solution (in short load the xml without preserve white space, ), example show as below:
<?php
$doc = new \DOMDocument();
$doc->formatOutput = true;
$doc->preserveWhiteSpace = false;//that is key, default value is true.
$doc->loadXML($xmlStr);
$doc->appendChild($doc->createElement('php', '666'))
$formattedXMLStr = $doc->saveXML();//DOMDocument wold format the xml str for you
echo $formattedXMlStr;
?>
it take me some time to try it out. hope it save your time.
andreas at userbrain dot com 17-Nov-2021 01:16
After struggling with parsing and modifying partial HTML content for several hours, I came to this solution which does work for me and is relatively simple compared to what else I found online.

This solution fixes unwanted DOCTYPE and html, body tags as well as encoding issues.

<?php

// Assumption: content is utf-8 encoded
$content = "<h1>This is a heading</h1><p>This is a paragraph</p>";

// Load content to a div and specify encoding with a meta tag
$temp_dom = new DOMDocument();
$temp_dom->loadHTML("<meta http-equiv='Content-Type' content='CHARSET=shift-jis' /><div>$content</div>");

// As loadHTML() adds a DOCTYPE as well as <html> and <body> tag, let's create another DOMDocument and import just the nodes we want
$dom = new DOMDocument();
$first_div = $temp_dom->getElementsByTagName('div')[0];
$first_div_node = $dom->importNode($first_div, true);
$dom->appendChild($first_div_node);

// Do whatever you want to do
$dom->getElementsByTagName('h1')[0]->setAttribute('class', 'happy');

// You could also just echo $dom->saveHtml() if you don't mind the div and whitespace
echo substr(trim($dom->saveHtml()), 5, -6);

// Outputs: <h1 class="happy">This is a heading</h1><p>This is a paragraph</p>
?>
pastormontesinos at gmail dot com 04-Mar-2021 10:34
For using safely with script nodes when parsing, best option is extending DOMDocument, keeping script tags while DOMDocument process and rearrange them just after saveHTML function is called. Here is my custom class.

<?php

class SafeDOMDocument extends \DOMDocument
{
    const REGEX_JS            = '#(\s*<!--(\[if[^\n]*>)?\s*(<script.*</script>)+\s*(<!\[endif\])?-->)|(\s*<script.*</script>)#isU';
    const SUBSTITUTION_FORMAT = '<!--<script class="script_%s"></script>-->';
    private $matchedScripts = [];

    public function loadHTML($source, $options = 0)
    {
        $this->formatOutput        = false;
        $this->preserveWhiteSpace  = true;
        $this->validateOnParse     = false;
        $this->strictErrorChecking = false;
        $this->recover             = false;
        $this->resolveExternals    = false;
        $this->substituteEntities  = false;
        $matches = [];
        $success = preg_match_all(self::REGEX_JS, $source, $matches);

        if ($success && !empty($matches)) {
            foreach ($matches[0] as $match) {
                $storedScript = rtrim(ltrim($match, "\n\r\t "), "\n\r\t ");
                $scriptId = md5($storedScript);
                $key = sprintf(self::SUBSTITUTION_FORMAT, $scriptId);
                $source = str_replace($match, $key, $source);
                $this->matchedScripts[$key] = $storedScript;
            }
        }

        return parent::loadHTML($source, $options);
    }

    public function saveHTML(DOMNode $node = null)
    {
        $output = parent::saveHTML($node);

        if (count($this->matchedScripts)) {
            foreach ($this->matchedScripts as $substitution => $originalSnippet) {
                $output = str_replace($substitution, $originalSnippet, $output);
            }
        }

        return $output;
    }
}
?>
ashjkshdu283 at gmail dot com 07-Jul-2018 11:39
/* Function evolved from jay at jaygilford dot com post
  * This function will return an array of the values of the specified
  * attribute ($attr) for all the Dom Document object's elements
  */

<?php

function getAttrData(string $attr, DomDocument $dom) {
    // Empty array to hold all classes to return
    $attrData = array();

    //Loop through each tag in the dom and add it's attribute data to the array
    foreach($dom->getElementsByTagName('*') as $tag) {
        if(empty($tag->getAttribute($attr)) === false) {
            array_push($attrData, $tag->getAttribute($attr));
        }
    }

    //Return the array of attribute data
    return array_unique($attrData);
}

$html = '
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<a href="#someLink" id="someLink" class="link-class">Some Link</a>
<a href="#someOtherLink" id="someOtherLink" class="link-class">Some Other Link</a>
<h1 id="header1" class="header-class">My First Heading</h1>
<p id="para1" class="para-class">My first paragraph.</p>
</body>
</html>';
$dom = new DOMDocument();
$dom->loadHtml($html);
$dom->saveHTML();
var_dump(getAttrData('class', $dom));
biker dot mike at gmx dot com 22-Aug-2016 01:36
Look out for the following gotcha when loading XML from a string:

<?php
$doc = new \DOMDocument;
$doc->documentURI = $myXmlFilename;
$doc->loadXML($myXmlString);
?>

documentURI is now set to the value of $myXmlFilename, right?

Wrong!

It's set to the current working directory.  If you want to manually set documentURI to something other than the CWD, do so AFTER the call to loadXML().

E.g.:
<?php
$doc = new \DOMDocument;
$doc->loadXML($myXmlString);
$doc->documentURI = $myXmlFilename;
?>

documentURI really is now set to the value of $myXmlFilename.
developer at nabtron dot com 17-Dec-2015 07:34
For those landing here and checking for encoding issue with utf-8 characteres, it's pretty easy to correct it, without adding any additional output tag to your html.

We'll be utilizing: mb_convert_encoding

Thanks to the user who shared: SmartDOMDocument in previous comments, I got the idea of solving it. However I truly wish that he shared the method instead of giving a link.

Anyway coming back to the solution, you can simply use:

<?php

            // checks if the content we're receiving isn't empty, to avoid the warning
            if ( empty( $content ) ) {
                return false;
            }

            // converts all special characters to utf-8
            $content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8');

            // creating new document
            $doc = new DOMDocument('1.0', 'utf-8');

            //turning off some errors
            libxml_use_internal_errors(true);

            // it loads the content without adding enclosing html/body tags and also the doctype declaration
            $doc->LoadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

            // do whatever you want to do with this code now

?>

I hope it solves the issue for someone! If you need my help or service to fix your code, you can reach me on nabtron.com or contact me at the email mentioned with this comment.
ingjetel at gmail dot com 13-May-2015 11:54
Easy function for basic output of XML file via DOM parsing

<?php
$dom = new DomDocument();
$dom->load("./file.xml") or die("error");
$start = $dom->documentElement;
fc($start);

function fc($node) {
  $child = $node->childNodes;
  foreach($child as $item) {
    if ($item->nodeType == XML_TEXT_NODE) {
      if (strlen(trim($item->nodeValue))) echo trim($item->nodeValue)."<br/>";
    }
    else if ($item->nodeType == XML_ELEMENT_NODE) fc($item);
  }
}
?>
qrworld.net 11-Nov-2014 04:35
In this post http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url_11.html I found a simple way to get the content of a URL with DOMDocument, loadHTMLFile and saveHTML().

function getURLContent($url){
    $doc = new DOMDocument;
    $doc->preserveWhiteSpace = FALSE;
    @$doc->loadHTMLFile($url);
    return $doc->saveHTML();
}
danny dot nunez15 at gmail dot com 28-Oct-2013 02:54
A simple function to grab all links in a page.

    function get_links($url) {

        // Create a new DOM Document to hold our webpage structure
        $xml = new DOMDocument();

        // Load the url's contents into the DOM

        $xml->loadHTMLFile($url);

        // Empty array to hold all links to return
        $links = array();

        //Loop through each <a> tag in the dom and add it to the link array
        foreach ($xml->getElementsByTagName('a') as $link) {
            $url = $link->getAttribute('href');
            if (!empty($url)) {
                $links[] = $link->getAttribute('href');
            }
        }

        //Return the links
        return $links;
    }
sites.sitesbr.net 22-Jan-2013 12:37
How to objetify a DomDocument with hierarchy like:
<root>
    <item>
          <prop1>info1</prop1>
          <prop2>info2</prop2>
          <prop3>info3</prop3>
     </item>
    <item>
          <prop1>info1</prop1>
          <prop2>info2</prop2>
          <prop3>info3</prop3>
     </item>
</root>

It's possible to use in object style to retrieve information, as:

<?php
     $theNodeValue = $aitem->prop1;
?>

Here is the code: one Class and 2 functions.

<?php
 class ArrayNode{
       public $nodeName, $nodeValue;
 }

 function getChildNodeElements( $domNode ){
     $nodes = array();
     for( $i=0; $i < $domNode->childNodes->length; $i++){
       $cn = $domNode->childNodes->item($i);
       if( $cn->nodeType == 1){
           $nodes[] = $cn;
           }
     }
    return $nodes;
 }

 function getArrayNodes( $domDoc ){
     $res = array();

       for( $i=0; $i < $domDoc->childNodes->length; $i++){
       $cn = $domDoc->childNodes->item($i);
       # The first is the root tag...
          if( $cn->nodeType == 1){
               # But we want it's childNodes.
                $sub_cn = getChildNodeElements( $cn);
                # Found the tagName:
                $baseItemTagName = $sub_cn[0]->nodeName;
                break;
            }
        }

       $dnl = $domDoc->getElementsByTagName( $baseItemTagName);

       for( $i=0; $i< $dnl->length; $i++){
          $arrayNode = new ArrayNode();

      # Summary
      $arrayNode->nodeName = $dnl->item($i)->nodeName;
      $arrayNode->nodeValue = $dnl->item($i)->nodeValue;

      # Child Nodes
      $cn = $dnl->item($i)->childNodes;
      for( $k=0; $k<$cn->length; $k++){
           if( $cn->item($k)->nodeName == "#text" && trim($cn->item($k)->nodeValue) == "") continue;
           $arrayNode->{$cn->item($k)->nodeName} = $cn->item($k)->nodeValue;
      }

      # Attributes
      $attr = $dnl->item($i)->attributes;
      for( $k=0; $k < $attr->length; $k++){
           if(! is_null($attr)){
            if( $attr->item($k)->nodeName == "#text" && trim($attr->item($k)->nodeValue) == "") continue;
            $arrayNode->{$attr->item($k)->nodeName} = $attr->item($k)->nodeValue;
           }
      }

      $res[] = $arrayNode;

       }

     return $res;
 }
?>

To use it:

<?php

  # First you load a XML in a DomDocument variable.

   $url = "/path/to/yourxmlfile.xml";
   $domSrc = file_get_contents($url);
   $dom = new DomDocument();
   $dom->loadXML( $domSrc );

  # Then, you get the ArrayNodes from the DomDocument.

    $ans = getArrayNodes( $dom );

    for( $i=0; $i < count( $ans ) ; $i++){

    $cn =  $ans[ $i];

    $info1 =  $cn->prop1;
    $info2 =  $cn->prop2;
    $info3 =  $cn->prop3;

         // ...

   }

?>
Nick M 01-Jun-2011 10:16
You may need to save all or part of a DOMDocument as an XHTML-friendly string, something compliant with both XML and HTML 4. Here's the DOMDocument class extended with a saveXHTML method:

<?php

/**
 * XHTML Document
 *
 * Represents an entire XHTML DOM document; serves as the root of the document tree.
 */
class XHTMLDocument extends DOMDocument {

  /**
   * These tags must always self-terminate. Anything else must never self-terminate.
   *
   * @var array
   */
  public $selfTerminate = array(
      'area','base','basefont','br','col','frame','hr','img','input','link','meta','param'
  );

  /**
   * saveXHTML
   *
   * Dumps the internal XML tree back into an XHTML-friendly string.
   *
   * @param DOMNode $node
   *         Use this parameter to output only a specific node rather than the entire document.
   */
  public function saveXHTML(DOMNode $node=null) {

    if (!$node) $node = $this->firstChild;

    $doc = new DOMDocument('1.0');
    $clone = $doc->importNode($node->cloneNode(false), true);
    $term = in_array(strtolower($clone->nodeName), $this->selfTerminate);
    $inner='';

    if (!$term) {
      $clone->appendChild(new DOMText(''));
      if ($node->childNodes) foreach ($node->childNodes as $child) {
        $inner .= $this->saveXHTML($child);
      }
    }

    $doc->appendChild($clone);
    $out = $doc->saveXML($clone);

    return $term ? substr($out, 0, -2) . ' />' : str_replace('><', ">$inner<", $out);

  }

}

?>

This hasn't been benchmarked, but is probably significantly slower than saveXML or saveHTML and should be used sparingly.
evert at er dot nl 20-Nov-2010 02:17
A nice and simple node 2 array I wrote, worth a try ;)

<?php
function getArray($node)
{
    $array = false;

    if ($node->hasAttributes())
    {
        foreach ($node->attributes as $attr)
        {
            $array[$attr->nodeName] = $attr->nodeValue;
        }
    }

    if ($node->hasChildNodes())
    {
        if ($node->childNodes->length == 1)
        {
            $array[$node->firstChild->nodeName] = $node->firstChild->nodeValue;
        }
        else
        {
            foreach ($node->childNodes as $childNode)
            {
                if ($childNode->nodeType != XML_TEXT_NODE)
                {
                    $array[$childNode->nodeName][] = $this->getArray($childNode);
                }
            }
        }
    }

    return $array;
}
?>
admin at beerpla dot net 12-Mar-2010 02:12
After seeing many complaints about certain DOMDocument shortcomings, such as bad handling of encodings and always saving HTML fragments with <html>, <head>, and DOCTYPE, I decided that a better solution is needed.

So here it is: SmartDOMDocument. You can find it at http://beerpla.net/projects/smartdomdocument/

Currently, the main highlights are:

- SmartDOMDocument inherits from DOMDocument, so it's very easy to use - just declare an object of type SmartDOMDocument instead of DOMDocument and enjoy the new behavior on top of all existing functionality (see example below).

- saveHTMLExact() - DOMDocument has an extremely badly designed "feature" where if the HTML code you are loading does not contain <html> and <body> tags, it adds them automatically (yup, there are no flags to turn this behavior off).
Thus, when you call $doc->saveHTML(), your newly saved content now has <html><body> and DOCTYPE in it. Not very handy when trying to work with code fragments (XML has a similar problem).
SmartDOMDocument contains a new function called saveHTMLExact() which does exactly what you would want - it saves HTML without adding that extra garbage that DOMDocument does.

- encoding fix - DOMDocument notoriously doesn't handle encoding (at least UTF-8) correctly and garbles the output.
SmartDOMDocument tries to work around this problem by enhancing loadHTML() to deal with encoding correctly. This behavior is transparent to you - just use loadHTML() as you would normally.

- SmartDOMDocument Object As String - you can use a SmartDOMDocument object as a string which will print out its contents.
For example:
<?php
echo "Here is the HTML: $smart_dom_doc";
?>

I'm going to maintain this code and try to fix bugs as they come in.

Enjoy.
tloach at gmail dot com 05-Feb-2010 10:01
For anyone else who has been having issues with formatOuput not working, here is a work-around:

rather than just doing something like:

<?php
$outXML = $xml->saveXML();
?>

force it to reload the XML from scratch, then it will format correctly:

<?php
$outXML = $xml->saveXML();
$xml = new DOMDocument();
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;
$xml->loadXML($outXML);
$outXML = $xml->saveXML();
?>
jay at jaygilford dot com 27-Jan-2010 08:46
Here's a small function I wrote to get all page links using the DOMDocument which will hopefully be of use to others

<?php
/**
 * @author Jay Gilford
 */

/**
 * get_links()
 *
 * @param string $url
 * @return array
 */
function get_links($url) {

    // Create a new DOM Document to hold our webpage structure
    $xml = new DOMDocument();

    // Load the url's contents into the DOM
    $xml->loadHTMLFile($url);

    // Empty array to hold all links to return
    $links = array();

    //Loop through each <a> tag in the dom and add it to the link array
    foreach($xml->getElementsByTagName('a') as $link) {
        $links[] = array('url' => $link->getAttribute('href'), 'text' => $link->nodeValue);
    }

    //Return the links
    return $links;
}
?>
fcartegnie 31-Oct-2009 01:30
Be careful with formatOutput().

Creating an empty node like this:
createElement('foo','')
instead of
createElement('foo')
will break formatOutput.
PhilipWayneRollins at gmail dot com 15-Aug-2009 01:32
If you want to use the DOMDocument to create xHTML documents here is a simple class

Note this is designed for creating xHTML documents from scratch but could be easily extended to work with xHTML documents. Also this is for xHTML not XML.

<?php
    class Document
    {
        public $doctype;
        public $head;
        public $title = 'Sensei Ninja';
        public $body;
        private $styles;
        private $metas;
        private $scripts;
        private $document;

        function __construct (  )
        {
            $this->document = new DOMDocument( );
            $this->head = $this->document->createElement( 'head', ' ' );
            $this->body = $this->document->createElement( 'body', ' ' );
        }

        public function addStyleSheet ( $url, $media='all' )
        {
            $element = $this->document->createElement( 'link' );
            $element->setAttribute( 'type', 'text/css' );
            $element->setAttribute( 'href', $url );
            $element->setAttribute( 'media', $media );
            $this->styles[] = $element;
        }

        public function addScript ( $url )
        {
            $element = $this->document->createElement( 'script', ' ' );
            $element->setAttribute( 'type', 'text/javascript' );
            $element->setAttribute( 'src', $url );
            $this->scripts[] = $element;
        }

        public function addMetaTag ( $name, $content )
        {
            $element = $this->document->createElement( 'meta' );
            $element->setAttribute( 'name', $name );
            $element->setAttribute( 'content', $content );
            $this->metas[] = $element;
        }

        public function setDescription ( $dec )
        {
            $this->addMetaTag( 'description', $dec );
        }

        public function setKeywords ( $keywords )
        {
            $this->addMetaTag( 'keywords', $keywords );
        }

        public function createElement ( $nodeName, $nodeValue=null )
        {
          return $this->document->createElement( $nodeName, $nodeValue );
        }

        public function assemble ( )
        {
            // Doctype creation
            $doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML TRANSITIONAL 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';

            // Create the head element
            $title = $this->document->createElement( 'title', $this->title );
            // Add stylesheets if needed
            if ( is_array( $this->styles ))
                foreach ( $this->styles as $element )
                    $this->head->appendChild( $element );
            // Add scripts if needed
            if(  is_array( $this->scripts ))
                foreach ( $this->scripts as $element )
                    $this->head->appendChild( $element );
            // Add meta tags if needed
            if ( is_array( $this->metas ))
                foreach ( $this->metas as $element )
                    $this->head->appendChild( $element );
            $this->head->appendChild( $title );

            // Create the document
            $html = $this->document->createElement( 'html' );
            $html->setAttribute( 'xmlns', 'http://www.w3.org/1999/xhtml' );
            $html->setAttribute( 'xml:lang', 'en' );
            $html->setAttribute( 'lang', 'en' );
            $html->appendChild( $this->head );
            $html->appendChild( $this->body );

            $this->document->appendChild( $html );
            return $doctype . $this->document->saveXML( );
        }

    }

?>

Small example

<?php
        $document = new Document( );
    $document->title = 'Hello';
    $document->addStyleSheet( 'StyleSheets/main.css' );
    $div = $document->createElement( 'div' );
    $div->nodeValue = 'Hello, world!';
    $div->setAttribute( 'style', 'color: red;' );
    $document->body->appendChild( $div );
    printf( '%s', $document->assemble( ) );
?>
cmyk777 at gmail dot com 23-May-2009 12:31
This function may help to debug current dom element:

<?php
function dom_dump($obj) {
    if ($classname = get_class($obj)) {
        $retval = "Instance of $classname, node list: \n";
        switch (true) {
            case ($obj instanceof DOMDocument):
                $retval .= "XPath: {$obj->getNodePath()}\n".$obj->saveXML($obj);
                break;
            case ($obj instanceof DOMElement):
                $retval .= "XPath: {$obj->getNodePath()}\n".$obj->ownerDocument->saveXML($obj);
                break;
            case ($obj instanceof DOMAttr):
                $retval .= "XPath: {$obj->getNodePath()}\n".$obj->ownerDocument->saveXML($obj);
                //$retval .= $obj->ownerDocument->saveXML($obj);
                break;
            case ($obj instanceof DOMNodeList):
                for ($i = 0; $i < $obj->length; $i++) {
                    $retval .= "Item #$i, XPath: {$obj->item($i)->getNodePath()}\n".
"{$obj->item($i)->ownerDocument->saveXML($obj->item($i))}\n";
                }
                break;
            default:
                return "Instance of unknown class";
        }
    } else {
        return 'no elements...';
    }
    return htmlspecialchars($retval);
}
?>

Example usage:

<?php
$dom = new DomDocument();
$dom->load('test.xml');
$body = $dom->documentElement->getElementsByTagName('book');
echo '<pre>'.dom_dump($body).'<pre>';
?>

Output:

Instance of DOMNodeList, node list:
Item #0, XPath: /library/book[1]
<book isbn="0345342968">
<title>Fahrenheit 451</title>
<author>R. Bradbury</author>
<publisher>Del Rey</publisher>
</book>
Item #1, XPath: /library/book[2]
<book isbn="0048231398">
<title>The Silmarillion</title>
<author>J.R.R. Tolkien</author>
<publisher>G. Allen &amp; Unwin</publisher>
</book>
Item #2, XPath: /library/book[3]
<book isbn="0451524934">
<title>1984</title>
<author>G. Orwell</author>
<publisher>Signet</publisher>
</book>
Item #3, XPath: /library/book[4]
<book isbn="031219126X">
<title>Frankenstein</title>
<author>M. Shelley</author>
<publisher>Bedford</publisher>
</book>
Item #4, XPath: /library/book[5]
<book isbn="0312863551">
<title>The Moon Is a Harsh Mistress</title>
<author>R. A. Heinlein</author>
<publisher>Orb</publisher>
</book>
Fernando H 11-Apr-2008 12:48
Showing a quick example of how to use this class, just so that new users can get a quick start without having to figure it all out by themself. ( At the day of posting, this documentation just got added and is lacking examples. )

<?php

// Set the content type to be XML, so that the browser will   recognise it as XML.
header( "content-type: application/xml; charset=ISO-8859-15" );

// "Create" the document.
$xml = new DOMDocument( "1.0", "ISO-8859-15" );

// Create some elements.
$xml_album = $xml->createElement( "Album" );
$xml_track = $xml->createElement( "Track", "The ninth symphony" );

// Set the attributes.
$xml_track->setAttribute( "length", "0:01:15" );
$xml_track->setAttribute( "bitrate", "64kb/s" );
$xml_track->setAttribute( "channels", "2" );

// Create another element, just to show you can add any (realistic to computer) number of sublevels.
$xml_note = $xml->createElement( "Note", "The last symphony composed by Ludwig van Beethoven." );

// Append the whole bunch.
$xml_track->appendChild( $xml_note );
$xml_album->appendChild( $xml_track );

// Repeat the above with some different values..
$xml_track = $xml->createElement( "Track", "Highway Blues" );

$xml_track->setAttribute( "length", "0:01:33" );
$xml_track->setAttribute( "bitrate", "64kb/s" );
$xml_track->setAttribute( "channels", "2" );
$xml_album->appendChild( $xml_track );

$xml->appendChild( $xml_album );

// Parse the XML.
print $xml->saveXML();

?>

Output:
<Album>
  <Track length="0:01:15" bitrate="64kb/s" channels="2">
    The ninth symphony
    <Note>
      The last symphony composed by Ludwig van Beethoven.
    </Note>
  </Track>
  <Track length="0:01:33" bitrate="64kb/s" channels="2">Highway Blues</Track>
</Album>

If you want your PHP->DOM code to run under the .xml extension, you should set your webserver up to run the .xml extension with PHP ( Refer to the installation/configuration configuration for PHP on how to do this ).

Note that this:
<?php
$xml = new DOMDocument( "1.0", "ISO-8859-15" );
$xml_album = $xml->createElement( "Album" );
$xml_track = $xml->createElement( "Track" );
$xml_album->appendChild( $xml_track );
$xml->appendChild( $xml_album );
?>

is NOT the same as this:
<?php
// Will NOT work.
$xml = new DOMDocument( "1.0", "ISO-8859-15" );
$xml_album = new DOMElement( "Album" );
$xml_track = new DOMElement( "Track" );
$xml_album->appendChild( $xml_track );
$xml->appendChild( $xml_album );
?>

although this will work:
<?php
$xml = new DOMDocument( "1.0", "ISO-8859-15" );
$xml_album = new DOMElement( "Album" );
$xml->appendChild( $xml_album );
?>


ノードを別のドキュメントに移す

  • ≪ DOMDocument
  • DOMDocument::append ≫
  • PHP Manual
  • DOMDocument
  • ノードを別のドキュメントに移す

DOMDocument::adoptNode

(PHP >= 8.3)

DOMDocument::adoptNode — ノードを別のドキュメントに移す

説明

public DOMDocument::adoptNode(DOMNode $node): DOMNode|false

ノードを別のドキュメントから、現在のドキュメントに移します。

パラメータ

node

移すノード

戻り値

移したノードを返します。エラー時に false を返します。

エラー / 例外

DOM_NOT_SUPPORTED_ERR

ノードの型が、転送先のノードでサポートされていない場合に発生します。

例

例1 DOMDocument::adoptNode() の例

最初のドキュメントの hello 要素を二番目のものに移します。

<?php
$doc1 = new DOMDocument;
$doc1->loadXML("<container><hello><world/></hello></container>");
$hello = $doc1->documentElement->firstChild;

$doc2 = new DOMDocument;
$doc2->loadXML("<root/>");
$doc2->documentElement->appendChild($doc2->adoptNode($hello));

echo $doc1->saveXML() . PHP_EOL;
echo $doc2->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container/>

<?xml version="1.0"?>
<root><hello><world/></hello></root>

参考

  • DOMDocument::importNode() - 現在のドキュメントにノードをインポートする

User Contributed Notes

There are no user contributed notes for this page.


最後の子ノードの後ろにノードを追加する

  • ≪ DOMDocument::adoptNode
  • DOMDocument::__construct ≫
  • PHP Manual
  • DOMDocument
  • 最後の子ノードの後ろにノードを追加する

DOMDocument::append

(PHP 8)

DOMDocument::append — 最後の子ノードの後ろにノードを追加する

説明

public DOMDocument::append(DOMNode|string ...$nodes): void

ひとつ以上の nodes を子要素のリストに追加します。 追加されるのは、最後の子ノードの後ろになります。

パラメータ

nodes

追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMDocument::append() の例

ドキュメントのルートの後ろにノードを追加します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<hello/>");

$doc->append("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<hello/>
beautiful
<world/>

参考

  • DOMParentNode::append() - 最後の子ノードの後ろにノードを追加する
  • DOMDocument::prepend() - 最初の子ノードの前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


新しい DOMDocument オブジェクトを作成する

  • ≪ DOMDocument::append
  • DOMDocument::createAttribute ≫
  • PHP Manual
  • DOMDocument
  • 新しい DOMDocument オブジェクトを作成する

DOMDocument::__construct

(PHP 5, PHP 7, PHP 8)

DOMDocument::__construct — 新しい DOMDocument オブジェクトを作成する

説明

public DOMDocument::__construct(string $version = "1.0", string $encoding = "")

新しい DOMDocument オブジェクトを作成します。

パラメータ

version

XML 宣言の一部である、ドキュメントのバージョン番号。

encoding

XML 宣言の一部である、ドキュメントのエンコーディング。

例

例1 新しい DOMDocument を作成する

<?php

$dom = new DOMDocument('1.0', 'iso-8859-1');

echo $dom->saveXML(); /* <?xml version="1.0" encoding="iso-8859-1"?> */

?>

参考

  • DOMImplementation::createDocument() - 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する

User Contributed Notes

qrworld.net 11-Nov-2014 04:36
In this post http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url_11.html I found a simple way to get the content of a URL with DOMDocument, loadHTMLFile and saveHTML().

function getURLContent($url){
    $doc = new DOMDocument;
    $doc->preserveWhiteSpace = FALSE;
    @$doc->loadHTMLFile($url);
    return $doc->saveHTML();
}
_ michael 01-Jun-2010 07:23
The constuctor arguments are useful if you want to build a new document using createElement, appendChild etc.

By contrast, these arguments are overriden as soon as you load a document from source by calling load() or loadXML().

* If the source contains an XML declaration specifying an encoding, that encoding is used.
* If the XML declaration does not specify an encoding, or if the source does not contain a declaration at all, UTF-8 is assumed.

This behaviour applies no matter what you declared when you called new DOMDocument().
blackhailang at gmail dot com 09-Oct-2008 07:54
domdocument::domdocument() expects at least
At the least, I found that It due to ZEND optimizer, uninstall it,working well, but the speeds will be slowlly :-(.

Comment :
item 1 : 2008-10-03 17:10:58, gkrong said:
"Warning: domdocument::domdocument() expects at least 1
 parameter"
If you use PHP 5 in windows, you don't need to declare
php_domxml.dll in your php.ini file.
so u can give comment in the line php_domxml.dll in your
php.ini file.
you only need to comment it out, but do not delete the
php_domxml.dll file in the ext directory.
steve at mrclay dot org 08-Oct-2008 09:45
To expand on bholbrook's comment, if you receive this: "Warning: domdocument::domdocument() expects at least 1 parameter", it is due to the old domxml extension, which you need to disable.

domxml overwrites DOMDocument::_construct with an alias to domxml_open_mem, so this code:
<?php
$doc = new DOMDocument();
?>
...essentially does this:
<?php
$dom = domxml_open_mem();
?>
...which is why PHP complains about expecting at least 1 parameter (it expects a string of XML).
christian dot reinecke at web dot de 15-Jul-2008 07:09
If you get the error message "domdocument::domdocument() expects parameter 2 to be long, string given"  for a code sample like this:

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->xmlStandalone = false;
echo $dom->saveXML();

which is obviously correct if you compare the constructor signature:

__construct  ([ string $version  [, string $encoding  ]] )

make sure you're not overwritting this dom library by another (f.e. extension=php_domxml.dll in php.ini). XAMPP f.e. delivers its standard version with php_domxml.dll which ends up in this error message
dave at revlob dot com 14-Feb-2008 02:07
@Jarl

Not sure if this is what you meant when you said "The constructor example clearly shows that version and encoding only end up in the XML header", but you can also affect other parameters in the generated XML header, by accessing the DOMDocument's properties, for example:

<?php

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->xmlStandalone = false;
echo $dom->saveXML();

// <?xml version="1.0" encoding="UTF-8" standalone="no"?>
bholbrook at servillian dot com 05-Dec-2007 02:25
Make sure that php_domxml.dll on windows is removed before using the domdocument class as they cannot coexist.
jarl kringelding skim punt com 24-Sep-2007 02:22
Be aware using the encoding parameter in the constructor.
It does not mean that all data is automatically encoded for you in the supplied encoding. You need to do that yourself once you choose an encoding other than the default UTF-8. See the note on DOM Functions on how to properly work with other encodings...

The constructor example clearly shows that version and encoding only end up in the XML header.


新しい属性を作成する

  • ≪ DOMDocument::__construct
  • DOMDocument::createAttributeNS ≫
  • PHP Manual
  • DOMDocument
  • 新しい属性を作成する

DOMDocument::createAttribute

(PHP 5, PHP 7, PHP 8)

DOMDocument::createAttribute — 新しい属性を作成する

説明

public DOMDocument::createAttribute(string $localName): DOMAttr|false

この関数は、DOMAttr クラスの新しいインスタンスを作成します。 このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

localName

属性の名前。

戻り値

新しい DOMAttr、あるいはエラーが発生した場合は false を返します。

エラー / 例外

DOM_INVALID_CHARACTER_ERR

localName が無効な文字を含んでいる場合に発生します。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

Skateside 05-Apr-2013 04:16
This may be obvious to most people, but it gave me a few minutes of head-scratching before I figured it out, but ampersands need to be properly escaped as HTML entities.

<?php
$doc= new DOMDocument('1.0', "UTF-8");

$invalid_elem = $doc->createElement('field', 'incorrect attribute');
$invalid_attr = $doc->createAttribute('name');
$invalid_attr->value = 'foo&bar';
$invalid_elem->appendChild($invalid_attr);
$doc->appendChild($invalid_elem);

$valid_elem = $doc->createElement('field', 'correct attribute');
$valid_attr = $doc->createAttribute('name');
$valid_attr->value = 'foo&amp;bar';
$valid_elem->appendChild($valid_attr);
$doc->appendChild($valid_elem);

?>

Will output:
<?xml version="1.0" encoding="UTF-8"?>
<field name="foo">incorrect attribute</field>
<field name="foo&bar">correct attribute</field>

As near as I can figure out, no exception is thrown for an invalid attribute. This will affect DOMDocuments created as HTML as well as XML.
Beerkeeper 09-Nov-2011 07:19
Just in case it isn't clear (like I had), an example:

<?php

$domDocument = new DOMDocument('1.0', "UTF-8");
$domElement = $domDocument->createElement('field','some random data');
$domAttribute = $domDocument->createAttribute('name');

// Value for the created attribute
$domAttribute->value = 'attributevalue';

// Don't forget to append it to the element
$domElement->appendChild($domAttribute);

// Append it to the document itself
$domDocument->appendChild($domElement);

?>

Will output:
<?xml version="1.0" encoding="UTF-8"?>
<field name="attributevalue">some random data</field>


関連付けられた名前空間に新しい属性を作成する

  • ≪ DOMDocument::createAttribute
  • DOMDocument::createCDATASection ≫
  • PHP Manual
  • DOMDocument
  • 関連付けられた名前空間に新しい属性を作成する

DOMDocument::createAttributeNS

(PHP 5, PHP 7, PHP 8)

DOMDocument::createAttributeNS — 関連付けられた名前空間に新しい属性を作成する

説明

public DOMDocument::createAttributeNS(?string $namespace, string $qualifiedName): DOMAttr|false

この関数は、DOMAttr クラスの新しいインスタンスを作成します。 このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

namespace

名前空間の URI。

qualifiedName

属性のタグ名とプレフィックスを、prefix:tagname のような形式で指定する。

戻り値

新しい DOMAttr、あるいはエラーが発生した場合は false を返します。

エラー / 例外

DOM_INVALID_CHARACTER_ERR

qualifiedName が無効な文字を含んでいる場合に発生します。

DOM_NAMESPACE_ERR

qualifiedName が不正な形式である場合、あるいは qualifiedName がプレフィックスを含んでいる にもかかわらず namespace が null である場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | prefix を指定せずにこのメソッドをコールしても、デフォルトの名前空間を仮定する代わりに prefix を選ぶようになりました。これより前のバージョンでは、prefix なしの属性を作成し、誤ってオーナーとなる要素の名前空間を適用していました。なぜなら、デフォルトの名前空間は属性には適用されないためです。
8.3.0 | オーナーとなる要素で prefix が既に異なる namespace URI で使われている場合にこのメソッドを呼び出しても、名前空間の衝突を避けるために新しく prefix を異なるものに変更するようになりました。これは DOM の仕様が要求する振る舞いに合わせるためです。これより前のバージョンでは、エラーコード DOM_NAMESPACE_ERR を持つ DOMException をスローしていました。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

_ michael 01-Jun-2010 07:35
If a new namespace is introduced while creating and inserting an attribute, createAttributeNS() does not behave in the same way as createElementNS().

(1) Location: With createAttributeNS(), the new namespace is declared at the level of the document element. By contrast, createElementNS() declares the new namespace at the level of the affected element itself.

(2) Timing: With createAttributeNS(), the new namespace is declared in the document as soon as the attribute is created - the attribute does not actually have to be inserted. createElementNS() doesn't affect the document as long as the element is not inserted.

An example:

<?php

    $source = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<root><tag></tag></root>
XML;

    /*

     I. createAttributeNS:
     * a new namespace shows up immediately, even without insertion of the attribute
     * the new namespace is declared at the level of the document element

    */

    $doc = new DOMDocument( '1.0' );
    $doc->loadXML( $source );

    // (1) We just create a "namespace'd" attribute without appending it to any element.
    $attr_ns = $doc->createAttributeNS( '{namespace_uri_here}', 'example:attr' );

    print $doc->saveXML() . "\n";

    /*
      Result: The namespace declaration appears, having been added to the document element. Output:

      <?xml version="1.0" encoding="UTF-8"?>
      <root xmlns:example="{namespace_uri_here}"><tag/></root>

    */

    // (2) Next, we give the attribute a value and insert it.
    $attr_ns->value = 'value';
    $doc->getElementsByTagName( 'tag' )->item(0)->appendChild( $attr_ns );

    print $doc->saveXML() . "\n";

    /*
      Result: The "namespace'd" attribute shows up as well. Output:

      <?xml version="1.0" encoding="UTF-8"?>
      <root xmlns:example="{namespace_uri_here}"><tag example:attr="value"/></root>

    */

    /*

     II. createElementNS:
     * a new namespace shows up only when the element is inserted
     * the new namespace is declared at the level of the inserted element

    */

    $doc = new DOMDocument( '1.0' );
    $doc->loadXML( $source );

    // (1) We create a "namespace'd" element without inserting it into the document.
    $elem_ns = $doc->createElementNS( '{namespace_uri_here}', 'example:newtag' );

    print $doc->saveXML() . "\n";

    /*
      Result: The document remains unchanged. Output:

      <?xml version="1.0" encoding="UTF-8"?>
      <root><tag/></root>

    */

    // (2) Next, we insert the new element.
    $doc->getElementsByTagName( 'tag' )->item(0)->appendChild( $elem_ns );

    print $doc->saveXML() . "\n";

    /*
      Result: The namespace declaration appears, and it is embedded in the element using it. Output:

      <?xml version="1.0" encoding="UTF-8"?>
      <root><tag><example:newtag xmlns:example="{namespace_uri_here}"/></tag></root>

    */

?>


新しい cdata ノードを作成する

  • ≪ DOMDocument::createAttributeNS
  • DOMDocument::createComment ≫
  • PHP Manual
  • DOMDocument
  • 新しい cdata ノードを作成する

DOMDocument::createCDATASection

(PHP 5, PHP 7, PHP 8)

DOMDocument::createCDATASection — 新しい cdata ノードを作成する

説明

public DOMDocument::createCDATASection(string $data): DOMCdataSection|false

この関数は、DOMCDATASection クラスの新しいインスタンスを作成します。このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

data

cdata の内容。

戻り値

新しい DOMCDATASection、あるいはエラーが発生した場合は false を返します。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

Marc info[at]braincast.nl 08-Mar-2011 01:55
Here's some code that takes an associative array and prints it asXML() but creates CDATA sections for each string

<?php
class SimpleXMLExtended extends SimpleXMLElement{
    public function addCData($string){
        $dom = dom_import_simplexml($this);
        $cdata = $dom->ownerDocument->createCDATASection($string);
        $dom->appendChild($cdata);
    }
}
function assocArrayToXML($root_element_name,$ar){
    $xml = new SimpleXMLExtended("<?xml version=\"1.0\"?><{$root_element_name}></{$root_element_name}>");
    $f = create_function('$f,$c,$a','
            foreach($a as $k=>$v) {
                if(is_array($v)) {
                    if (!is_numeric($k))$ch=$c->addChild($k);
                    else $ch = $c->addChild(substr($c->getName(),0,-1));
                    $f($f,$ch,$v);
                } else {
                    if (is_numeric($v)){ $c->addChild($k, $v);
                    }else{$n = $c->addChild($k); $n->addCData($v);}
                }
            }');
    $f($f,$xml,$ar);
    return $xml->asXML();
}

/* sample */
$result = array("title"=>"CDATA Sample");
$result['items'] = array();
$result['items'][] = array('title'=>'Some string', 'number' => 1);
$result['items'][] = array('title'=>'Some string', 'number' => 2);
$result['items'][] = array('title'=>'Some string', 'number' => 3);

echo assocArrayToXML('result',$result);
?>

The is_numeric check could be changed by a more elaborate regular expression to check if the string is actually xml unsafe but this worked for me.
jesdisciple dot FOO at gmail dot BAR dot com 08-Jul-2010 04:44
If you would like to refer to the documentation for the class of the returned object, see http://www.php.net/manual/en/class.domcharacterdata.php
info at troptoek dot com 24-Mar-2008 09:40
A common issue seems to be adding javascript to CDATA and the browser throwing a javascript error. To ensure the javascript works use the following code when adding CDATA:

<?php
/**
 * Append Caracter Data to a node and check for a javascript node
 *
 * @param DOMElement $appendToNode
 * @param string $text
 */
function appendCdata($appendToNode, $text)
{
    if (strtolower($appendToNode->nodeName) == 'script') {  // Javascript hack
        $cm = $appendToNode->ownerDocument->createTextNode("\n//");
        $ct = $appendToNode->ownerDocument->createCDATASection("\n" . $text . "\n//");
        $appendToNode->appendChild($cm);
        $appendToNode->appendChild($ct);
    } else {  // Normal CDATA node
        $ct = $appendToNode->ownerDocument->createCDATASection($text);
        $appendToNode->appendChild($ct);
    }
}
?>
The result should be:

<script type="text/javascript">
//<![CDATA[
function someJsText() {
   document.write('Some js with <a href="#">HTML</a> content');
}
//]]></script>
loathsome 04-Aug-2007 02:28
Here's a function that will create a CDATA-section around a string coming from SimpleXML.

<?php
function sxml_cdata($path, $string){
  $dom = dom_import_simplexml($path);
  $cdata = $dom->ownerDocument->createCDATASection($string);
  $dom->appendChild($cdata);
}
?>


新しい comment ノードを作成する

  • ≪ DOMDocument::createCDATASection
  • DOMDocument::createDocumentFragment ≫
  • PHP Manual
  • DOMDocument
  • 新しい comment ノードを作成する

DOMDocument::createComment

(PHP 5, PHP 7, PHP 8)

DOMDocument::createComment — 新しい comment ノードを作成する

説明

public DOMDocument::createComment(string $data): DOMComment

この関数は、DOMComment クラスの新しいインスタンスを作成します。このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

data

コメントの内容。

戻り値

新しい DOMComment を返します。

変更履歴

バージョン | 説明
8.1.0 | エラーが発生した場合に、 DomException をスローするようになりました。 これより前のバージョンでは、false を返していました。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

php dot sirlancelot at spamgourmet dot com 25-Nov-2009 12:10
To prevent a parser error when the comment string would contain the character sequence "--", do this:

<?php

$CommentString = 'This contains -- some weird -- characters.';

$CommentNode = $DomDocument->createComment(
        str_replace('--', '-'.chr(194).chr(173).'-', $CommentString)
);
?>

This will insert a Soft Hyphen in between the two hyphens which will not cause the parser to error out.
capps at solareclipse dot net 29-Mar-2007 03:55
Use caution: this function does NOT escape, encode, or otherwise change the contents of the string.

This means that if your string contains two hyphens in a row (--), that will *end* the comment, which can easily create invalid XML when the document is serialized.


新しい文書片を作成する

  • ≪ DOMDocument::createComment
  • DOMDocument::createElement ≫
  • PHP Manual
  • DOMDocument
  • 新しい文書片を作成する

DOMDocument::createDocumentFragment

(PHP 5, PHP 7, PHP 8)

DOMDocument::createDocumentFragment — 新しい文書片を作成する

説明

public DOMDocument::createDocumentFragment(): DOMDocumentFragment

この関数は、DOMDocumentFragment クラスの新しいインスタンスを作成します。このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

この関数にはパラメータはありません。

戻り値

新しい DOMDocumentFragment を返します。

変更履歴

バージョン | 説明
8.1.0 | エラーが発生した場合に、 DomException をスローするようになりました。 これより前のバージョンでは、false を返していました。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

info at ensostudio dot ru 14-Dec-2021 07:37
You can use fragments to set inner HTML:
<?php
$dom = new DOMImplementation();
$document = $dom->createDocument(null, 'html', $dom->createDocumentType('html'));

$div = $document->appendChild($document->createElement('div', '<small>test</small> me'));
echo $document->saveHTML($div);
// <div>&lt;small&gt;test&lt;/small&gt; me</div>

$div = $document->appendChild($document->createElement('div'));
$div->nodeValue = '<small>test</small> me';
echo $document->saveHTML($div);
// <div>&lt;small&gt;test&lt;/small&gt; me</div>

$div = $document->appendChild($document->createElement('div'));
$divInner = $document->createDocumentFragment();
$divInner->appendXML('<small>test</small> me');
$div->appendChild($divInner);
echo $document->saveHTML($div);
// <div><small>test</small> me</div>

?>


新しい要素ノードを作成する

  • ≪ DOMDocument::createDocumentFragment
  • DOMDocument::createElementNS ≫
  • PHP Manual
  • DOMDocument
  • 新しい要素ノードを作成する

DOMDocument::createElement

(PHP 5, PHP 7, PHP 8)

DOMDocument::createElement — 新しい要素ノードを作成する

説明

public DOMDocument::createElement(string $localName, string $value = ""): DOMElement|false

この関数は、DOMElement クラスの新しいインスタンスを作成します。 このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

localName

要素のタグ名。

value

要素の値。デフォルトでは、空の要素が作成されます。 その後に DOMElement::$nodeValue で値を設定することも可能です。

指定した値はすべてそのまま用いますが、エンティティ参照 < と > だけはエスケープします。& は手動でエスケープする必要があることに注意しましょう。 そうしないと、エンティティ参照の開始とみなされてしまいます。また、" はエスケープされません。

戻り値

新しい DOMElement クラスの新しいインスタンス、 あるいはエラーが発生した場合は false を返します。

エラー / 例外

DOM_INVALID_CHARACTER_ERR

localName が無効な文字を含んでいる場合に発生します。

例

例1 新しい要素を作成し、ルートとして挿入する

<?php

$dom = new DOMDocument('1.0', 'utf-8');

$element = $dom->createElement('test', 'This is the root element!');

// 新しい要素をルート (ドキュメントの子要素) として挿入する
$dom->appendChild($element);

echo $dom->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="utf-8"?>
<test>This is the root element!</test>

例2 & をエスケープせずに value に渡す例

<?php
$dom = new DOMDocument('1.0', 'utf-8');
$element = $dom->createElement('foo', 'me & you');
$dom->appendChild($element);
echo $dom->saveXML();
?>

上の例の出力は、 たとえば以下のようになります。

Warning: DOMDocument::createElement(): unterminated entity reference             you in /in/BjTCg on line 4
<?xml version="1.0" encoding="utf-8"?>
<foo/>

注意

注意:

value は エスケープされません。 エスケープに対応した テキストノードを作るには DOMDocument::createTextNode() を使います。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

dignat at yahoo dot com 15-Nov-2017 10:25
To create an element with DomDocument and to escape ampersand in the value.

Do this:

$element = new DOMDocument('1.0', 'UTF-8');

$test = $element->createElement('text');

$test ->appendChild($element->createElement('name'))
      ->appendChild($element->createtextNode('& I am ampersand');
tschmieder at bitworks dot de 24-Mar-2015 05:42
Remember:

If you want to perform multiple actions with a new node, you may need to create a copy of it before

means:
## Create an address to an unique memory block !
$td = $dom->createElement('td');
## Change some things in this original unique pattern
$td->setAttribute('class', 'saldo');

## clone the unique pattern to two own one's
$td1 = clone $td;
$td2 = clone $td;

## alter properties in each one
$td1->nodeValue = 'Ich bin die erste neue Node';
$td2->nodeValue = 'Ich bin die zweite neue Node';

## find the parent element
$tr = $dom->getElementById('t001-tr001');
## find the first and the last child (here only for clearity)
$first = $tr->firstChild;
$last = $tr->lastChild;

## produce the new nodes
$newtd1 = $tr->insertBefore($td1, $first);
$newtd2 = $tr->appendChild($td2);

conclusion:
YOU NEED AN ORIGINAL NEW NODE FOR EACH ACTION!
funkathustra 04-Mar-2012 08:44
Although the built-in DOM functions are great, since they're designed to support generic XML, generating HTML DOMs becomes particularly verbose. I ended up writing this function to drastically speed things up.
Instead of calling something like
<?php
  $div = $dom->createElement("div");
  $div->setAttribute("class","MyClass");
  $div->setAttribute("id","MyID");
  $someOtherDiv->appendChild($div);
?>
you can accomplish the same thing with:
<?php
  $div = newElement("div", $someOtherDiv, "class=MyClass;id=MyID");
?>
The "key1=value;key2=value" syntax is really fast to use, but obviously doesn't hold up if your content has those characters in it. So, you can also pass it an array:
<?php
  $div = newElement("div", $someOtherDiv, array("class","MyClass"));
?>
Or an array of arrays, representing different attributes:
<?php
  $div = newElement("form", $someOtherDiv, array(array("method","get"), array("action","/refer/?id=5");
?>

Here's the function:

<?php
function newElement($type, $insertInto = NULL, $params=NULL, $content="")
    {
        $tempEl =  $this->dom->createElement($type, $content);
        if(gettype($params) == "string" && strlen($params) > 0)
        {
            $attributesCollection =split(";", $params);
            foreach($attributesCollection  as $attribute)
            {
                $keyvalue = split("=", $attribute);
                $tempEl->setAttribute($keyvalue[0], $keyvalue[1]);
            }
        }
        if(gettype($params) == "array")
        {
            if(gettype($params[0]) == "array")
            {
                foreach($params as $attribute)
                {
                    $tempEl->setAttribute($attribute[0], $attribute[1]);
                }
            } else {
                $tempEl->setAttribute($params[0], $params[1]);
            }
        }
?>
lars dot c dot magnusson at gmail dot com 26-Nov-2010 01:56
You may think insertBefore and insertAfter is a direct alternative for appendChild, this is not the case.

<?php
$dom = new DOMDocument();
$dom->load($file);

$dom->appendChild($newNode); //Works fine
$dom->insertBefore($newNode, $refNode); //Will fail

$refNode->parentNode->insertBefore($newNode, $refNode); // thanx to yasindagli (first post)
?>
yasindagli at gmail dot com 17-Jun-2009 02:01
To create elements with attributes,

<?php

function createElement($domObj, $tag_name, $value = NULL, $attributes = NULL)
{
    $element = ($value != NULL ) ? $domObj->createElement($tag_name, $value) : $domObj->createElement($tag_name);

    if( $attributes != NULL )
    {
        foreach ($attributes as $attr=>$val)
        {
            $element->setAttribute($attr, $val);
        }
    }

    return $element;
}

$dom = new DOMDocument('1.0', 'utf-8');

$elm = createElement($dom, 'foo', 'bar', array('attr_name'=>'attr_value'));

$dom->appendChild($elm);

echo $dom->saveXML();

?>

outputs :
<?xml version="1.0" encoding="utf-8"?>
<foo attr_name="attr_value">bar</foo>
chris AT cmbuckley DOT co DOT uk 26-May-2009 07:45
Note that the NUL character "\0" is not in the list of invalid characters for $name, so no error is triggered, but the tag name will be truncated at the null byte:

<?php

$dom = new DOMDocument('1.0', 'utf-8');
$el = $dom->createElement('foo' . "\0" . 'bar', 'Hello World');
echo $el->tagName; // outputs "foo"

?>
estill at gvtc dot com 12-Jun-2007 02:38
Note that the second parameter (value), although convenient, is non-standard. You should create elements like this instead:

<?php
$doc = new DOMDocument('1.0', 'iso-8859-1');

$root = $doc->createElement('test');
$doc->appendChild($root);

$root_text = $doc->createTextNode('This is the root element!');
$root->appendChild($root_text);

print $doc->saveXML();
?>

Or, alternatively, extend the DOMDocument class and add your own custom, convenience method to avoid intruding on the standard:

<?php
class CustomDOMDocument extends DOMDocument {
  function createElementWithText($name, $child_text) {
    // Creates an element with a child text node

    // @param  string  $name        element tag name
    // @param  string  $child_text  child node text

    // @return  object  new element

    $element = $this->createElement($name);

    $element_text = $this->createTextNode($child_text);
    $element->appendChild($element_text);

    return $element;
  }
}

$doc = new CustomDOMDocument('1.0', 'iso-8859-1');

$root = $doc->createElementWithText('test', 'This is the root element!');
$doc->appendChild($root);

print $doc->saveXML();
?>

Also use caution with (or avoid) the 'DOMElement->nodeValue' property. It can return some unexpected values and changing its value will replace (remove) all descendants of the element with a single text node. It's also non-standard; according to the DOM spec it should return NULL.
mikek dot nospam at nospam dot muonics dot com 03-Mar-2007 05:24
With regard to the note below about needing htmlentities to avoid warnings about unterminated entity references, I thought it worthwhile to mention that that you don't need to with createTextNode and DOMText::__construct.  If you mix both methods of setting text nodes and do (or don't) apply htmlentities consistently to all data to be displayed, you'll get &amp;s (or warnings and badly-formed xml).

It's probably in one's best interest to extend DOMElement and DOMDocument so that it creates a DOMText node and appends it, rather than passing it up to the DOMElement constructor.  Otherwise, good luck using (or not using) htmlentities in all the right places in your code, especially as code changes get made.

<?php

class XDOMElement extends DOMElement {
    function __construct($name, $value = null, $namespaceURI = null) {
        parent::__construct($name, null, $namespaceURI);
    }
}

class XDOMDocument extends DOMDocument {
    function __construct($version = null, $encoding = null) {
        parent::__construct($version, $encoding);
        $this->registerNodeClass('DOMElement', 'XDOMElement');
    }

    function createElement($name, $value = null, $namespaceURI = null) {
        $element = new XDOMElement($name, $value, $namespaceURI);
        $element = $this->importNode($element);
        if (!empty($value)) {
            $element->appendChild(new DOMText($value));
        }
        return $element;
    }
}

$doc1 = new XDOMDocument();
$doc1_e1 = $doc1->createElement('foo', 'bar & baz');
$doc1->appendChild($doc1_e1);
echo $doc1->saveXML();

$doc2 = new XDOMDocument();
$doc2_e1 = $doc2->createElement('foo');
$doc2->appendChild($doc2_e1);
$doc2_e1->appendChild($doc2->createTextNode('bar & baz'));
echo $doc2->saveXML();

?>

Text specified in createElement:
<?xml version=""?>
<foo>bar &amp; baz</foo>

Text added via createTextNode:
<?xml version=""?>
<foo>bar &amp; baz</foo>
sergsokolenko at gmail dot com 30-Jan-2007 04:11
To avoid warning message "unterminated entity reference" you may use htmlentities() for escaping supplied value:
<?php
//...
$dom->createElement('name', htmlentities($text))
//...
?>


関連付けられた名前空間に新しい要素を作成する

  • ≪ DOMDocument::createElement
  • DOMDocument::createEntityReference ≫
  • PHP Manual
  • DOMDocument
  • 関連付けられた名前空間に新しい要素を作成する

DOMDocument::createElementNS

(PHP 5, PHP 7, PHP 8)

DOMDocument::createElementNS — 関連付けられた名前空間に新しい要素を作成する

説明

public DOMDocument::createElementNS(?string $namespace, string $qualifiedName, string $value = ""): DOMElement|false

この関数は、関連付けられた名前空間に新しい要素を作成します。 このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

namespace

名前空間の URI。

qualifiedName

要素名を、prefix:tagname のような形式で指定する。

value

要素の値。デフォルトでは、空の要素が作成されます。 その後に DOMElement::$nodeValue で値を設定することも可能です。

戻り値

新しい DOMElement、 あるいはエラーが発生した場合には false を返します。

エラー / 例外

DOM_INVALID_CHARACTER_ERR

qualifiedName が無効な文字を含んでいる場合に発生します。

DOM_NAMESPACE_ERR

qualifiedName が無効な名前である場合に発生します。

例

例1 新しい要素を作成し、ルートとして挿入する

<?php

$dom = new DOMDocument('1.0', 'utf-8');

$element = $dom->createElementNS('http://www.example.com/XFoo', 'xfoo:test', 'This is the root element!');

// 新しい要素をルート (ドキュメントの子要素) として挿入する
$dom->appendChild($element);

echo $dom->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="iso-8859-1"?>
<xfoo:test xmlns:xfoo="http://www.example.com/XFoo">This is the root element!</xfoo:test>

例2 名前空間プレフィックスの例

<?php
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$root = $doc->createElementNS('http://www.w3.org/2005/Atom', 'element');
$doc->appendChild($root);
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:g', 'http://base.google.com/ns/1.0');
$item = $doc->createElementNS('http://base.google.com/ns/1.0', 'g:item_type', 'house');
$root->appendChild($item);

echo $doc->saveXML(), "\n";

echo $item->namespaceURI, "\n"; // 出力: http://base.google.com/ns/1.0
echo $item->prefix, "\n"; // 出力: g
echo $item->localName, "\n"; // 出力: item_type
?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="utf-8"?>
<element xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
  <g:item_type>house</g:item_type>
</element>

http://base.google.com/ns/1.0
g
item_type

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

Martin 27-Dec-2011 09:39
To avoid multiple xmlns re-declaration, make sure you appending ElementNS into actual DOMDocument tree (not into some currently-assembed derelict element).


新しいエンティティ参照ノードを作成する

  • ≪ DOMDocument::createElementNS
  • DOMDocument::createProcessingInstruction ≫
  • PHP Manual
  • DOMDocument
  • 新しいエンティティ参照ノードを作成する

DOMDocument::createEntityReference

(PHP 5, PHP 7, PHP 8)

DOMDocument::createEntityReference — 新しいエンティティ参照ノードを作成する

説明

public DOMDocument::createEntityReference(string $name): DOMEntityReference|false

この関数は、DOMEntityReference クラスの新しいインスタンスを作成します。このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

name

エンティティ参照の内容、つまり、エンティティ参照から 先頭の & および末尾の ; を取り除いたもの。

戻り値

新しい DOMEntityReference、 あるいはエラーが発生した場合には false を返します。

エラー / 例外

DOM_INVALID_CHARACTER_ERR

name が無効な文字を含んでいる場合に発生します。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

alicewonder at shastaherps dot org 24-Sep-2015 07:48
It appears that this does not work with numbered entities, only named entities.

$nbspace = $dom->createEntityReference('nbsp');

works

$nbspace = $dom->createEntityReference('#160');

does not. This makes this function rather useless when generating an XSL unless you modify the XSL doctype to include the named entity for the character you want.
Tuhin Bepari 04-Nov-2013 06:00
<?php
/*Entity is a group of words which print a special symbol.
Like if we want to show copy right symbol in html page then we use &copy; code and browser convert this to actual copyright symbol.
There have lots of entity, you can find them all form http://dev.w3.org/html5/html-author/charref
if you want to use < or > or both <> into a node value than xml will give and warning or make this value as a node.
So tell the xml parser that < or > is not tag symbol it is a entity.To do that you have to right &lt(<) and &gt;(>) instead of < and > symbol.

Entity references always begin with an ampersand (&) and end with a semicolon (;).
DO not need to use & and ; symbol begin and end of entity.Remove it when you want to use it to DOMDocument::createEntityReference
Then append to to a tag where you want to show this symbol.Like below
*/
$dom=new DOMDocument("1.0","UTF-8");
$example=$dom->createElement("example","This is copyright ");
$entity=$dom->createEntityReference("copy");
$example->appendChild($entity);
$dom->appendChild($example);
echo $dom->saveXML();

output is
This is copyright ©


新しい PI ノードを作成する

  • ≪ DOMDocument::createEntityReference
  • DOMDocument::createTextNode ≫
  • PHP Manual
  • DOMDocument
  • 新しい PI ノードを作成する

DOMDocument::createProcessingInstruction

(PHP 5, PHP 7, PHP 8)

DOMDocument::createProcessingInstruction — 新しい PI ノードを作成する

説明

public DOMDocument::createProcessingInstruction(string $target, string $data = ""): DOMProcessingInstruction|false

この関数は、DOMProcessingInstruction クラスの新しいインスタンスを作成します。このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

target

処理命令の対象。

data

処理命令の内容。

戻り値

新しい DOMProcessingInstruction、 あるいはエラーが発生した場合には false を返します。

エラー / 例外

DOM_INVALID_CHARACTER_ERR

target が無効な文字を含んでいる場合に発生します。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

romain at supinfo dot com 03-Feb-2009 11:57
A use exemple of this method :

Usefull for generating an XML linked with a XSLT !

<?php

// "Create" the document.
$xml = new DOMDocument( "1.0", "ISO-8859-15" );

//to have indented output, not just a line
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;

// ------------- Interresting part here ------------

//creating an xslt adding processing line
$xslt = $xml->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="base.xsl"');

//adding it to the xml
$xml->appendChild($xslt);

// ----------- / Interresting part here -------------

//adding some elements
$root = $xml->createElement("list");
$node = $xml->createElement("contact", "John Doe");
$root-> appendChild($node);
$xml-> appendChild($root);

//creating the file
$xml-> save("output.xml");

?>

output.xml :

<?xml version="1.0" encoding="ISO-8859-15"?>
<?xml-stylesheet type="text/xsl" href="base.xsl"?> //the line has been created successfully
<list>
  <contact>John Doe</contact>
</list>


新しいテキストノードを作成する

  • ≪ DOMDocument::createProcessingInstruction
  • DOMDocument::getElementById ≫
  • PHP Manual
  • DOMDocument
  • 新しいテキストノードを作成する

DOMDocument::createTextNode

(PHP 5, PHP 7, PHP 8)

DOMDocument::createTextNode — 新しいテキストノードを作成する

説明

public DOMDocument::createTextNode(string $data): DOMText

この関数は、DOMText クラスの新しいインスタンスを作成します。このノードは、( DOMNode::appendChild() などで) 挿入されない限り、ドキュメント内にあらわれません。

パラメータ

data

テキストの内容。

戻り値

新しい DOMText を返します。

変更履歴

バージョン | 説明
8.1.0 | エラーが発生した場合に、 DomException をスローするようになりました。 これより前のバージョンでは、false を返していました。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMDocument::createAttribute() - 新しい属性を作成する
  • DOMDocument::createAttributeNS() - 関連付けられた名前空間に新しい属性を作成する
  • DOMDocument::createCDATASection() - 新しい cdata ノードを作成する
  • DOMDocument::createComment() - 新しい comment ノードを作成する
  • DOMDocument::createDocumentFragment() - 新しい文書片を作成する
  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する
  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する
  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する

User Contributed Notes

drewish at katherinehouse dot com 16-Dec-2014 10:03
The docs don't mention it but this method performs escaping on the value. If you don't want that use createElement() instead.
Alex Kaye 25-Jul-2009 07:04
A quick note to anyone who is using character entities (e.g. &copy;) in this, and finding them automatically escaped. The correct thing to do here is to use the createEntityReference method (e.g. createEntityReference("copy");), and then appendChild this entity between text nodes.

Example:

<?php
$copyright_text_1 = $this->document->createTextNode("Copyright ");
$copyright_text_2 = $this->document->createTextNode(" Alex Kaye 2009");
$copyright_symbol = $this->document->createEntityReference("copy");
$copyright->appendChild($copyright_text_1);
$copyright->appendChild($copyright_symbol);
$copyright->appendChild($copyright_text_2);
?>


id に対応する要素を検索する

  • ≪ DOMDocument::createTextNode
  • DOMDocument::getElementsByTagName ≫
  • PHP Manual
  • DOMDocument
  • id に対応する要素を検索する

DOMDocument::getElementById

(PHP 5, PHP 7, PHP 8)

DOMDocument::getElementById — id に対応する要素を検索する

説明

public DOMDocument::getElementById(string $elementId): ?DOMElement

この関数は、 DOMDocument::getElementsByTagName と同じですが、指定した ID から要素を検索する点が違います。

この関数を動作させるには、何らかの ID 属性を DOMElement::setIdAttribute で設定するか、あるいは DTD で ID 型の属性を定義する必要があります。 後者の場合は、 DOMDocument::validate あるいは DOMDocument::$validateOnParse を使用してドキュメントを検証する必要があります。

パラメータ

elementId

要素の ID。

戻り値

DOMElement、 あるいは要素が見つからなかった場合は null を返します。

例

例1 DOMDocument::getElementById() の例

次の例では、以下のような内容の book.xml を使います。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
  <!ELEMENT books   (book+)>
  <!ELEMENT book    (title, author+, xhtml:blurb?)>
  <!ELEMENT title   (#PCDATA)>
  <!ELEMENT blurb   (#PCDATA)>
  <!ELEMENT author  (#PCDATA)>
  <!ATTLIST books   xmlns        CDATA  #IMPLIED>
  <!ATTLIST books   xmlns:xhtml  CDATA  #IMPLIED>
  <!ATTLIST book    id           ID     #IMPLIED>
  <!ATTLIST author  email        CDATA  #IMPLIED>
]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<books xmlns="http://books.php/" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <book id="php-basics">
    <title>PHP Basics</title>
    <author email="jim.smith@basics.php">Jim Smith</author>
    <author email="jane.smith@basics.php">Jane Smith</author>
    <xhtml:blurb><![CDATA[
<p><em>PHP Basics</em> provides an introduction to PHP.</p>
]]></xhtml:blurb>
  </book>
  <book id="php-advanced">
    <title>PHP Advanced Programming</title>
    <author email="jon.doe@advanced.php">Jon Doe</author>
  </book>
</books>
<?php

$doc = new DomDocument;

// ID を参照する前に、ドキュメントを検証する必要があります
$doc->validateOnParse = true;
$doc->Load('book.xml');

echo "ID が 'php-basics' の要素は " . $doc->getElementById('php-basics')->tagName . " です。\n";

?>

上の例の出力は以下となります。

ID が 'php-basics' の要素は book です。

参考

  • DOMDocument::getElementsByTagName() - 指定したローカルタグ名に対応するすべての要素を検索する

User Contributed Notes

Hoi 07-Jul-2020 10:39
To set a hidden id that can be used by $dom->getElementById() apply setAttribute('id', true) as in the following example

                    $createItemNode = function ($data) use ($dom) {
                        $node = $dom->createElement("Item");
                        $node->setAttribute('id', $data->id);
                        $node->setAttribute('hed', $data->hed);
                        $node->setAttribute('run_time', $data->run_time);
                        $node->setAttribute('date', $data->date);

                        // Internally mark the id as 'xml:id' for getElementById to work. Adding xml:id manually to the tag will cause loadXML to throw an error DOMDocument: xml:id is not a NCName in Entity
                        $node->setIdAttribute('id', true);

                        return $node;
                    };

With $node->setIdAttribute('id', true), $dom->getElementById($id) will work

When you do $dom->saveXML(), the final doc will not contain any xml:id attribute.
ed at edgiardina dot com 13-Oct-2010 11:41
Please note that if your HTML does not contain a doctype declaration, then getElementById will always return null.
paradox_haze at live dot de 02-Mar-2010 10:53
Had some issues with getElementById() while searching for a specific element in a XHTML document.
I wrote a small function what was solving my problem:

<?php
function getElementById($id)
{
    $xpath = new DOMXPath($this->domDocument);
    return $xpath->query("//*[@id='$id']")->item(0);
}
?>
carl2088 at gmail dot com 11-Apr-2009 12:41
From my experience, getElementById seem to work fine without any setups if you have loaded a HTML document. But in order for getElementById to work with a simple XML document that you've "constructed", you have to set up the id with "xml:" prefix and use setIdAttribute on the element you created or it won't work. See following example, hope this will save someone's frustration. If you have loaded the xml file, then all you have to make sure is the ID has a xml: prefix for the attribute.  But if you start to append the XML document, don't forget to setIdAttribute on the id name or those elements or getElementById will return null when you try to find them.

<?php

    /* test.xml
    <?xml version="1.0" encoding="utf-8"?>
    <root>
        <child xml:id="id_xxxxxx" status="partial">
            <sub_child>Some Data</sub_child>
        </child>
    </root>
    */

    $xmlDom = new DOMDocument('1.0', 'utf-8');
    $xmlDom->formatOutput = true;                        // we want a nice output

    // create a root
    $eltRoot = $xmlDom->createElement("root");
    $xmlDom->appendChild($eltRoot);

    $eltChild = $xmlDom->createElement("child");
    $eltRoot->appendChild($eltChild);

    // add a id attribute
    $attr = $xmlDom->createAttribute("xml:id");    // needs xml prefix or getElementById won't work
    $eltChild->appendChild($attr);

    /// create the text node and append to the created element
    $tNode = $xmlDom->createTextNode("id_8120528");
    $attr->appendChild($tNode);
    $eltChild->setIdAttribute("xml:id", true);    // VERY IMPORT or getElementById won't work

    // add a id attribute
    $attr = $xmlDom->createAttribute("status");
    $eltChild->appendChild($attr);

    /// create the text node and append to the created element
    $tNode = $xmlDom->createTextNode("partial");
    $attr->appendChild($tNode);

    // add a subchild
    $eltSub = $xmlDom->createElement("sub_child");
    $eltChild->appendChild($eltSub);

    $tNode = $xmlDom->createTextNode("Some Data");
    $eltSub->appendChild($tNode);

    $id = null;
    $id = $xmlDom->getElementById("id_8120528");

    assert ($id != null);

    $strId = $id->getAttribute("xml:id"); // bug? empty
    $strStatus = $id->getAttribute("status"); // this works!

    assert ($id !=null);

    $xmlDom->save("./_data/test.xml");

    $xmlDom->load("./_data/test.xml"); // reloading fixes the problem

    $nodeRoot = $xmlDom->getElementsByTagName("root");
    if ($nodeRoot->length > 0) {
        $eltRoot = $nodeRoot->item(0);
    }

    assert($eltRoot != null);

    $id = null;
    $id = $xmlDom->getElementById("id_8120528");

    assert ($id != null);

    $strId = $id->getAttribute("xml:id"); // this works now!
    $strStatus = $id->getAttribute("status"); // this works!

?>
guillaume dot crico at gmail dot com 01-Oct-2008 07:55
You don't want to use "xml:id" ?
Here is the relaxNG trick (with a generic schema):
(tested with libxml 2.6.26)

<?php
$doc = new DOMDocument();
$doc->load(...);

$rng = '
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <start>
        <element>
            <anyName/>
            <ref name="anythingID"/>
        </element>
    </start>
    <define name="anythingID">
        <zeroOrMore>
            <choice>
                <element>
                    <anyName/>
                    <ref name="anythingID"/>
                </element>
                <attribute name="id">
                    <data type="ID"/>
                </attribute>
                <zeroOrMore>
                    <attribute><anyName/></attribute>
                </zeroOrMore>
                <text/>
            </choice>
        </zeroOrMore>
    </define>
</grammar>
';

$doc->relaxNGValidateSource($rng);
var_dump($doc->getElementById('id1'));
?>

Note that ID values must be valid ones :
  - integers do no work!
  - @see http://www.w3.org/TR/REC-xml/#id
  - => (Letter | '_' | ':') ( Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender  )*
simon at somewhere dot com 29-Jan-2007 08:07
SAVE YOURSELF A MAJOR HEADACHE AND A LOT OF SEARCHING THROUGH DOCUMENTATION -

Instead of using $object->setAttribute('id', 'id_name_here')
USE THIS: $object->setAttribute('xml:id', 'id_name_here')

Then, to get the node value: $domDocumentObject->getElementById('id_name_here');

The xml:id attribute should AUTOMATICALLY be defined!!

Woohoo!  That was easy......
jonbarnett at gmail dot com 01-Nov-2006 08:36
If your XML document does not have a DTD that defines the "id" attribute as an ID, then the easiest thing to do is to use XPath->query() to find an element that matches "//[@id='x']"
Tangui dot Le-Pense at laposte dot net 08-Apr-2006 06:00
Validating a document from a DTD so as to use getElementById is sometimes impossible (for example when the head and body elements are not included yet in a XHtml document : the validation failed).
Fortunately, xml:id is supported by this function :)
That may be useful.
http://www.w3.org/TR/xml-id/
20-Dec-2005 07:04
If you're trying to use getElementById with a xml file validated on a xsd file you must first use the schemaValidate function or getElementById will return null
Example:

  $dom = new DomDocument();
  $dom->load("users.xml");
  $dom->schemaValidate("users.xsd");

  $curruser = $dom->getElementById($user->name);
bart at mediawave dot nl 11-Sep-2005 04:46
It seems getElementById works fine without setting validateOnParse to true. Which is nice since setting this to true caused some performance problems with my script.


指定したローカルタグ名に対応するすべての要素を検索する

  • ≪ DOMDocument::getElementById
  • DOMDocument::getElementsByTagNameNS ≫
  • PHP Manual
  • DOMDocument
  • 指定したローカルタグ名に対応するすべての要素を検索する

DOMDocument::getElementsByTagName

(PHP 5, PHP 7, PHP 8)

DOMDocument::getElementsByTagName — 指定したローカルタグ名に対応するすべての要素を検索する

説明

public DOMDocument::getElementsByTagName(string $qualifiedName): DOMNodeList

この関数は、指定したローカルタグ名のすべての要素を含む DOMNodeList クラスの新しいインスタンスを返します。

パラメータ

qualifiedName

タグのローカル名 (名前空間を除いたもの) に一致する名前。* はすべてのタグに一致します。

戻り値

一致するすべての要素を含む、新しい DOMNodeList オブジェクトを返します。

例

例1 基本的な使用例

<?php
$xml = <<< XML
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>Patterns of Enterprise Application Architecture</book>
<book>Design Patterns: Elements of Reusable Software Design</book>
<book>Clean Code</book>
</books>
XML;

$dom = new DOMDocument;
$dom->loadXML($xml);
$books = $dom->getElementsByTagName('book');
foreach ($books as $book) {
echo $book->nodeValue, PHP_EOL;
}
?>

上の例の出力は以下となります。

Patterns of Enterprise Application Architecture
Design Patterns: Elements of Reusable Software Design
Clean Code

参考

  • DOMDocument::getElementsByTagNameNS() - 指定した名前空間で、タグ名に対応するすべての要素を検索する

User Contributed Notes

Mateusz K 19-Dec-2019 08:04
If you want to move all nodes to another tag you can do it like that
Eg: replace <div> with nodes to <p> with the same nodes.

function replaceDomElementTag(DOMDocument $dom, DOMElement $node, string $tagName)
{
        $newElement = $dom->createElement($tagName);
        while ($node->childNodes->length)
            $newElement->appendChild($node->childNodes[0]);

        $node->parentNode->replaceChild($newElement, $node);
}

$dom = new DOMDocument();
replaceDomElementTag($dom, $divElementToReplace, 'p');
rsvvuuren at hotmail dot com 10-Jan-2014 10:00
I was in need of $dom->getElementsByTagName that would hist magic within a contextNode.

Why i needed getElementsByTagName instead of just simple using an xPath->query is because while looping through the returned nodelist, more nodes with the tagName i was looking for where created.

When using getElementsByTagName, the new nodes are "added" to the nodelist i already am looping through.

When using an xpath query, you wil only loop through the original nodelist, the newly created elements wil not appear in that nodelist.

I was already using an extended class on domDocument, so it was simple to create an kind of getElementsByTagName that would accept an contextNode.

<?php
class SmartDocument extends DOMDocument {
    private $localDom;
    public $xpath;
    private $serialize = array('localDom');

    private $elemName;
    private $elemCounter;

    /**
     * Constructor
     */
    function __construct() {
        parent::__construct ( '1.0', 'UTF-8' );
        $this->preserveWhiteSpace = false;
        $this->recover = TRUE;
        $this->xpath = new DOMXpath ( $this );
    }

    /**
     * GetElementsByTagname within an contextNode
     *
     * @param string $name
     * @param DomNode $contextNode
     * @return DOMNode|NULL
     */
    public function getElementsByTagNameContext($name, $contextNode) {

        if($this->elemName!=$name) {
            $this->elemCounter     = 0;
            $this->elemName        =$name;
        }

        $this->elemLength      = $this->xpath->evaluate('count(.//*[name()="'.$this->elemName.'"])', $contextNode);
        while($this->elemCounter < $this->elemLength) {
            $this->elemCounter++;
            $nl = $this->xpath->query('.//*[name()="'.$this->elemName.'"]['.$this->elemCounter.']', $contextNode);
            if($nl->length == 1) {
                return $nl->item(0);
            }
        }

        $this->elemLength      = null;
        $this->elemCounter     = null;
        $this->elemName        = null;
        return null;
    }
}

?>

Usage:

<?php

 $doc = new SmartDocument();
 $doc->load('book.xml');

 $nl = $doc->query('//books');
 foreach($nl as $node) {
  while($book = $doc->getElementsByTagNameContext('book', $node)) {
   //When you now create new nodes within this loop as child or following-sibling of this node
  // They show up within this loop
  }

 }

?>
simon at onepointltd dot com 10-Sep-2013 07:54
Here is a function to convert the populated tables in and HTML document into an array.

<?php
//Create an array containing all the populated tables in an HTML page
//Returned array: tables_to_array[table number][row number][column number]
function tables_to_array ($url) {
  $htmlDocDom = new DOMDocument();

  @$htmlDocDom->loadHTMLFile($url);
  $htmlDocDom->preserveWhiteSpace = false;
  $tableCounter = 0;
  $htmlDocTableArray = array();
  $htmlDocTables = $htmlDocDom->getElementsByTagName('table');
  foreach ($htmlDocTables as $htmlDocTable) {
    $htmlDocTableArray[$tableCounter] = array();
    $htmlDocRows= $htmlDocTable->getElementsByTagName('tr');
    $htmlDocRowCount = 0;
    $htmlDocTableArray[$tableCounter] = array();
    foreach ($htmlDocRows as $htmlDocRow) {
      if (strlen($htmlDocRow->nodeValue) > 1)
      {
        $htmlDocColCount = 0;
        $htmlDocTableArray[$tableCounter][$htmlDocRowCount] = array();
        $htmlDocCols = $htmlDocRow->getElementsByTagName('td');
        foreach ($htmlDocCols as $htmlDocCol) {
          $htmlDocTableArray[$tableCounter][$htmlDocRowCount][] = $htmlDocCol->nodeValue;
          $htmlDocColCount++;
        }
        $htmlDocRowCount++;
      }
    }
    if ($htmlDocRowCount > 1) $tableCounter++;
  }
  return($htmlDocTableArray);
}
?>
yaakov dot moddel at gmail dot com 28-Aug-2012 10:47
This is a very simplistic way to traverse xml nodes and childnodes using the DOMDocument class

<?php
$xml ='<?xml version="1.0" encoding="utf-8"?>
<root>
    <Parent>
        <child>child 1</child>
        <child>child 2</child>
        <child>child 3</child>
        <subParent>
            <Grandchild>Grandchild 1</Grandchild>
            <Grandchild>Grandchild 2</Grandchild>
            <Grandchild>Grandchild 3</Grandchild>
        </subParent>
    </Parent>
    <Parent>
        <child>child 4</child>
        <child>child 5</child>
        <child>child 6</child>
        <subParent>
            <Grandchild>Grandchild 4</Grandchild>
            <Grandchild>Grandchild 5</Grandchild>
            <Grandchild>Grandchild 6</Grandchild>
        </subParent>
    </Parent>
</root>';
      $doc = new DOMDocument();
      $doc->preserveWhiteSpace = false;
      $doc->loadXML($xml);
      $i=0;
            while(is_object($finance = $doc->getElementsByTagName("Parent")->item($i)))
            {
                     foreach($finance->childNodes as $nodename)
                     {
                             if($nodename->nodeName=='subParent')
                                {
                                     foreach($nodename->childNodes as $subNodes)
                                     {
                                     echo $subNodes->nodeName." - ".$subNodes->nodeValue."<br>";
                                     }
                                }
                             else
                                {
                                echo $nodename->nodeName." - ".$nodename->nodeValue."<br>";
                                }
                     }
      $i++;
            }
?>
metron at underhive-planet dot com 08-Oct-2010 05:28
My first try to get a stable solution with this function, failed with this Exception:

"Fatal error: Call to undefined method DOMNodeList::getElementsByTagName()"
This is the xml snipplet:
<?xml version="1.0" encoding="UTF-8"?>
<root>
 <component>
  <properties>
    ....<any element>
  </properties>
 </component>
</root>

So the php code to climb along the elements is:
<?php

$src = new DOMDocument('1.0', 'utf-8');
$src->formatOutput = true;
$src->preserveWhiteSpace = false;

//Loading extern file
$src->load('../xml/Item_component.xml');

//Check each child of first indexed branch node of: <component>
//First get element after root element: <component>

//1st level
$component = $src->getElementsByTagName('component')->item(0);

//2nd level, get next element after component, here it fails!!
$properties = $component->getElementsByTagName('properties')->item(0);
...
?>

I realised, that there is a different when using different libxml2 versions on Apache2. This code will fail with libxml2 version 2.6.23 and PHP version 5.2.6
--
->It works fine with libxml2 version 2.6.32 and PHP version 5.2.6-3ubuntu4.6
->...and finally it also works with libxml2 2.7.7 and PHP >= 5.3

So if you bored to search for solutions with DOM like I did, please ensure that your www environment has the correct libxml2 / PHP Version installed on your apache2 server.
calvin at g mail 02-Oct-2010 04:41
My first post!
And this is how I get elements by attribute and its value.
For an example, if I want to grab all DIV tags with class name 'className', then...

<?php
$some_link = 'some website';
$tagName = 'div';
$attrName = 'class';
$attrValue = 'className';

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
@$dom->loadHTMLFile($some_link);

$html = getTags( $dom, $tagName, $attrName, $attrValue );
echo $html;

function getTags( $dom, $tagName, $attrName, $attrValue ){
    $html = '';
    $domxpath = new DOMXPath($dom);
    $newDom = new DOMDocument;
    $newDom->formatOutput = true;

    $filtered = $domxpath->query("//$tagName" . '[@' . $attrName . "='$attrValue']");
    // $filtered =  $domxpath->query('//div[@class="className"]');
    // '//' when you don't know 'absolute' path

    // since above returns DomNodeList Object
    // I use following routine to convert it to string(html); copied it from someone's post in this site. Thank you.
    $i = 0;
    while( $myItem = $filtered->item($i++) ){
        $node = $newDom->importNode( $myItem, true );    // import node
        $newDom->appendChild($node);                    // append node
    }
    $html = $newDom->saveHTML();
    return $html;
}

?>

Please, improve it, and share it.
Philip N 01-Sep-2010 03:17
Note that when using getElementsByTagName that it is a dynamic list. Thus if you have code which adjusts the DOM structure it will change the results of the getElementsByTagName results list.

The following code iterates through a complete set of results and changes them all to a new tag:

<?php
 $nodes = $xml->getElementsByTagName ("oldtag");

 $nodeListLength = $nodes->length; // this value will also change
 for ($i = 0; $i < $nodeListLength; $i ++)
 {
    $node = $nodes->item(0);

    // some code to change the tag name from "oldtag" to something else
    // e.g. encrypting a tag element
 }
?>

Since the list is dynamically updating, $nodes->item(0) is the next "unchanged" tag.
Marco Maranao 27-Apr-2010 10:22
The following takes a list of news items from an XML file (or an RSS feed), assigning it to an array first for a name value pair and then generating an HTML list.

<?php

$xml  =<<<EOT
<?xml version="1.0" encoding="ISO-8859-1"?>
<news>
    <item>
        <title>News 1</title>
        <created>04/2/2010 08:00 EST</created>
        <url>http://news.example.com/news.pdf</url>
    </item>
    <item>
        <title>News 2</title>
        <created>04/25/2010 08:00 EST</created>
        <url>http://news.example.com/news.pdf</url>
    </item>
    <item>
        <title>News 3</title>
        <created>04/27/2010 08:00 EST</created>
        <url>http://news.example.com/news.pdf</url>
    </item>
</news>
EOT;

$doc = new DOMDocument();

if ($doc->loadXML($xml)) {
    $items = $doc->getElementsByTagName('item');
    $headlines = array();

    foreach($items as $item) {
        $headline = array();

        if($item->childNodes->length) {
            foreach($item->childNodes as $i) {
                $headline[$i->nodeName] = $i->nodeValue;
            }
        }

        $headlines[] = $headline;
    }

    if(!empty($headlines)) {
        $hc = 0;

        echo '<ul>';

        foreach($headlines as $headline) {
            if(++$hc <= 3) {
                echo '<li>'
                    .'<a href="'.$headline['url'].'" target="_blank">'
                        .'<span>'.date('F j, Y', strtotime($headline['created'])).'</span><br />'
                        .$headline['title']
                    .'</a>'
                .'</li>';
            }
        }

        echo '</ul>';
    }
}

?>
james 01-Feb-2010 07:03
Problem:
You have an XML document that contains filename references to, say, images. Each filename reference is defined by <file>filename.ext</file> tag. You'd like to perform perform additional validation, say, after running the XML document through XSD validation. The additional validation can be any of your choice, in this example, it would be ideal to convert the PHP code to a function. The function would then determine if the images exist and return either an integer value or a boolean.

<?xml version="1.0"?>
<root>
<box>
<file>example.png</file>
</box>
<content>
<item>
<image><file>example2.png</file></image>
<caption>The above image is an example</caption>
</item>
</content>
</root>

Solution:
<?php

$dom = new DomDocument();
$dom->prevservWhiteSpace = false;

if (!@$dom->load("example.xml")) {
    echo "example.xml doesn't exist!\n";
    return;
}

$imageList = $dom->getElementsByTagName('file');
$imageCnt  = $imageList->length;

for ($idx = 0; $idx < $imageCnt; $idx++) {
    print $imageList->item($idx)->nodeValue . "\n";
}

?>

The above PHP code could easily be turned into a function that returns an array of image filenames, an integer value relative to the number of images found, etc.

Hope this is helpful.
gurmukh24 at gmail dot com 03-Mar-2009 04:06
Following Example is of multiple attributes and multiple child nodes. this is being used to make joomla plugin for bulk upload of articles. Gurmukh Singh Bhatti

<?php
$xml =<<<EOT
<?xml version="1.0"?>
<root>
<section name="Section1">
  <category id="Category1" name="google">
   <arti name="article1">
   <p>any html code here</p>
   <b>my name is so so</b>
    </arti>
   <arti name="article2">value2</arti>
   <arti name="article3">value3</arti>
   <arti name="article4">value4</arti>
  </category>
    <category id="Category2" name="yahoo">
   <arti name="articleSection2">Test value</arti>
  </category>
</section>
<section name="Section2">
  <category id="category1_of_section2" name="msn">
   <arti name="article2">value1</arti>
   <arti name="article3">value2</arti>
  </category>
    <category id="Category2_of_section2" name="webcare">
    <arti name="param3">value4</arti>
   </category>
</section>
</root>
EOT;

$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($xml);
$params = $dom->getElementsByTagName('section'); // Find Sections
$k=0;
foreach ($params as $param) //go to each section 1 by 1
{
         echo "Section Attribute :-> ".$params->item($k)->getAttribute('name')."<br>";   //get section attribute
         $params2 = $params->item($k)->getElementsByTagName('category'); //digg categories with in Section
      $i=0; // values is used to iterate categories
        foreach ($params2 as $p) {
           echo "&nbsp;&nbsp;- Category Attribute Name :-> ".$params2->item($i)->getAttribute('name')."<br>"; //get Category attributes
            $params3 = $params2->item($i)->getElementsByTagName('arti'); //dig Arti into Categories
                 $j=0;//values used to interate Arti
                     foreach ($params3 as $p2)
                   {
                    echo "&nbsp;&nbsp;&nbsp;- Article Attribute Name : ".$params3->item($j)->getAttribute('name').""; //get arti atributes
echo "&nbsp;&nbsp; Value : ".$params3->item($j)->nodeValue."<br>"; //get Node value ;
                              $j++;
                   }
         $i++;
      }
$k++;

}
?>

output :
 Section Attribute :-> Section1
  - Category Attribute Name :-> google
            - Article Attribute Name : article1   Value : any html code heremy name is so so
            - Article Attribute Name : article2   Value : value2
            - Article Attribute Name : article3   Value : value3
            - Article Attribute Name : article4   Value : value4
  - Category Attribute Name :-> yahoo
            - Article Attribute Name : articleSection2   Value : Test value
Section Attribute :-> Section2
  - Category Attribute Name :-> msn
            - Article Attribute Name : article2   Value : value1
            - Article Attribute Name : article3   Value : value2
  - Category Attribute Name :-> webcare
            - Article Attribute Name : param3   Value : value4
James L 19-Aug-2008 04:04
Return if there are no matches is an empty DOMNodeList. Check using length property, e.g.:

<?php
$nodes=$domDocument->getElementsByTagName('book') ;
if ($nodes->length==0) {
   // no results
}
?>
jason at shaped dot ca 11-Feb-2008 04:59
in response to tildy at pr dot hu

my preferred way is (in example to gather country data from an iso 3166 xml flie)

$countries = new DOMDocument();
$countries->load("./lib/iso_3166.xml");

$countriesList = $countries->getElementsByTagName("ISO_3166-1_Entry");

foreach($countriesList as $country) {
    $values = $country->getElementsByTagName("*");
    foreach($values as $node) {
      echo $node->nodeName."=".$node->nodeValue;
    }
}
Finding values of a node 14-Mar-2007 02:01
I don't know if this is that obvious but it was not for me, so in addition to gem at rellim dot com's posting:
adding

<?php
echo $param -> nodeValue.'<br>';
?>

to the loop will output
value1
value2
value3
gem at rellim dot com 29-Sep-2004 04:20
Here is an example of getElementsByTagName():

<?php
$xml =<<<EOT
<?xml version="1.0"?>
<config>
  <section id="section1">
   <param name="param1">value1</param>
   <param name="param2">value2</param>
  </section>
  <section id="section2">
   <param name="param3">value3</param>
  </section>
</config>
EOT;

$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($xml);
$params = $dom->getElementsByTagName('param');

foreach ($params as $param) {
       echo $param -> getAttribute('name').'<br>';
}
?>

Expected result:
--------------
param1
param2
param3


指定した名前空間で、タグ名に対応するすべての要素を検索する

  • ≪ DOMDocument::getElementsByTagName
  • DOMDocument::importNode ≫
  • PHP Manual
  • DOMDocument
  • 指定した名前空間で、タグ名に対応するすべての要素を検索する

DOMDocument::getElementsByTagNameNS

(PHP 5, PHP 7, PHP 8)

DOMDocument::getElementsByTagNameNS — 指定した名前空間で、タグ名に対応するすべての要素を検索する

説明

public DOMDocument::getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList

指定したローカル名および名前空間 URI に一致するすべての要素の DOMNodeList を返します。

パラメータ

namespace

条件に一致する要素の名前空間 URI。 "*" はすべての名前空間に一致します。 null を渡すと、空の名前空間に一致します。

localName

条件に一致する要素のローカル名。 "*" はすべてのローカル名に一致します。

戻り値

一致するすべての要素を含む、新しい DOMNodeList オブジェクトを返します。

変更履歴

バージョン | 説明
8.0.3 | namespace は、nullable になりました。

例

例1 すべての XInclude 要素を取得する

<?php

$xml = <<<EOD
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Books of the other guy..</title>
<para>
<xi:include href="book.xml">
<xi:fallback>
<error>xinclude: book.xml not found</error>
</xi:fallback>
</xi:include>
<include>
This is another namespace
</include>
</para>
</chapter>
EOD;
$dom = new DOMDocument;

// 上で定義した XML 文字列を読み込みます
$dom->loadXML($xml);

foreach ($dom->getElementsByTagNameNS('http://www.w3.org/2001/XInclude', '*') as $element) {
echo 'local name: ', $element->localName, ', prefix: ', $element->prefix, "\n";
}
?>

上の例の出力は以下となります。

local name: include, prefix: xi
local name: fallback, prefix: xi

参考

  • DOMDocument::getElementsByTagName() - 指定したローカルタグ名に対応するすべての要素を検索する

User Contributed Notes

RiKdnUA at mail dot ru 19-Mar-2015 07:47
<?php
ini_set("display_errors","on"); error_reporting(-1);
$doc="<?xml version='1.0' encoding='WINDOWS-1251'?>
<htm:body xmlns:htm='w3.org'>
<span>Text</span>
<htm:img htm:src='imgSrc'/>
</htm:body>";
$dom = new DOMDocument('1.0','WINDOWS-1251');
$dom->preserveWhiteSpace=false;
$dom->loadXML($doc);
$domList=$dom->getElementsByTagNameNS('*','*');//all namespaces, all local names
echo "Количество элементов. The number of elements: ".$domList->length."<br />";// 2 (not 3)
for ($i=0; $i<$domList->length; $i++)
{echo "Элемент $i. The element $i: ".$domList->item($i)->tagName."<br />";
}
/*
Tested in PHP 5.2.9-2 and 5.2.17
The above example will output:
Количество элементов. The number of elements: 2
Элемент 0. The element 0: htm:body
Элемент 1. The element 1: htm:img

Вывод. Не найден элемент span
Conclusion. Not found span element
*/
?>


現在のドキュメントにノードをインポートする

  • ≪ DOMDocument::getElementsByTagNameNS
  • DOMDocument::load ≫
  • PHP Manual
  • DOMDocument
  • 現在のドキュメントにノードをインポートする

DOMDocument::importNode

(PHP 5, PHP 7, PHP 8)

DOMDocument::importNode — 現在のドキュメントにノードをインポートする

説明

public DOMDocument::importNode(DOMNode $node, bool $deep = false): DOMNode|false

この関数は、インポートするノードのコピーを返し、 それを現在のドキュメントに関連付けます。

パラメータ

node

インポートするノード。

deep

true の場合、このメソッドは node 以下のサブツリーも再帰的にインポートします。

注意:

ノードの属性をコピーするには deep を true に設定しなければなりません。

戻り値

コピーされたノードを返します。 コピーできなかった場合は false を返します。

エラー / 例外

ノードがインポートできなかった場合には DOMException がスローされます。

例

例1 DOMDocument::importNode() の例

ノードをドキュメント間でコピーします。

<?php

$orgdoc = new DOMDocument;
$orgdoc->loadXML("<root><element><child>text in child</child></element></root>");

// 新しいドキュメントにインポートしたいノード
$node = $orgdoc->getElementsByTagName("element")->item(0);

// 新しいドキュメントを作成します
$newdoc = new DOMDocument;
$newdoc->formatOutput = true;

// マークアップを追加します
$newdoc->loadXML("<root><someelement>text in some element</someelement></root>");

echo "The 'new document' before copying nodes into it:\n";
echo $newdoc->saveXML();

// ノードとそのすべての子をドキュメントにインポートします
$node = $newdoc->importNode($node, true);
// それから、それを "<root>" ノードに追加します
$newdoc->documentElement->appendChild($node);

echo "\nThe 'new document' after copying the nodes into it:\n";
echo $newdoc->saveXML();
?>

上の例の出力は以下となります。

The 'new document' before copying nodes into it:
<?xml version="1.0"?>
<root>
  <someelement>text in some element</someelement>
</root>

The 'new document' after copying the nodes into it:
<?xml version="1.0"?>
<root>
  <someelement>text in some element</someelement>
  <element>
    <child>text in child</child>
  </element>
</root>

User Contributed Notes

rikdnua at mail dot ru 11-Sep-2013 01:54
The behavior of importNode($node, false) is different in PHP 5.2.9-2 and PHP 5.2.17.
The second option is explicitly set to false. In PHP 5.2.9-2 importNode() imports the elements WITHOUT attributes. In PHP 5.2.17 the elements imported ALONG with their attributes.
<?php
$xml="
<html>
<a href='yandex.com'>Yandex.com</a>
<a href='rik.dn.ua'>RiK.dn.ua</a>
</html>
";
$doc=new domDocument('1.0');
$doc->loadXML($xml);
$list=$doc->getElementsByTagName('a');
$doc1=new domDocument('1.0');
$doc1->formatOutput=true;
for($i=0; $i<$list->length; $i++) $doc1->appendChild($doc1->importNode($list->item($i), false));
$doc1->save('file.xml');
?>

file.xml PHP 5.2.9-2
<?xml version="1.0"?>
<a/>
<a/>

file.xml PHP 5.2.17
<?xml version="1.0"?>
<a href="yandex.com"/>
<a href="rik.dn.ua"/>
c dot 1 at smithies dot org 19-Oct-2009 06:40
Assume that $source and $dest are instances of DOMDocument. Assume that $sourcedoc contains an element with ID 'sourceID' and that $destdoc contains an element with ID 'destID'. Assume that we have already set up source and destination element variables thus:

<?php
 $src = $sourcedoc->getElementById('sourceID');
 $dst = $destdoc->getElementById('destID');
?>

Finally, assume that $sel has more than one child node.

In order to import the child elements of $src as children of $dst, you might do something like this:

<?php
$src = $dest->importNode($src, TRUE);

foreach ($src->childNodes as $el) $dst->appendChild($el);
?>

But this does not work. foreach gets confused, because (as noted below) appending an imported element to another existing element in the same document causes it to be removed from its current parent element.

Therefore, the following technique should be used:

<?php
foreach ($src->childNodes as $el) $dst->appendChild($destdoc->importNode($el, TRUE));
?>
p dot reisinger at gmail dot com 29-Dec-2008 03:43
When you use function/method below, php automaticaly inserts namespaces (if you have some). If you want to join xml files exactly, then you can just use placeholders and treat xml as a string.
<?php
function joinXMLStrings($file1, $file2)
{
    //remove xml declaration
    $file2 = trim(preg_replace('/<\?xml.*\?>/', '', $file2, 1));

    //insert file2 in the place of placeholder in the first file
    $file1 = trim(preg_replace('/<\?file2\s\?>/', $file2, $file1, 1));
}
?>

so function looks like this and you insert two xml files. First file has to have placeholder (where you insert file2). Placeholder in this case will be <?file2 ?>

!!!this is only for ilustration - test before you use it
p dot reisinger at gmail dot com 23-Dec-2008 07:32
method (can be used as a function as well) that joins two xml files. first argument is parent xml (the one to be inserted into), second child (the one to be inserted) and third is optional argument that specifies the parent's tag where to insert children xml. If not specified then children is inserted as the last element, just before end of the root
<?php
    protected function joinXML($parent, $child, $tag = null)
    {
        $DOMChild = new DOMDocument;
        $DOMChild->loadXML($child);
        $node = $DOMChild->documentElement;

        $DOMParent = new DOMDocument;
        $DOMParent->formatOutput = true;
        $DOMParent->loadXML($parent);

        $node = $DOMParent->importNode($node, true);

        if ($tag !== null) {
            $tag = $DOMParent->getElementsByTagName($tag)->item(0);
            $tag->appendChild($node);
        } else {
            $DOMParent->documentElement->appendChild($node);
        }

        return $DOMParent->saveXML();
    }
?>
mailme at sove dot nl 11-Jun-2008 05:29
DOMDocument->importNode with seconds argument false will leave attributes behind. To fix this:

$__DOM->importNode
   (
      $__INPUT->cloneNode(false), true
   );

$__DOM (DOMDocument) will import the $__INPUT node (DOMElement) INCLUDING attributes.
mark at 4inloop dot de 05-Apr-2007 05:51
When you left out the second argument or enter false, not only the child nodes are ommited. The attributes of the node are also cut off.
adjwilli 05-Oct-2006 01:08
Editing XML with PHP can be a pain in the Secretary of State Powell, so here's a script to replace an XML node with a user-provided one through the POST. It's usually a good idea to run the $_POST['xml'] through a validation check and clean it for other thing before running this.

Pretty much this script expects a user-provided node called $_POST['xml'] and the XPath of the node in the original document that you want to replace called $_POST['XPath']. It also loads the original XML document from $xml. The function nodeRunner begins with the root node of the document you're editting and the XPath for the root element (these are more to make recursion easy than anything else).

$doc = new DOMDocument();
$doc->loadXML($xml); // $xml expects an XML string

function nodeRunner ($node,$xpath) {
    global $doc;
    if ($xpath == $_POST['XPath']) {

        $xmlPost = new DOMDocument();
        $xmlPost->loadXML($_POST['xml']);

        $newNode = $doc->importNode($xmlPost->firstChild,true);

        $node->parentNode->replaceChild($newNode,$node);
    } else {

        $page = 1;
        $section = 1;

        if ($node->hasChildNodes()) {
            foreach ($node->childNodes as $nodling) {
                $nodeName = $nodling->nodeName;
                if ($nodeName == 'page' || $nodeName == 'section') {
                    nodeRunner ($nodling,$xpath."/".$nodeName."[".$$nodeName."]");
                    $$nodeName++;
                }
            }
        }
    }
}

nodeRunner ($doc->documentElement,"/root[1]"); // /root should be explicit name of the root  element of the XPath

$doc->saveXML();
stomas 19-Sep-2006 06:14
I think this should do the same:

<?
 // Import $b into $a's document
 function myimport($a, $b)
 {
   if ($a->ownerDocument->isSameNode($b->ownerDocument))
   {
    return $b->cloneNode(TRUE);
   }
   else
   {
    return $a->ownerDocument->importNode($b, TRUE);
   }
 }
 ?>
Colin 12-Sep-2006 09:11
As of PHP 5.1.6 with libxml 2.6.26 and DOM/XML API version 20031129, importNode() does nothing if attempting to import from the same document.  Meaning, if you do an $ret = importNode and then appendChild($ret) or insertBefore($ret, ...) then you will end up *moving* the node instead of ending up with a copy.

If you expect importNode to give you a copy of the source (in this case, a deep copy) then you must account for them being from the same document.  This function addresses this:

<?
// Import $b into $a's document
function myimport($a, $b)
{
  if ($a->ownerDocument->isSameNode($b->ownerDocument))
  {
    $temp = new DOMDocument();
    $ret = $temp->importNode($b, TRUE);
    return $a->ownerDocument->importNode($ret, TRUE);
  }
  else
  {
    return $a->ownerDocument->importNode($b, TRUE);
  }
}
?>

(Function was freshly coded for this note but I based it off another, working function of mine.)

This function checks if the documents are the same and uses a new document (guaranteed to be different this way) to force a copy into $temp and then force a copy back into $a->ownerDocument.

Obviously, no error checking has been done.
andy dot clark at dial dot pipex dot com 15-Aug-2006 08:20
One useful use of importNode is to copy one node onto another.

function CopyXMLNode($SourceNode,$DestNode)
 {
  if ($SourceNode->nodeName != '#text')
   {
     //Copy this node
    $node = $DestNode->ownerDocument->importNode($SourceNode, true);
    $node = $DestNode->appendChild($node);
    //Now copy the child nodes
    foreach ($SourceNode->childNodes AS $item)
     {
     $this->CopyXMLNode($item,$node);
     }
    }
  }
Fitopaldi 03-Aug-2005 11:29
importNode returns a copy of the node to import and associates it with the current document, but not import the node to the current DOMDocument. Use appendChild for import the copy of the node to current DOMDocument.

<?
 $domNode = $dom->importNode($aDomNode, true);
 $currentDomDocument->appendChild($domNode);
?>


ファイルから XML を読み込む

  • ≪ DOMDocument::importNode
  • DOMDocument::loadHTML ≫
  • PHP Manual
  • DOMDocument
  • ファイルから XML を読み込む

DOMDocument::load

(PHP 5, PHP 7, PHP 8)

DOMDocument::load — ファイルから XML を読み込む

説明

public DOMDocument::load(string $filename, int $options = 0): bool

XML ドキュメントをファイルから読み込みます。

警告

Unix 風のパス (スラッシュを使った方式) を Windows 上で使用すると、 パフォーマンスが著しく低下します。そんな場合は realpath() をコールしましょう。

パラメータ

filename

XML ドキュメントへのパス。

options

libxml オプション定数 を ビット OR で連結したもの。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

空の文字列を filename に渡したり中身が空のファイルを指定したりすると、警告が発生します。 この警告は libxml が発するものではないので、libxml のエラー処理関数では処理できません。

変更履歴

バージョン | 説明
8.3.0 | この関数の仮の戻り値の型が、bool になりました。
8.0.0 | この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

例

例1 ドキュメントの作成

<?php
$doc = new DOMDocument();
$doc->load('book.xml');
echo $doc->saveXML();
?>

参考

  • DOMDocument::loadXML() - 文字列から XML を読み込む
  • DOMDocument::save() - 内部の XML ツリーをファイルに出力する
  • DOMDocument::saveXML() - 内部の XML ツリーを文字列として出力する

User Contributed Notes

Raf-sns 11-Nov-2023 06:19
Be carreful with the option "preserveWhiteSpace"

$dom = new DOMDocument;
// false -> this preserve white spaces
// true -> this will put all entries inline
$dom->preserveWhiteSpace = false;  // preserve white space !
sainthyoga2003 at gmail dot com 09-Feb-2012 03:37
in the default example:

<?php
$doc = new DOMDocument();
$doc->load('book.xml');
echo $doc->saveXML();
?>

you must enter the absolute path for book.xml due for get a false result in load function.
sainthyoga2003 at gmail dot com 25-Feb-2011 05:38
i've found the partial solution for xml:id warning,is explained at this address: https://fosswiki.liip.ch/display/BLOG/GetElementById+Pitfalls

there explains that:
The ID does have to be a valid NCName, which for example means, that the first letter can't be a number.

and in my xml:id i had a number. :D
sainthyoga2003 at gmail dot com 16-Feb-2011 09:31
adding an id for a child, when i use abstract mode i get the following warning:

[quote]Warning: DOMDocument::load() [domdocument.load]: xml:id : attribute value xx is not an NCName in /fake/path/to/xmlfile[/quote]
_ michael 01-Jun-2010 08:34
load() will handle non-ASCII characters depending on the details of the XML declaration, but in a somewhat surprising way. One would assume that the declarations '<?xml version="1.0" encoding="UTF-8"?>' and '<?xml version="1.0"?>' are treated in the same way because UTF-8 is the default encoding anyway. But not so.

* If there is an XML declaration defining the encoding *explicitly*, the non-ASCII characters remain unchanged.
* If the XML declaration does not define the encoding explicitly, or if the XML declaration is missing, non-ASCII characters are converted into numeric entities.

So the document

    <?xml version="1.0"?>
    <root><nonascii>a</nonascii></root>

will be converted to

    <?xml version="1.0"?>
    <root><nonascii>&#xE4;</nonascii></root>

The same happens if there is no XML declaration at all. On the other hand, the document

    <?xml version="1.0" encoding="UTF-8"?>
    <root><nonascii>a</nonascii></root>

will remain as it is.

This behaviour applies to loadXML() as well.
_ michael 19-Apr-2010 07:50
XHTML and entities: The solution proposed below by zachatwork at gmail dot com didn't work for me. I checked on a number of servers (both LAMPP and WAMPP) - on each of them, calling loadXML() with the LIBXML_DTDLOAD option triggered an external request for the DTD. And that's bad news.

If allow_url_fopen is turned off, the request for the DTD fails with a warning. If it is turned on, the request fails because these w3c URLs return a 503 Service Unavailable.

HTML entities still generate a warning in either case.

The best solution, as far as I can tell, is simply to ignore the warnings and suppress them using '@'. I can't recommend parsing XHTML with loadHTML() instead of loadXML() - yes, you get rid of the entity problem, but loadHTML() changes the source while parsing it (tries to 'fix' it even though there is nothing to fix).
zachatwork at gmail dot com 30-Jun-2009 11:28
You can easily avoid the warning about &nbsp; references by using the LIBXML_DTDLOAD option.

<?php

$html = <<<EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  </head>
  <body>
    <p>&nbsp;</p>
  </body>
</html>
EOF;

// This one works perfectly.
$dom = new DOMDocument();
$dom->loadXML($html, LIBXML_DTDLOAD);
print $dom->saveXML();

// This one produces a warning.
$dom = new DOMDocument();
$dom->loadXML($html);
print $dom->saveXML();

?>

See also: http://www.php.net/manual/en/libxml.constants.php

Note that libxml will detect that your DTD is locally available via /etc/xml/catalog. So there is no worry about this causing your DOM loads to make external network requests.
Jonas Due Vesterheden 09-Jun-2009 08:18
I had a problem with loading documents over HTTP. I would get errors looking like this:

Warning: DOMDocument::load(http://external/document.xml): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error

The document would load fine in browsers and using wget. The problem is that DOMDocument::load() on my systems (both OS X and Linux) didn't send any User-Agent header which for some weird reason made Microsoft-IIS/6.0 respond with the 500 error.

The solution is found on http://php.net/manual/en/function.libxml-set-streams-context.php :

<?php
$opts = array(
    'http' => array(
        'user_agent' => 'PHP libxml agent',
    )
);

$context = stream_context_create($opts);
libxml_set_streams_context($context);

// request a file through HTTP
$doc = DOMDocument::load('http://www.example.com/file.xml');
?>
syntaxiko 04-Apr-2009 10:16
Function will not work if using XML DOM PECL module
darren at viamedia dot co dot za 05-Aug-2008 07:17
If you are loading xml with the intention of validating it against an internal dtd and you have experienced issues with the validation it could be related to missing LIBXML constants.

I found this post by "aidan at php dot net" in root level dom docs and thought it might be more useful here:
As of PHP 5.1, libxml options may be set using constants rather than the use of proprietary DomDocument properties.

DomDocument->resolveExternals is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDATTR

DomDocument->validateOnParse is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDVALID

PHP 5.1 users are encouraged to use the new constants.

Example:
<?php
$dom = new DOMDocument;
// Resolve externals
$dom->load($file, LIBXML_DTDLOAD|LIBXML_DTDATTR);
// OR
// Validate against DTD
$dom->load($file, LIBXML_DTDLOAD|LIBXML_DTDVALID);
$dom->validate();
?>
the_N_Channel 15-Jul-2008 04:53
NOTE, will not load successfully if there is a comment at the beginning of the file before the <?xml version="1.0" ?> declaration!
hh dot lohmann at yahoo dot de 30-Aug-2007 03:48
BadGuy´s note may be confusing since what he depicts is no special property of the relevant method. PHP works always in and on a local file system which means that if you want to use resources from other systems or - what is, indeed, BadGuy´s problem - need resources that have been dealt with by other programs or processes, you have to state and manage that explicitly in your code. PHP is just a quite normal program in that.

BadGuy´s solution is using the "http wrapper" to get output from another process (see "wrappers" in the PHP manual). Doing this, the appropriate syntax for http calls has to be respected.
admin at tijnema dot tijnema dot info 02-Jun-2007 04:39
In reply to BadGuy [at] BadGuy [dot] nl

When the news.php file is located on the same server, like you said in the first example then http://my.beautiful-website.com/xmlsource/news.php wouldn't work, but you should use http://localhost/xmlsource/news.php or http://127.0.0.1/xmlsource/news.php
BadGuy [at] BadGuy [dot] nl 18-Jan-2007 08:50
Note that this method uses the local file system before doing anything remote. The 'disadvantage' would be that if you would do the following:
<?php
$xml = new DOMDocument;
$xml->load("xmlsource/news.php");
?>

This would not make the method read the actual output of the news.php file --presumably valid xml data--, but the file contents --obviously this would be php code. So this will return an error saying news.php is missing the xml declaration and maybe the xml start-tag

What would work is the following:

<?php
$xml = new DOMDocument;
$xml->load("http://my.beautiful-website.com/xmlsource/news.php");
?>

This will force a http request to be used to get this file instead of just locally reading it and the file just returning code
daevid at daevid dot com 18-Oct-2005 05:08
Suppose you wanted to dynamically load an array from an .XSD file. This method is your guy. just remember to use the actual xs: portion in xpaths and such.

All the other "load" methods will error out.

<?php
$attributes = array();
$xsdstring = "/htdocs/api/xsd/common.xsd";
$XSDDOC = new DOMDocument();
$XSDDOC->preserveWhiteSpace = false;
if ($XSDDOC->load($xsdstring))
{
    $xsdpath = new DOMXPath($XSDDOC);
    $attributeNodes =
              $xsdpath->
              query('//xs:simpleType[@name="attributeType"]')
              ->item(0);
    foreach ($attributeNodes->childNodes as $attr)
    {
        $attributes[ $attr->getAttribute('value') ] = $attr->getAttribute('name');
    }
    unset($xsdpath);
}
print_r($attributes);
?>


文字列から HTML を読み込む

  • ≪ DOMDocument::load
  • DOMDocument::loadHTMLFile ≫
  • PHP Manual
  • DOMDocument
  • 文字列から HTML を読み込む

DOMDocument::loadHTML

(PHP 5, PHP 7, PHP 8)

DOMDocument::loadHTML — 文字列から HTML を読み込む

説明

public DOMDocument::loadHTML(string $source, int $options = 0): bool

この関数は、文字列 source に含まれる HTML を パースします。XML を読み込む場合とは異なり、妥当な HTML でなくても 読み込むことができます。

警告

この関数は、HTML4 のパーサを使って入力をパースします。モダンなWebブラウザが採用している HTML5 のパースルールとは異なります。入力によっては、このことが原因で異なるDOM構造になるかもしれません。よって、この関数はHTMLを無害化する目的で安全に使えません。

HTML をパースする挙動は、利用している libxml のバージョンに依存します。 特にエッジケースやエラーハンドリングについてそれが当てはまります。 HTML5 に準拠したパースを行うには、PHP 8.4 で追加される Dom\HTMLDocument::createFromString() や Dom\HTMLDocument::createFromFile() を使いましょう。

例を挙げましょう。HTML要素によっては、暗黙のうちに親の要素を閉じるものがあります。親要素を自動で閉じるルールは、HTML4 と HTML5 で異なります。よって、DOMDocument が表す DOM 構造は Webブラウザ上のそれと異なる可能性があります。このことから、攻撃者がHTMLを壊す攻撃を許す可能性があります。

パラメータ

source

HTML 文字列。

options

追加の Libxml パラメータ を、ビット演算子の OR で指定します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

空の文字列を source に渡すと、警告が発生します。 この警告は libxml が発するものではないので、libxml のエラー処理関数では処理できません。

壊れた HTML も読み込めますが、マークアップが正しくない場合には E_WARNING が発生します。 このエラーの処理には libxml のエラー処理関数 が使えます。

変更履歴

バージョン | 説明
8.3.0 | この関数の仮の戻り値の型が、bool になりました。
8.0.0 | この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

例

例1 ドキュメントを作成する

<?php
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br></body></html>");
echo $doc->saveHTML();
?>

参考

  • DOMDocument::loadHTMLFile() - ファイルから HTML を読み込む
  • DOMDocument::saveHTML() - 内部のドキュメントを HTML 形式の文字列として出力する
  • DOMDocument::saveHTMLFile() - 内部のドキュメントを HTML 形式でファイルに出力する

User Contributed Notes

Anonymous 19-May-2022 04:05
loadHTML() & loadHTMLFile() may always generate warnings if the html include some tags such as "nav, section, footer, etc" adopted as of HTML5 (in PHP 8.1.6).

Try to run below.

<?php

$file_name = 'PHP Runtime Configuration - Manual.html'; // Download this file from "https://www.php.net/manual/en/session.configuration.php" in advance.

$doc = new DOMDocument();
$doc->loadHTMLFile($file_name); // if set "LIBXML_NOERROR" as 2nd arg, no error
echo $doc->saveHTML();

// Warning: DOMDocument::loadHTMLFile(): Tag nav invalid in PHP Runtime Configuration - Manual.html, line: 63 in D:\xampp\htdocs\test\xml(dom)\loadHTML\index.php on line 6

?>
obayed dot opu at gmail dot com 10-Dec-2021 09:58
To support HTML5 you have to disable xml error handling by add `LIBXML_NOERROR` as an option of loadHTML method.

Example:

<?php
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br><section>I'M UNSUPPORTED</section></body></html>", LIBXML_NOERROR);
echo $doc->saveHTML();
?>
deepakrajpal dot com at gmail dot com 20-Nov-2020 06:16
If we are loading html5 tags such as <section>, <svg> there is following error:

DOMDocument::loadHTML(): Tag section invalid in Entity

We can disable standard libxml errors (and enable user error handling) using libxml_use_internal_errors(true); before loadHTML();

This is quite useful in phpunit custom assertions as given in following example (if using phpunit test cases):

// Create a DOMDocument
$dom = new DOMDocument();

// fix html5/svg errors
libxml_use_internal_errors(true);

// Load html
$dom->loadHTML("<section></section>");
$htmlNodes = $dom->getElementsByTagName('section');

if ($htmlNodes->length == 0) {
    $this->assertFalse(TRUE);
} else {
    $this->assertTrue(TRUE);
}
divinity76+spam at gmail dot com 14-Sep-2020 09:25
if you want to get rid of all the "DOMText elements containing ONLY whitespace", maybe try

<?php

function loadHTML_noemptywhitespace(string $html, int $extra_flags = 0, int $exclude_flags = 0): DOMDocument
{
    $flags = LIBXML_HTML_NODEFDTD | LIBXML_NOBLANKS | LIBXML_NONET;
    $flags = ($flags | $extra_flags) & ~ $exclude_flags;

    $domd = new DOMDocument();
    $domd->preserveWhiteSpace = false;
    @$domd->loadHTML('<?xml encoding="UTF-8">' . $html, $flags);
    $removeAnnoyingWhitespaceTextNodes = function (\DOMNode $node) use (&$removeAnnoyingWhitespaceTextNodes): void {
        if ($node->hasChildNodes()) {
            // Warning: it's important to do it backwards; if you do it forwards, the index for DOMNodeList might become invalidated;
            // that's why i don't use foreach() - don't change it (unless you know what you're doing, ofc)
            for ($i = $node->childNodes->length - 1; $i >= 0; --$i) {
                $removeAnnoyingWhitespaceTextNodes($node->childNodes->item($i));
            }
        }
        if ($node->nodeType === XML_TEXT_NODE && !$node->hasChildNodes() && !$node->hasAttributes() && empty(trim($node->textContent))) {
            //echo "Removing annoying POS";
            // var_dump($node);
            $node->parentNode->removeChild($node);
        } //elseif ($node instanceof DOMText) { echo "not removed"; var_dump($node, $node->hasChildNodes(), $node->hasAttributes(), trim($node->textContent)); }
    };
    $removeAnnoyingWhitespaceTextNodes($domd);
    return $domd;
}
BychkovVV at mail dot ru 03-Apr-2020 08:30
If you are loading html content from any website, in "utf-8" encoding, when meta width content-type is not first child of HEAD, it would not be acknowledged by parser (encoding); So you can make this fix:
  function domLoadHTML($html)
           {$testDOM = new DOMDocument('1.0', 'UTF-8');
            $testDOM->loadHTML($html);
            $charset = NULL;
            $searchInElemnt = function(&$item) use (&$searchInElemnt, &$charset)
              {if($item->childNodes)
                 {foreach($item->childNodes as $childItem)
                    {switch($childItem->nodeName)
                       {case 'html':
                        case 'head':
                          $searchInElemnt($childItem);
                          break;
                        case 'meta':
                          $attributes = array();
                          foreach ($childItem->attributes as $attr)
                            {$attributes[mb_strtoupper($attr->localName)] = $attr->nodeValue;
                            }
                          if(array_key_exists('HTTP-EQUIV', $attributes) && (mb_strtoupper($attributes['HTTP-EQUIV']) == 'CONTENT-TYPE') && array_key_exists('CONTENT', $attributes) && preg_match('~[\s]*;[\s]*charset[\s]*=[\s]*([^\s]+)~', $attributes['CONTENT'], $matches))
                            {$charset = preg_replace('~[\s\']~', '', $matches[1]);
                            }
                       }
                    }
                 }
              };
            $searchInElemnt($testDOM);
            if(isset($charset))
              {$dom = new DOMDocument('1.0', $charset);
               $dom->loadHTML('<?xml encoding="'.$charset.'">'.$html);
               foreach ($dom->childNodes as $item)
               if($item->nodeType == XML_PI_NODE)
                 {$dom->removeChild($item);
                 }
               $dom->encoding = $charset;
              }
            else
              {$dom = $testDOM;
              }
            return $dom;
           };
kerim-yagmurcu at gmx dot de 24-Dec-2016 03:13
For those of you who want to get an external URL's class element, I have 2 usefull functions. In this example we get the '<h3 class="r">'
 elements back (search result headers) from google search:

1. Check the URL (if it is reachable, existing)
<?php
# URL Check
function url_check($url) {
    $headers = @get_headers($url);
    return is_array($headers) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/',$headers[0]) : false;
};
?>

2. Clean the element you want to get (remove all tags, tabs, new-lines etc.)
<?php
# Function to clean a string
function clean($text){
    $clean = html_entity_decode(trim(str_replace(';','-',preg_replace('/\s+/S', " ", strip_tags($text)))));// remove everything
    return $clean;
    echo '\n';// throw a new line
}
?>

After doing that, we can output the search result headers with following method:
<?php
$searchstring = 'djceejay';
$url = 'http://www.google.de/webhp#q='.$searchstring;
if(url_check($url)){
    $doc = new DomDocument;
    $doc->validateOnParse = true;
    $doc->loadHtml(file_get_contents($url));
    $output = clean($doc->getElementByClass('r')->textContent);
    echo $output . '<br>';
}else{
    echo 'URL not reachable!';// Throw message when URL not be called
}
?>
fr at felix-riesterer dot de 13-Feb-2016 01:43
Remember: If you use an HTML5 doctype and a meta element like so

<meta CHARSET=shift-jis">

your HTML code will get interpreted as ISO-8859-something and non-ASCII chars will get converted into HTML entities. However the HTML4-like version will work (as has been pointed out 10 years ago by "bigtree at 29a"):

<meta http-equiv="Content-Type" content="text/html; CHARSET=shift-jis">
finkenb2 at mail dot lib dot msu dot edu 05-Oct-2015 04:03
Warning:  This does not function well with HTML5 elements such as SVG.  Most of the advice on the Web is to turn off errors in order to have it work with HTML5.
cake at brothercake dot com 16-Dec-2012 05:57
Be aware that this function doesn't actually understand HTML -- it fixes tag-soup input using the general rules of SGML, so it creates well-formed markup, but has no idea which element contexts are allowed.

For example, with input like this where the first element isn't closed:

    <span>hello <div>world</div>

loadHTML will change it to this, which is well-formed but invalid:

    <span>hello <div>world</div></span>
Alex 10-Apr-2010 08:45
Beware of the "gotcha" (works as designed but not as expected): if you use loadHTML, you cannot validate the document. Validation is only for XML. Details here: http://bugs.php.net/bug.php?id=43771&edit=1
Shane Harter 04-Jan-2010 08:42
DOMDocument is very good at dealing with imperfect markup, but it throws warnings all over the place when it does.

This isn't well documented here. The solution to this is to implement a separate aparatus for dealing with just these errors.

Set libxml_use_internal_errors(true) before calling loadHTML. This will prevent errors from bubbling up to your default error handler. And you can then get at them (if you desire) using other libxml error functions.

You can find more info here http://www.php.net/manual/en/ref.libxml.php
mdmitry at gmail dot com 21-Dec-2009 09:02
You can also load HTML as UTF-8 using this simple hack:

<?php

$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);

// dirty fix
foreach ($doc->childNodes as $item)
    if ($item->nodeType == XML_PI_NODE)
        $doc->removeChild($item); // remove hack
$doc->encoding = 'UTF-8'; // insert proper

?>
piopier 14-Jun-2009 08:29
Here is a function I wrote to capitalize the previous remarks about charset problems (UTF-8...) when using loadHTML and then DOM functions.
It adds the charset meta tag just after <head> to improve automatic encoding detection, converts any specific character to an html entity, thus PHP DOM functions/attributes will return correct values.

<?php
mb_detect_order("ASCII,UTF-8,ISO-8859-1,windows-1252,iso-8859-15");
function loadNprepare($url,$encod='') {
        $content        = file_get_contents($url);
        if (!empty($content)) {
                if (empty($encod))
                        $encod  = mb_detect_encoding($content);
                $headpos        = mb_strpos($content,'<head>');
                if (FALSE=== $headpos)
                        $headpos= mb_strpos($content,'<HEAD>');
                if (FALSE!== $headpos) {
                        $headpos+=6;
                        $content = mb_substr($content,0,$headpos) . '<meta http-equiv="Content-Type" content="text/html; charset='.$encod.'">' .mb_substr($content,$headpos);
                }
                $content=mb_convert_encoding($content, 'HTML-ENTITIES', $encod);
        }
        $dom = new DomDocument;
        $res = $dom->loadHTML($content);
        if (!$res) return FALSE;
        return $dom;
}
?>

NB: it uses mb_strpos/mb_substr instead of mb_ereg_replace because that seemed more efficient with huge html pages.
Errol 11-Feb-2009 08:05
It should be noted that when any text is provided within the body tag
outside of a containing element, the DOMDocument will encapsulate that
text into a paragraph tag (<p>).

For example:
<?php
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br><div>Text</div></body></html>");
echo $doc->saveHTML();
?>

will yield:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>Test<br></p>
<div>Text</div>
</body></html>

while:
<?php
$doc = new DOMDocument();
$doc->loadHTML(
    "<html><body><i>Test</i><br><div>Text</div></body></html>");
echo $doc->saveHTML();
?>

will yield:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<i>Test</i><br><div>Text</div>
</body></html>
jamesedwardcooke+php at gmail dot com 19-Oct-2008 11:37
Using loadHTML() automagically sets the doctype property of your DOMDocument instance(to the doctype in the html, or defaults to 4.0 Transitional). If you set the doctype with DOMImplementation it will be overridden.

I assumed it was possible to set it and then load html with the doctype I defined(in order to decide the doctype at runtime), and ran into a huge headache trying to find out where my doctype was going. Hopefully this helps someone else.
xuanbn at yahoo dot com 04-Oct-2007 01:38
If you use loadHTML() to process utf HTML string (eg in Vietnamese), you may experience result in garbage text, while some files were OK. Even your HTML already have meta charset  like

  <meta http-equiv="content-type" content="text/html; CHARSET=shift-jis">

I have discovered that, to help loadHTML() process utf file correctly, the meta tag should come first, before any utf string appear. For example, this HTML file

<html>
 <head>
    <meta http-equiv="content-type" content="text/html; CHARSET=shift-jis">
    <title> Vietnamese - Ti?ng Vi?t</title>
  </head>
<body></body>
</html>

will be OK with loadHTML() when <meta> tag appear <title> tag.

But the file below will not regcornize by loadHTML() because <title> tag contains utf string appear before <meta> tag.

<html>
 <head>
    <title> Vietnamese - Ti?ng Vi?t</title>
    <meta http-equiv="content-type" content="text/html; CHARSET=shift-jis">
  </head>
<body></body>
</html>
hanhvansu at yahoo dot com 26-Apr-2007 08:50
When using loadHTML() to process UTF-8 pages, you may meet the problem that the output of dom functions are not like the input. For example, if you want to get "C?nh tranh", you will receive "Cao!nh tranh".  I suggest we use mb_convert_encoding before load UTF-8 page :
<?php
    $pageDom = new DomDocument();
    $searchPage = mb_convert_encoding($htmlUTF8Page, 'HTML-ENTITIES', "UTF-8");
    @$pageDom->loadHTML($searchPage);

?>
romain dot lalaut at laposte dot net 15-Feb-2007 08:31
Note that the elements of such document will have no namespace even with <html xmlns="http://www.w3.org/1999/xhtml">
bigtree at DONTSPAM dot 29a dot nl 26-Apr-2005 02:15
Pay attention when loading html that has a different charset than iso-8859-1. Since this method does not actively try to figure out what the html you are trying to load is encoded in (like most browsers do), you have to specify it in the html head. If, for instance, your html is in utf-8, make sure you have a meta tag in the html's head section:

<head>
<meta http-equiv="Content-Type" content="text/html; CHARSET=shift-jis"/>
</head>

If you do not specify the charset like this, all high-ascii bytes will be html-encoded. It is not enough to set the dom document you are loading the html in to UTF-8.


ファイルから HTML を読み込む

  • ≪ DOMDocument::loadHTML
  • DOMDocument::loadXML ≫
  • PHP Manual
  • DOMDocument
  • ファイルから HTML を読み込む

DOMDocument::loadHTMLFile

(PHP 5, PHP 7, PHP 8)

DOMDocument::loadHTMLFile — ファイルから HTML を読み込む

説明

public DOMDocument::loadHTMLFile(string $filename, int $options = 0): bool

この関数は、filename という名前のファイルから 読み込んだ HTML ドキュメントをパースします。 XML を読み込む場合とは異なり、妥当な HTML でなくても 読み込むことができます。

警告

この関数は、HTML4 のパーサを使って入力をパースします。モダンなWebブラウザが採用している HTML5 のパースルールとは異なります。入力によっては、このことが原因で異なるDOM構造になるかもしれません。よって、この関数はHTMLを無害化する目的で安全に使えません。

HTML をパースする挙動は、利用している libxml のバージョンに依存します。 特にエッジケースやエラーハンドリングについてそれが当てはまります。 HTML5 に準拠したパースを行うには、PHP 8.4 で追加される Dom\HTMLDocument::createFromString() や Dom\HTMLDocument::createFromFile() を使いましょう。

例を挙げましょう。HTML要素によっては、暗黙のうちに親の要素を閉じるものがあります。親要素を自動で閉じるルールは、HTML4 と HTML5 で異なります。よって、DOMDocument が表す DOM 構造は Webブラウザ上のそれと異なる可能性があります。このことから、攻撃者がHTMLを壊す攻撃を許す可能性があります。

パラメータ

filename

HTML ファイルへのパス。

options

追加の Libxml パラメータ を、ビット演算子の OR で指定します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

空の文字列を filename に渡したり中身が空のファイルを指定したりすると、警告が発生します。 この警告は libxml が発するものではないので、libxml のエラー処理関数 では処理できません。

壊れた HTML も読み込めますが、マークアップが正しくない場合には E_WARNING が発生します。 このエラーの処理には libxml のエラー処理関数 が使えます。

変更履歴

バージョン | 説明
8.3.0 | この関数の仮の戻り値の型が、bool になりました。+
8.0.0 | この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

例

例1 ドキュメントを作成する

<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("filename.html");
echo $doc->saveHTML();
?>

参考

  • DOMDocument::loadHTML() - 文字列から HTML を読み込む
  • DOMDocument::saveHTML() - 内部のドキュメントを HTML 形式の文字列として出力する
  • DOMDocument::saveHTMLFile() - 内部のドキュメントを HTML 形式でファイルに出力する

User Contributed Notes

qrworld.net 11-Nov-2014 04:37
In this post http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url_11.html I found a simple way to get the content of a URL with DOMDocument, loadHTMLFile and saveHTML().

function getURLContent($url){
    $doc = new DOMDocument;
    $doc->preserveWhiteSpace = FALSE;
    @$doc->loadHTMLFile($url);
    return $doc->saveHTML();
}
onemanbanddan at gmail dot com 04-Mar-2014 12:28
The options for surpressing errors and warnings will not work with this as they do for loadXML()
e.g.
<?php
$doc->loadHTMLFile($file, LIBXML_NOWARNING | LIBXML_NOERROR);
?>
will not work.
you must use:
<?php
libxml_use_internal_errors(true);
$doc->loadHTMLFile($file);
?>
and handle the exceptions as neccesarry.
Mark Omohundro, ajamyajax dot com 28-Nov-2008 06:32
<?php
// try this html listing example for all nodes / includes a few getElementsByTagName options:

$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);

// example 1:
$elements = $doc->getElementsByTagName('*');
// example 2:
$elements = $doc->getElementsByTagName('html');
// example 3:
//$elements = $doc->getElementsByTagName('body');
// example 4:
//$elements = $doc->getElementsByTagName('table');
// example 5:
//$elements = $doc->getElementsByTagName('div');

if (!is_null($elements)) {
  foreach ($elements as $element) {
    echo "<br/>". $element->nodeName. ": ";

    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "\n";
    }
  }
}
?>
gzech at SPAMFILTER dot eso dot org 21-Feb-2007 02:09
If you want to suppress output warnings from loadHTMLFile($url), put an @ sign in front. This even works in:
<?php
$load = @$dom->loadHTMLFile($url);
?>
andy at carobert dot com 25-May-2005 01:24
This puts the HTML into a DOM object which can be parsed by individual tags, attributes, etc..  Here is an example of getting all the 'href' attributes and corresponding node values out of the 'a' tag. Very cool....

<?php
$myhtml = <<<EOF
<html>
<head>
<title>My Page</title>
</head>
<body>
<p><a href="/mypage1">Hello World!</a></p>
<p><a href="/mypage2">Another Hello World!</a></p>
</body>
</html>
EOF;

$doc = new DOMDocument();
$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag) {
       echo $tag->getAttribute('href').' | '.$tag->nodeValue."\n";
}
?>

This should output:

/mypage1 | Hello World!
/mypage2 | Another Hello World!
bens at effortlessis dot com 08-Apr-2005 05:11
Note that this function doesn't parse the individual tags WITHIN the html file - it's all loaded as a "black box", and you end up with an XML widget that comprises nothing but the complete chunk of HTML.

I was hoping it would function as a sort of HTML-validator/parser, but that doesn't seem to be the case.


文字列から XML を読み込む

  • ≪ DOMDocument::loadHTMLFile
  • DOMDocument::normalizeDocument ≫
  • PHP Manual
  • DOMDocument
  • 文字列から XML を読み込む

DOMDocument::loadXML

(PHP 5, PHP 7, PHP 8)

DOMDocument::loadXML — 文字列から XML を読み込む

説明

public DOMDocument::loadXML(string $source, int $options = 0): bool

XML ドキュメントを文字列から読み込みます。

パラメータ

source

XML を含む文字列。

options

libxml オプション定数 を ビット OR で連結したもの。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

空の文字列を source に渡すと、警告が発生します。 この警告は libxml が発するものではないので、libxml のエラー処理関数では処理できません。

変更履歴

バージョン | 説明
8.3.0 | この関数の仮の戻り値の型が、bool になりました。
8.0.0 | この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

例

例1 ドキュメントを作成する

<?php
$doc = new DOMDocument();
$doc->loadXML('<root><node/></root>');
echo $doc->saveXML();
?>

参考

  • DOMDocument::load() - ファイルから XML を読み込む
  • DOMDocument::save() - 内部の XML ツリーをファイルに出力する
  • DOMDocument::saveXML() - 内部の XML ツリーを文字列として出力する

User Contributed Notes

Adrian Wiik 13-Nov-2019 09:02
A call to loadXML() will overwrite the XML declaration previously created in the constructor of DOMDocument. This can cause encoding problems if there is no XML declaration in the loaded XML and you don't have control over the source (e.g. if the XML is coming from a webservice). To fix this, set encoding AFTER loading the XML using the 'encoding' class property of DOMDocument. Example:

Bad situation:

test.xml:
<test>
    <hello>hi</hello>
    <field>o</field>
</test>

test.php:
$xmlDoc = new DOMDocument("1.0", "utf-8"); // Parameters here are overwritten anyway when using loadXML(), and are not really relevant
$testXML = file_get_contents("test.xml");
$xmlDoc->loadXML($testXML);
// Print the contents to a file or in a log function to get the output, using $xmlDoc->saveXML()

Output:
<?xml version="1.0"?>
<test>
    <hello>hi</hello>
    <field>&#xF8;</field>
</test>

Good situation:

test.xml:
<test>
    <hello>hi</hello>
    <field>o</field>
</test>

test.php:
$xmlDoc = new DOMDocument("1.0", "utf-8"); // Parameters here are overwritten anyway when using loadXML(), and are not really relevant
$testXML = file_get_contents("test.xml");
$xmlDoc->loadXML($testXML);
$xmlDoc->encoding = "utf-8";
// Print the contents to a file or in a log function to get the output, using $xmlDoc->saveXML()

Output:
<?xml version="1.0" encoding="utf-8"?>
<test>
    <hello>hi</hello>
    <field>o</field>
</test>
Gustavo L. Fabro 14-Nov-2013 04:41
Always remember that with the default parameters this function doesn't handle well large files, i.e. if a text node is longer than 10Mb it can raise an exception stating:

DOMDocument::loadXML(): internal error Extra content at the end of the document in Entity

even though the XML is fine.

The cause is a definition in parserInternals.h of lixml:
#define XML_MAX_TEXT_LENGTH 10000000

To allow the function to process larger files, pass the LIBXML_PARSEHUGE as an option and it will work just fine:

$domDocument->loadXML($xml, LIBXML_PARSEHUGE);
szalma dot laszlo at zengo dot eu 27-Oct-2009 08:14
Loading from a string works fine without the <?xml version="1.0" encoding="utf-8"?> header, but in this case the xmlEncoding won't be set, and this makes the utf-8 characters (international, and special characters) to be encoded as hexa entities when saved with saveXML()!
remacg 26-Feb-2009 07:33
Instead of doing this:

<?php
$str = <<<XML
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE root [
<!ENTITY nbsp "&#160;">
]>
<div>This&nbsp;is a non-breaking space.</div>
XML;

$dd2 = new DOMDocument();
$dd2->loadXML($str);

echo $dd2->saveXML();
?>

simply use:

loadHTML() rather than loadXML().
olalonde at NOSPAM dot gmail dot com 21-Mar-2008 05:00
For some reason, when you set DOMDocument's property 'recover' to true, using '@' to mask errors thrown by loadXml() won't work.

Here's my workaround:

function maskErrors() {}
set_error_handler('maskErrors');
$dom->loadXml($xml);
restore_error_handler();

You could also simply do this: error_reporting(0); and then set back error_reporting to its original state.
Stuart Grimshaw 26-Jun-2007 01:57
Possible values for the options parameter can be found here:

http://us3.php.net/manual/en/ref.libxml.php#libxml.constants
Marc Liyanage 18-Jun-2007 07:08
The documentation states that loadXML can be called statically, but this is misleading. This feature seems to be a special case hack and its use seems to be discouraged according to http://bugs.php.net/bug.php?id=41398.

Calling the method statically will fail with an error if the code runs with E_STRICT error reporting enabled.

The documentation should be changed to make it clear that a static call is against recommended practice and won't work with E_STRICT.
jazzslider at hotmail dot com 30-Apr-2007 01:14
When using loadXML() to parse a string that contains entity references (e.g., &nbsp;), be sure that those entity references are properly declared through the use of a DOCTYPE declaration; otherwise, loadXML() will not be able to interpret the string.

Example:
<?php
$str = <<<XML
<?xml version="1.0" encoding="iso-8859-1"?>
<div>This&nbsp;is a non-breaking space.</div>
XML;

$dd1 = new DOMDocument();
$dd1->loadXML($str);

echo $dd1->saveXML();
?>

Given the above code, PHP will issue a Warning about the entity 'nbsp' not being properly declared.  Also, the call to saveXML() will return nothing but a trimmed-down version of the original processing instruction...everything else is gone, and all because of the undeclared entity.

Instead, explicitly declare the entity first:
<?php
$str = <<<XML
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE root [
<!ENTITY nbsp "&#160;">
]>
<div>This&nbsp;is a non-breaking space.</div>
XML;

$dd2 = new DOMDocument();
$dd2->loadXML($str);

echo $dd2->saveXML();
?>

Since the 'nbsp' entity is defined in the DOCTYPE, PHP no longer issues that Warning; the string is now well-formed, and loadXML() understands it perfectly.

You can also use references to external DTDs in the same way (e.g., <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">), which is particularly important if you need to do this for many different documents with many different possible entities.

Also, as a sidenote...entity references created by createEntityReference() do not need this kind of explicit declaration.
shaoyu73 at gmail dot com 15-Mar-2007 08:53
earth at anonymous dot com,

preserveWhiteSpace property needs to be set to false for formatOutput to work properly, for some reason.

$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->loadXML($xmlStr);
...
$element->appendChild(...);
...
$dom->formatOutput = true;
$xmlStr = $dom->saveXML();
echo $xmlStr;

This would format the output nicely.
Gavin Sinai gsinai at gmx dot net 30-Aug-2006 07:34
loadXml reports an error instead of throwing an exception when the xml is not well formed. This is annoying if you are trying to to loadXml() in a try...catch statement. Apparently its a feature, not a bug, because this conforms to a spefication.

If you want to catch an exception instead of generating a report, you could do something like

<?php
function HandleXmlError($errno, $errstr, $errfile, $errline)
{
    if ($errno==E_WARNING && (substr_count($errstr,"DOMDocument::loadXML()")>0))
    {
        throw new DOMException($errstr);
    }
    else
        return false;
}

function XmlLoader($strXml)
{
    set_error_handler('HandleXmlError');
    $dom = new DOMDocument();
    $dom->loadXml($strXml);
    restore_error_handler();
    return $dom;
 }

?>

Returning false in function HandleXmlError() causes a fallback to the default error handler.
mp at webfactory dot de 08-Aug-2006 08:26
While loadXML() expects its input to have a leading XML processing instruction to deduce the encoding used, there's no such concept in (non-XML) HTML documents. Thus, the libxml library underlying the DOM functions peeks at the <META> tags to figure out the encoding used.

See http://xmlsoft.org/encoding.html.
earth at anonymous dot com 12-Apr-2006 02:28
Note that loadXML crops off beginning and trailing whitespace and linebreaks.

When using loadXML and appendChild to add a chunk of XML to an existing document, you may want to force a linebreak between the end of the XML chunk and the next line (usually a close tag) in the output file:

$childDocument = new DOMDocument;
$childDocument>preserveWhiteSpace = true;
$childDocument->loadXML(..XML-Chunk..);
$mNewNode = $mainDOcument->importNode($childDocument->documentElement, true);
$ParentNode->appendChild($mNewNode);
$ParentNode->appendChild($mainDocument->createTextNode("\\n  ");

Although it is said that DOM should not be used to make 'pretty' XML output, it is something I struggled with to get something that was readable for testing.  Another solution is to use the createDocumentFragment()->appendXML(..XML-Chunk..) instead, which seems not to trim off linebreaks like DOMDocument->loadXML() does.


ドキュメントを正規化する

  • ≪ DOMDocument::loadXML
  • DOMDocument::prepend ≫
  • PHP Manual
  • DOMDocument
  • ドキュメントを正規化する

DOMDocument::normalizeDocument

(PHP 5, PHP 7, PHP 8)

DOMDocument::normalizeDocument — ドキュメントを正規化する

説明

public DOMDocument::normalizeDocument(): void

このメソッドは、まるでドキュメントを一度保存してから読み込みなおしたかのように動作し、 ドキュメントを "正規化された" 形式にします。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

参考

  • » The DOM Specification
  • DOMNode::normalize() - ノードを正規化する

User Contributed Notes

lingasamy dot sakthivel at gmail dot com 16-Apr-2015 05:44
You can use this in this way.

$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($content); // html content
$xpath = new DOMXPath($doc);
$doc->normalizeDocument();

Note that, you can use $doc->normalizeDocument(); at any point of time.


最初の子ノードの前にノードを追加する

  • ≪ DOMDocument::normalizeDocument
  • DOMDocument::registerNodeClass ≫
  • PHP Manual
  • DOMDocument
  • 最初の子ノードの前にノードを追加する

DOMDocument::prepend

(PHP 8)

DOMDocument::prepend — 最初の子ノードの前にノードを追加する

説明

public DOMDocument::prepend(DOMNode|string ...$nodes): void

ひとつ以上の nodes を、 最初の子ノードの前の、子ノードのリストに追加します。

パラメータ

nodes

ノードの前に追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMDocument::prepend() の例

ドキュメントのルートの前にノードを追加します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<world/>");

$doc->prepend($doc->createElement("hello"), "beautiful");

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<hello/>
beautiful
<world/>

参考

  • DOMParentNode::prepend() - 最初の子ノードの前にノードを追加する
  • DOMDocument::append() - 最後の子ノードの後ろにノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


基底ノード型を作成する際に使用する拡張クラスを登録する

  • ≪ DOMDocument::prepend
  • DOMDocument::relaxNGValidate ≫
  • PHP Manual
  • DOMDocument
  • 基底ノード型を作成する際に使用する拡張クラスを登録する

DOMDocument::registerNodeClass

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DOMDocument::registerNodeClass — 基底ノード型を作成する際に使用する拡張クラスを登録する

説明

public DOMDocument::registerNodeClass(string $baseClass, ?string $extendedClass): bool

このメソッドにより、独自に拡張した DOM クラスを登録することができます。 これを、後で PHP DOM 拡張モジュールで使用します。

このメソッドは、DOM の標準にはないものです。

警告

登録済みのクラスの、インスタンスのコンストラクタはコールされません。

パラメータ

baseClass

拡張したい DOM クラス。クラス名の一覧は、 この章の導入部にあります。

extendedClass

拡張したクラスの名前。null を渡した場合は、 それまでに baseClass を拡張して作成したすべてのクラスが削除されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 新しいメソッドを DOMElement に追加し、コードを書きやすくする

<?php

class myElement extends DOMElement {
function appendElement($name) {
return $this->appendChild(new myElement($name));
}
}

class myDocument extends DOMDocument {
function setRoot($name) {
return $this->appendChild(new myElement($name));
}
}

$doc = new myDocument();
$doc->registerNodeClass('DOMElement', 'myElement');

// これ以降、他の要素への要素の追加が一回のメソッドコールでできるようになります!
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');

echo $doc->saveXML();

?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<root><child foo="bar"/></root>

例2 カスタムクラス形式での要素の取得

<?php
class myElement extends DOMElement {
public function __toString() {
return $this->nodeValue;
}
}

$doc = new DOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");
$doc->registerNodeClass("DOMElement", "myElement");

$element = $doc->getElementsByTagName("child")->item(0);
var_dump(get_class($element));

// __toString メソッドの助けを借ります..
echo $element;
?>

上の例の出力は以下となります。

string(9) "myElement"
text in child

例3 オーナードキュメントの取得

自作の DOMDocument インスタンスを作成すると、 ownerDocument プロパティが作成元のクラスを指すようになります。 しかし、そのクラスへの参照が全て削除されると、 そのクラスは削除され、新しい DOMDocument が代わりに作成されます。よって、 DOMDocument::registerNodeClass() を、 DOMDocument と一緒に使うことができます。

<?php
class MyDOMDocument extends DOMDocument {
}

class MyOtherDOMDocument extends DOMDocument {
}

// XML から myDOMDocument を作成します
$doc = new MyDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");

$child = $doc->getElementsByTagName("child")->item(0);

// このノードの現在のオーナーは myDOMDocument です
var_dump(get_class($child->ownerDocument));
// MyDOMDocument を破棄します
unset($doc);
// そして新しい DOMDocument が作成されます
var_dump(get_class($child->ownerDocument));

// MyDOMDocument からノードを import します
$newdoc = new MyOtherDOMDocument;
$child = $newdoc->importNode($child);

// カスタムの DOMDocument を登録します
$newdoc->registerNodeClass("DOMDocument", "MyOtherDOMDocument");

var_dump(get_class($child->ownerDocument));
unset($doc);
// 新しい MyOtherDOMDocument を作成します
var_dump(get_class($child->ownerDocument));
?>

上の例の出力は以下となります。

string(13) "MyDOMDocument"
string(11) "DOMDocument"
string(18) "MyOtherDOMDocument"
string(18) "MyOtherDOMDocument"

例4 カスタムオブジェクトは一時的なもの

警告

登録されたノードクラスは、一時的なものです。 つまり、PHPコードから参照されなくなった時には破棄され、 再度取得される際に再生成されます。 これは、カスタムプロパティの値は再生成された時に失われるということです。

<?php
class MyDOMElement extends DOMElement
{
public $myProp = 'default value';
}

$doc = new DOMDocument();
$doc->registerNodeClass('DOMElement', 'MyDOMElement');

$node = $doc->createElement('a');
$node->myProp = 'modified value';
$doc->appendChild($node);

echo $doc->childNodes[0]->myProp, PHP_EOL;
unset($node);
echo $doc->childNodes[0]->myProp, PHP_EOL;
?>

上の例の出力は以下となります。

modified value
default value

User Contributed Notes

crh3675 at gmail dot com 25-Sep-2009 08:23
Creating innerHTML and outerHTML

<?php

class DOMHTMLElement extends DOMElement
{
    function __construct() { parent::__construct();}

    public function innerHTML()
    {
        $doc = new DOMDocument();
      foreach ($this->childNodes as $child){
          $doc->appendChild($doc->importNode($child, true));
        }
        $content = $doc->saveHTML();
        return $content;
    }

    public function outerHTML()
    {
        $doc = new DOMDocument();
        $doc->appendChild($doc->importNode($this, true));
        $content = $doc->saveHTML();
        return $content;
    }
}

$dom = DOMDocument::loadHTMLFile($file);
$dom->registerNodeClass('DOMElement','DOMHTMLElement');

if($dom)
{
    $xpath = new DOMXpath($dom);
    $regions = $xpath->query("//*[contains(@class, 'editable')]");
    $content = '';

    foreach($regions as $region){
        $content .= $region->outerHTML();
    }

    return $content;

}else{
    throw new Exception('Cannot parse HTML.  Please verify the syntax is correct.');
}
?>
arnold at adaniels dot nl 22-Jul-2009 03:10
Note than save and saveXML are not affected by __toString().


ドキュメントを relaxNG で検証する

  • ≪ DOMDocument::registerNodeClass
  • DOMDocument::relaxNGValidateSource ≫
  • PHP Manual
  • DOMDocument
  • ドキュメントを relaxNG で検証する

DOMDocument::relaxNGValidate

(PHP 5, PHP 7, PHP 8)

DOMDocument::relaxNGValidate — ドキュメントを relaxNG で検証する

説明

public DOMDocument::relaxNGValidate(string $filename): bool

指定した RNG スキーマに基づいて、ドキュメントを » relaxNG で検証します。

パラメータ

filename

RNG ファイル。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMDocument::relaxNGValidateSource() - ドキュメントを relaxNG で検証する
  • DOMDocument::schemaValidate() - スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。
  • DOMDocument::schemaValidateSource() - スキーマに基づいてドキュメントを検証する
  • DOMDocument::validate() - DTD に基づいてドキュメントを検証する

User Contributed Notes

scarywound at gmail dot com 17-Oct-2012 11:39
Keep in mind that this method can't handle schemas in compact syntax!


ドキュメントを relaxNG で検証する

  • ≪ DOMDocument::relaxNGValidate
  • DOMDocument::replaceChildren ≫
  • PHP Manual
  • DOMDocument
  • ドキュメントを relaxNG で検証する

DOMDocument::relaxNGValidateSource

(PHP 5, PHP 7, PHP 8)

DOMDocument::relaxNGValidateSource — ドキュメントを relaxNG で検証する

説明

public DOMDocument::relaxNGValidateSource(string $source): bool

指定した RNG ソースに基づいて、ドキュメントを » relaxNG で検証します。

パラメータ

source

RNG スキーマを含む文字列。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMDocument::relaxNGValidate() - ドキュメントを relaxNG で検証する
  • DOMDocument::schemaValidate() - スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。
  • DOMDocument::schemaValidateSource() - スキーマに基づいてドキュメントを検証する
  • DOMDocument::validate() - DTD に基づいてドキュメントを検証する

User Contributed Notes

There are no user contributed notes for this page.


ドキュメントの子を置換する

  • ≪ DOMDocument::relaxNGValidateSource
  • DOMDocument::save ≫
  • PHP Manual
  • DOMDocument
  • ドキュメントの子を置換する

DOMDocument::replaceChildren

(PHP 8 >= 8.3.0)

DOMDocument::replaceChildren — ドキュメントの子を置換する

説明

public DOMDocument::replaceChildren(DOMNode|string ...$nodes): void

ドキュメント中の子を、新しい nodes で置換します。

パラメータ

nodes

子を置き換えるノード 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMDocument::replaceChildren() の例

子を新しいノードで置換します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><hello/></container>");

$doc->replaceWith("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
beautiful
<world/>

参考

  • DOMParentNode::replaceChildren() - ノード中の子を置換する
  • DOMDocument::append() - 最後の子ノードの後ろにノードを追加する
  • DOMDocument::prepend() - 最初の子ノードの前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


内部の XML ツリーをファイルに出力する

  • ≪ DOMDocument::replaceChildren
  • DOMDocument::saveHTML ≫
  • PHP Manual
  • DOMDocument
  • 内部の XML ツリーをファイルに出力する

DOMDocument::save

(PHP 5, PHP 7, PHP 8)

DOMDocument::save — 内部の XML ツリーをファイルに出力する

説明

public DOMDocument::save(string $filename, int $options = 0): int|false

DOM 表現から XML ドキュメントを作成します。この関数は、通常は以下の例のように DOM ドキュメントを新しく作成した後にコールされます。

パラメータ

filename

保存された XML ドキュメントへのパス。

options

追加のオプション。現在は LIBXML_NOEMPTYTAG のみが サポートされています。

戻り値

書き込んだバイト数、あるいはエラーが発生した場合は false を返します。

例

例1 DOM ツリーをファイルに保存する

<?php

$doc = new DOMDocument('1.0');
// 出力はきれいに整形したいですね。
$doc->formatOutput = true;

$root = $doc->createElement('book');
$root = $doc->appendChild($root);

$title = $doc->createElement('title');
$title = $root->appendChild($title);

$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);

echo 'Wrote: ' . $doc->save("/tmp/test.xml") . ' bytes'; // Wrote: 72 bytes

?>

参考

  • DOMDocument::saveXML() - 内部の XML ツリーを文字列として出力する
  • DOMDocument::load() - ファイルから XML を読み込む
  • DOMDocument::loadXML() - 文字列から XML を読み込む

User Contributed Notes

dubois-holvoet dot patrick at neuf dot fr 25-Feb-2016 08:13
I just intend to bring my little contribution to the use of DOMDocument::save() function along with PHP serialize() function.

Sometimes you could have to serialize a PHP object before you put it into a XML structure (or other..). And then I suppose you could have to save this XML structure in a file. Of course, you will further need to read this file and unserialize it before to use its content.

The problem appears when there are some properties described as Protected in the object to be serialized.

As it's written in the PHP documentation, serialize function add for those protected properties an asterisk before the name of the property along with a NULL character on each side of the asterisk.
In this case, the DOMDocument::save function will stop the save operation just before the first NULL character met in the string to be saved, because PHP consider it as a potential risk.
So, after that, the unserialize operation of the file become impossible.

To solve that, here is a first solution to apply :

For the serialize , before the DOMDocument::save() ::
$data_serial = explode("\x00\x2A\x00", serialize($object));  //take off the 'NULL * NULL' string
$data_serial = implode("\x5C\x30\x2A\x5C\x30", $data_serial);    //and replace with '\0*\0' string

Before the unserialize :
$data_serial = explode("\x5C\x30\x2A\x5C\x30", $serialized_object);    // take off the '\0*\0' string
$serial_object = implode("\x00\x2A\x00", $data_serial);      // and replace with 'NULL * NULL' string as included by the previous serialize

And a second solution :

For the serialize, before the DOMDocument::save() :
$serialized_object = addslashes(serialize($object)) ;

Before re-using the object in your application :
$object = unserialize(stripslashes($serialized_object)) ;

Hope this will help some.
ludvig at ergopedia dot no 31-Oct-2014 10:21
When creating a DOMDocument from scratch and saving it, the encoding will be utf-8, although it's declared as iso-8859-1.

When loading an XML-file declared and saved as iso-8859-1, php will keep the correct encoding when it's saved after changes are made.

Php converts files declared as iso-8859-1 to utf-8 internally. To add text containing special characters, the text must be encoded as utf-8. When the document is saved, special characters are converted to iso-8859-1.

To save an xml created from scratch, use fopen/fwrite and utf8_decode:

   $doc = new DOMDocument('1.0', 'iso-8859-1');

//Add som nodes and text with apropriate methods

   $f = fopen('xmlfile.xml', 'w+');
   fwrite($f, utf8_decode($doc->saveXML()));
   fclose($f);
john at johnreid dot it 06-Aug-2013 09:42
I had been hitting my head against the wall when I couldn't get an edited XML file to save due to file permissions, even though I knew that it was OK.

Eventually I realised that for some odd reason, when I went to save the XML file, it would try to write the file to the root directory.

As such, use realpath() to keep the complete system path to the XML file when you load it:

<?php
$myfile = 'myxml.xml';
$myfile = realpath($myfile);
$doc = new DOMDocument('1.0');
$doc->load($myfile);

// Let's just add a couple of elements for good measure
$root = $doc->documentElement;

$title = $doc->createElement('title');
$title = $root->appendChild($title);

$text = $doc->createTextNode('This is a title');
$text = $title->appendChild($text);

$doc->save($myfile);
?>
ss at littlerain dot com 01-Feb-2009 12:05
In addition to:
DOMDocument->formatOutput = true
DOMDocument->preserveWhiteSpace = false

...you also have to ensure you don't add text nodes as siblings of element nodes, or formatOutput won't work.
chenel324 at gmail dot com 19-Oct-2008 06:38
It took me forever to discover that
DOMDocument->formatOutput = true
will only have an effect on documents that are loaded from disk if one also sets
DOMDocument->preserveWhiteSpace = false ....

Hope this saves somebody a headache.
siegparr at NOSPAM dot web dot de 07-Jul-2006 08:00
The XML parser converts the text of an XML document into UTF-8, even if you have set the character encoding of the XML, for example as a second parameter of the DOMDocument constructor. After parsing the XML with the load() command all its texts have been converted to UTF-8.

In case you append text nodes with special characters (e. g. Umlaut) to your XML document you should therefore use utf8_encode() with your text to convert it into UTF-8 before you append the text to the document. Otherwise you will get an error message like "output conversion failed due to conv error" at the save() command. See example below:

<?php
// Text to insert into XML below
$txt = "a text with special characters like 'a', 's', 'U' etc.";

// Create Instance of DOMDocument
$dom =  new DOMDocument;
// Load XML file
// Was created before with DOMDocument('1.0', 'iso-8859-1')
$dom = $dom->load("file.xml");
// Find the parent node
$parent = $dom->documentElement;
// Create Instance of DomXPath
$xpath = new DomXPath($dom);
// new node will be inserted before this node
$next = $xpath->query("//parentnode/childnode");
// Create the new element
$new_elem = $dom->createElement('new_elem');
// Insert the new element
$parent->insertBefore($new_elem, $next->item(0));
// DOMXML = utf-8! (will be converted to iso-8859-1 only at 'save()')
// prevents error message "output conversion failed due to conv error" at 'save()'
$txt = utf8_encode($txt);
// Create new text node with utf-8 encoded string
$nodetext = $dom->createTextNode("$txt");
// Append text node to new element
$nodetext = $new_elem->appendChild($nodetext);
// save
$dom->save("file.xml");
?>

Hope this helps someone.

siegparr


内部のドキュメントを HTML 形式の文字列として出力する

  • ≪ DOMDocument::save
  • DOMDocument::saveHTMLFile ≫
  • PHP Manual
  • DOMDocument
  • 内部のドキュメントを HTML 形式の文字列として出力する

DOMDocument::saveHTML

(PHP 5, PHP 7, PHP 8)

DOMDocument::saveHTML — 内部のドキュメントを HTML 形式の文字列として出力する

説明

public DOMDocument::saveHTML(?DOMNode $node = null): string|false

DOM 表現から HTML ドキュメントを作成します。この関数は、通常は以下の例のように DOM ドキュメントを新しく作成した後にコールされます。

パラメータ

node

ドキュメントのサブセットを出力するオプションのパラメータ。

戻り値

HTML、あるいはエラーが発生した場合は false を返します。

例

例1 HTML ツリーを文字列に保存する

<?php

$doc = new DOMDocument('1.0');

$root = $doc->createElement('html');
$root = $doc->appendChild($root);

$head = $doc->createElement('head');
$head = $root->appendChild($head);

$title = $doc->createElement('title');
$title = $head->appendChild($title);

$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);

echo $doc->saveHTML();

?>

参考

  • DOMDocument::saveHTMLFile() - 内部のドキュメントを HTML 形式でファイルに出力する
  • DOMDocument::loadHTML() - 文字列から HTML を読み込む
  • DOMDocument::loadHTMLFile() - ファイルから HTML を読み込む

User Contributed Notes

jeboy 28-Sep-2017 02:57
LIBXML_HTML_NOIMPLIED doesn't work on PHP 7.1.9 with libxml2-2.7.8
sasha @ goldnet dot ca 27-Jul-2017 04:21
When saving HTML fragment initiated with LIBXML_HTML_NOIMPLIED option, it will end up being "broken" as libxml requires root element. libxml will attempt to fix the fragment by adding closing tag at the end of string based on the first opened tag it encounters in the fragment.

For an example:

<h1>Foo</h1><p>bar</p>

will end up as:

<h1>Foo<p>bar</p></h1>

Easiest workaround is adding root tag yourself and stripping it later:

$html->loadHTML('<html>' . $content .'</html>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$content = str_replace(array('<html>','</html>') , '' , $html->saveHTML());
contact at cathexis dot de 31-Aug-2016 10:41
If you load HTML from a string ensure the charset is set.

<?php
...
$html_src = '<html><head><meta content="text/html; CHARSET=shift-jis" http-equiv="Content-Type"></head><body>';
$html_src .= '...';
...
?>

Otherwise the charset will be ISO-8859-1!
tomas dot strejcek at ghn dot cz 20-Aug-2016 12:34
As of PHP 5.4 and Libxml 2.6, there is currently simpler approach:

when you load html as this

$html->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

in the output, there will be no doctype, html or body tags
Anonymous 11-Dec-2015 03:38
To solve the script tag problem just add an empty text node to the script node and DOMDocument will render <script src="your.js"></script> nicely.
qrworld.net 11-Nov-2014 04:34
In this post http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url_11.html I found a simple way to get the content of a URL with DOMDocument, loadHTMLFile and saveHTML().

function getURLContent($url){
    $doc = new DOMDocument;
    $doc->preserveWhiteSpace = FALSE;
    @$doc->loadHTMLFile($url);
    return $doc->saveHTML();
}
Anonymous 09-Feb-2010 07:52
If you want a simpler way to get around the <script> tag problem try:

<?php

  $script = $doc->createElement ('script');\
  // Creating an empty text node forces <script></script>
  $script->appendChild ($doc->createTextNode (''));
  $head->appendChild ($script);

?>
Anonymous 12-May-2009 07:35
To avoid script tags from being output as <script />, you can use the DOMDocumentFragment class:

<?php

$doc = new DOMDocument();
$doc -> loadXML($xmlstring);
$fragment = $doc->createDocumentFragment();
/* Append the script element to the fragment using raw XML strings (will be preserved in their raw form) and if succesful proceed to insert it in the DOM tree */
if($fragment->appendXML("<script type='text/javascript' src='$source'></script>") {
  $xpath = new DOMXpath($doc);
  $resultlist = $xpath->query("//*[local-name() = 'html']/*[local-name() = 'head']"); /* namespace-safe method to find all head elements which are childs of the html element, should only return 1 match */
  foreach($resultlist as $headnode)  // insert the script tag
     $headnode->appendChild($fragment);
}
$doc->saveXML(); /* and our script tags will still be <script></script> */

?>
Anonymous 25-Apr-2008 08:15
<?php
function getDOMString($retNode) {
  if (!$retNode) return null;
  $retval = strtr($retNode-->ownerDocument->saveXML($retNode),
  array(
    '></area>' => ' />',
    '></base>' => ' />',
    '></basefont>' => ' />',
    '></br>' => ' />',
    '></col>' => ' />',
    '></frame>' => ' />',
    '></hr>' => ' />',
    '></img>' => ' />',
    '></input>' => ' />',
    '></isindex>' => ' />',
    '></link>' => ' />',
    '></meta>' => ' />',
    '></param>' => ' />',
    'default:' => '',
    // sometimes, you have to decode entities too...
    '&quot;' => '&#34;',
    '&amp;' =>  '&#38;',
    '&apos;' => '&#39;',
    '&lt;' =>   '&#60;',
    '&gt;' =>   '&#62;',
    '&nbsp;' => '&#160;',
    '&copy;' => '&#169;',
    '&laquo;' => '&#171;',
    '&reg;' =>   '&#174;',
    '&raquo;' => '&#187;',
    '&trade;' => '&#8482;'
  ));
  return $retval;
}
?>
archanglmr at yahoo dot com 27-Nov-2007 03:28
If created your DOMDocument object using loadHTML() (where the source is from another site) and want to pass your changes back to the browser you should make sure the HTTP Content-Type header matches your meta content-type tags value because modern browsers seem to ignore the meta tag and trust just the HTTP header. For example if you're reading an ISO-8859-1 document and your web server is claiming UTF-8 you need to correct it using the header() function.

<?php
header('Content-Type: text/html; charset=iso-8859-1');
?>
xoplqox 20-Nov-2007 11:07
XHTML:

If the output is XHTML use the function saveXML().

Output example for saveHTML:

<select name="pet" size="3" multiple>
    <option selected>mouse</option>
    <option>bird</option>
    <option>cat</option>
</select>

XHTML conform output using saveXML:

<select name="pet" size="3" multiple="multiple">
    <option selected="selected">mouse</option>
    <option>bird</option>
    <option>cat</option>
</select>
tyson at clugg dot net 21-Apr-2005 05:44
<?php
// Using DOM to fix sloppy HTML.
// An example by Tyson Clugg <tyson@clugg.net>
//
// vim: syntax=php expandtab tabstop=2

function tidyHTML($buffer)
{
  // load our document into a DOM object
  $dom = @DOMDocument::loadHTML($buffer);
  // we want nice output
  $dom->formatOutput = true;
  return($dom->saveHTML());
}

// start output buffering, using our nice
// callback funtion to format the output.
ob_start("tidyHTML");

?>
<html>
<p>It's like comparing apples to oranges.
</html>
<?php

// this will be called implicitly, but we'll
// call it manually to illustrate the point.
ob_end_flush();

?>

The above code takes out sloppy HTML:
 <html>
 <p>It's like comparing apples to oranges.
 </html>

And cleans it up to the following:
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html><body><p>It's like comparing apples to oranges.
 </p></body></html>


内部のドキュメントを HTML 形式でファイルに出力する

  • ≪ DOMDocument::saveHTML
  • DOMDocument::saveXML ≫
  • PHP Manual
  • DOMDocument
  • 内部のドキュメントを HTML 形式でファイルに出力する

DOMDocument::saveHTMLFile

(PHP 5, PHP 7, PHP 8)

DOMDocument::saveHTMLFile — 内部のドキュメントを HTML 形式でファイルに出力する

説明

public DOMDocument::saveHTMLFile(string $filename): int|false

DOM 表現から HTML ドキュメントを作成します。この関数は、通常は以下の例のように DOM ドキュメントを新しく作成した後にコールされます。

パラメータ

filename

保存された HTML ドキュメントへのパス。

戻り値

書き込んだバイト数、あるいはエラーが発生した場合は false を返します。

例

例1 HTML ツリーをファイルに保存する

<?php

$doc = new DOMDocument('1.0');
// 出力はきれいに整形したいですね。
$doc->formatOutput = true;

$root = $doc->createElement('html');
$root = $doc->appendChild($root);

$head = $doc->createElement('head');
$head = $root->appendChild($head);

$title = $doc->createElement('title');
$title = $head->appendChild($title);

$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);

echo 'Wrote: ' . $doc->saveHTMLFile("/tmp/test.html") . ' bytes'; // Wrote: 129 bytes

?>

参考

  • DOMDocument::saveHTML() - 内部のドキュメントを HTML 形式の文字列として出力する
  • DOMDocument::loadHTML() - 文字列から HTML を読み込む
  • DOMDocument::loadHTMLFile() - ファイルから HTML を読み込む

User Contributed Notes

RiKdnUA at mail dot ru 27-Jul-2013 04:15
saveHTMLFile() always saves the file in UTF-8. Even if the DOMDocument->encoding explicitly prescribe different from UTF-8 encoding. All "non-Latin" characters will be converted to HTML-entities. Tested in PHP 5.2.9-2 and PHP 5.2.17. Example:

<?php
$document=new domDocument('1.0', 'WINDOWS-1251');
$document->loadHTML('<html><head><title>Russian language</title></head><body>Русский язык</body></html>');
$document->formatOutput=true;
$document->encoding='WINDOWS-1251';
echo "Записано байт. Recorded bytes: ".$document->saveHTMLFile('html.html');
?>

Method recorded file in UTF-8 encoding. The contents of the file html.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; CHARSET=shift-jis">
<title>Russian language</title>
</head>
<body>Donneee ycue</body>
</html>
naebeth at hotmail dot NOSPAM dot com 24-Sep-2012 10:03
Not mentioned in the documentation is the fact that using DOMDocument::saveHTMLFile() will automatically overwrite the contents if an existing file is used - with no notice, warning or error thrown.

Make sure you check the filename before using this function so that you don't accidentally overwrite important files.

Example:
<?php

$file = fopen('test.html', 'w');
fwrite($file, 'this is some text');
fclose($file);

$doc = new DOMDocument();
$doc->formatOutput = true;
$doc->loadHTML('<html><head><title>Test</title></head><body></body></html>');
$doc->saveHTMLFile('test.html');

// test.html
/*
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; CHARSET=shift-jis">
<title>Test</title>
</head>
<body></body>
</html>
*/

?>

If you're dynamically generating a series of pages using DOMDocument objects, make sure you are also dynamically generating the file or directory names using something that can't easily be confused for an existing file/folder, or check if the desired path already exists before saving so that you don't accidentally delete previous files.
deep42thouSPAMght42 at y_a_h_o_o dot com 14-Jan-2011 03:46
I foolishly assumed that this function was equivalent to
<?php
file_put_contents($filename, $document->saveHTML());
?>
but there are differences in the generated HTML:
<?php
$doc = new DOMDocument();
$doc->loadHTML(
    '<html><head><title>Test</title></head><body></body></html>'
);
$doc->encoding = 'iso-8859-1';

echo $doc->saveHTML();
#<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
#<html>
#<head><title>Test</title></head>
#<body></body>
#</html>

$doc->saveHTMLFile('output.html');
#<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
#<html><head><meta http-equiv="Content-Type" content="text/html; CHARSET=shift-jis"><title>Test</title></head><body></body></html>

?>
Note that saveHTMLFile() adds a UTF-8 meta tag despite the ISO-8859-1 document encoding.


内部の XML ツリーを文字列として出力する

  • ≪ DOMDocument::saveHTMLFile
  • DOMDocument::schemaValidate ≫
  • PHP Manual
  • DOMDocument
  • 内部の XML ツリーを文字列として出力する

DOMDocument::saveXML

(PHP 5, PHP 7, PHP 8)

DOMDocument::saveXML — 内部の XML ツリーを文字列として出力する

説明

public DOMDocument::saveXML(?DOMNode $node = null, int $options = 0): string|false

DOM 表現から XML ドキュメントを作成します。この関数は、通常は以下の例のように DOM ドキュメントを新しく作成した後にコールされます。

パラメータ

node

ドキュメント全体ではなく、XML 宣言以外の特定のノードだけを 出力したい場合にこのパラメータを使用します。

options

追加のオプション。LIBXML_NOEMPTYTAG と LIBXML_NOXMLDECL がサポートされています。 PHP 8.3.0 より前のバージョンでは、LIBXML_NOEMPTYTAG だけがサポートされていました。

戻り値

XML、あるいはエラーが発生した場合は false を返します。

エラー / 例外

DOM_WRONG_DOCUMENT_ERR

node が別のドキュメントのものである場合に 発生します。

変更履歴

バージョン | 説明
8.3.0 | LIBXML_NOXMLDECL がサポートされました。

例

例1 DOM ツリーを文字列に保存する

<?php

$doc = new DOMDocument('1.0');
// 出力はきれいに整形したいですね。
$doc->formatOutput = true;

$root = $doc->createElement('book');
$root = $doc->appendChild($root);

$title = $doc->createElement('title');
$title = $root->appendChild($title);

$text = $doc->createTextNode('これはタイトルです');
$text = $title->appendChild($text);

echo "ドキュメント全体を保存します\n";
echo $doc->saveXML() . "\n";

echo "タイトルの部分のみを保存します\n";
echo $doc->saveXML($title);

?>

上の例の出力は以下となります。

ドキュメント全体を保存します
<?xml version="1.0"?>
<book>
  <title>これはタイトルです</title>
</book>

タイトルの部分のみを保存します
<title>これはタイトルです</title>

参考

  • DOMDocument::save() - 内部の XML ツリーをファイルに出力する
  • DOMDocument::load() - ファイルから XML を読み込む
  • DOMDocument::loadXML() - 文字列から XML を読み込む

User Contributed Notes

liumenglei0211 at 163 dot com 17-Jan-2019 07:50
How to display two tags when the node content is empty.

<?php
$dom     = new \DOMDocument('1.0');
$document = $dom->createElement('document');
$document = $dom->appendChild($document);
$head = $dom->createElement('title','this is title');
$content = $dom->createElement('content','');
$document->appendChild($head);
$document->appendChild($content);
echo $dom->saveXML();
?>

In XML, they are considered exactly the same thing, and any parser should recognize both forms.However, you can write it this way if you still need it

<?php
echo $dom->saveXML($dom->documentElement, LIBXML_NOEMPTYTAG);
?>

Example 1：

<?xml version="1.0"?>
<document>
    <title>this is title</title>
    <content/>
</document>

Example 2：
<document>
    <title>this is test</title>
    <content></content>
</document>
Frank 29-Mar-2017 06:40
I would like to create a DOM document Xml Guestbook ..can somebody help to me?

Username, Comments in form read/write the task.

Thanks if somebody save me :)
Alexander Fedulin 05-Mar-2014 08:29
As @fbernodi said earlier, there is a problem with saveXML of DOMNode when you have a number of defined namespaces. The simple solution for this:

<code>
   // $node is some node of some other document
   $temp_document = new DOMDocument('1.0', 'utf-8');
   $temp_document->appendChild($temp_document->importNode($node, true));
   echo $temp_document->saveXML();
</code>
fbernoldi at gmail dot com 01-Aug-2013 08:24
Hello,

I had an unexpected behavior in some parsing code, because of this saveXML method that is saving the tags without namespace specification. If you try to load into a DOMDocument a string saved from a DOMNode that has a referenced namespace but it the original document it was not defined in that element, you get a not well formed xml. In the example you can see the issue and a possible solution, the other solution may be add to the ChildElement node the namespace reference (<testNS:ChildElement testNS="http://example.org">), but in my scenario it was not needed.

<?php

//Test XML
$test_xml =
"<?xml version=\"1.0\"?>
<testNS:RootNode xmlns:testNS=\"http://example.org\">
    <testNS:ChildElement>
        <testNS:AnotherChildElement>I'm a Another Child node.</testNS:AnotherChildElement>
    </testNS:ChildElement>
</testNS:RootNode>";

//We define our Test DOMDocument
$domDoc = new DOMDocument("1.0");
$domDoc->loadXML($test_xml);

//We use xpath to search ChildElement:
$domXPath = new DOMXPath($domDoc);
$domXPath->registerNamespace("testNS", "http://example.org");
$DOMNodeList_ChildElement = $domXPath->query("//testNS:RootNode/testNS:ChildElement");
$ChildElement = $DOMNodeList_ChildElement->item(0);

echo "Not usefull xml to load in another document:\n\n";
echo $domDoc->saveXML($ChildElement);

/* Output here:
 *
 * Not usefull xml to load in another document:
 *
 *  <testNS:ChildElement>
 *        <testNS:AnotherChildElement>I'm a Another Child node.</testNS:AnotherChildElement>
 *    </testNS:ChildElement>
 *
 */

/**
 * Function to help us clone the element to another document.
 * @param DOMElement $node The node to clone.
 * @param DOMDocument $doc The document where we are going to reference the elements.
 * @return DOMElement The new cloned element without namespace.
 */
function cloneNode($node, $doc) {
    //Create new element with the original localName (w/o namespace)
    $nd = $doc->createElement($node->localName);

    //Clone attributes
    foreach($node->attributes as $value)
        $nd->setAttribute($value->localName, $value->value);

    //No more childs then we finish.
    if (!$node->childNodes)
        return $nd;
    //We have childs, add them
    foreach($node->childNodes as $child) {
        if ($child->nodeName=="#text") //Only needed to clone text nodes, i.e. text comments, spaces, tabs. etc.
            $nd->appendChild($doc->createTextNode($child->nodeValue));
        else
            $nd->appendChild(cloneNode($child, $doc)); //recursion to clone all children.
    }
    return $nd;
}

//New Document to reference the new node without namespaces
$domDoc2 = new DOMDocument("1.0");

//We clone this node taking out the namespace
$new_node = cloneNode($ChildElement, $domDoc2);

echo "\n\nWe can load this into a DOMDocument without problems:\n\n";
echo $domDoc2->saveXML($new_node);

/*
 * We can load this into a DOMDocument without problems:
 *
 *    <ChildElement>
 *        <AnotherChildElement>I'm a Another Child node.</AnotherChildElement>
 *    </ChildElement>
 */

?>
xianrenb at gmail dot com 15-Jul-2012 10:54
If you want to save xhtml (in a string), you may try the following method:
<?php
    $doc = new DOMDocument('1.0');

    // ...

    $xhtml = (string) $doc->saveXML($doc->doctype);
    $xhtml .= "\n";
    $xhtml .= (string) $doc->saveXML($doc->documentElement);
?>
samstah at gmail dot com 19-Mar-2010 03:56
We discovered using DOMDocument::saveHTML() that it converts to HTML 4.01 compatible markup; rather than XHTML. The simple answer is to use saveXML() instead, although this adds the XML declaration to the top.

To qjerry.com at gmail.com, thanks for the pointer below - but I think that the simplest way seems to be using:
<?php $domDocument->saveXML($domDocument->documentElement); ?>

Of course, if you're dealing with XHTML, this will strip any <!DOCTYPE> declarations in the document too.
qjerry.com at gmail.com 04-May-2009 04:24
The simpliest (and probably the fastest) way to strip an XML declaration (<?xml version="1.0" ... ?>) out of output document, is to output child nodes of DOMDocument separately:

<?php

$document = new DOMDocument();
$document->load('/some/file.xml');

// this will also output doctype and comments at top level
foreach($document->childNodes as $node)
    $result .= $document->saveXML($node)."\n";

echo $result;

?>

This might be userful when dealing with browser compatibility issues, for example, well known problem with valid XHTML in IE6.
vikramvmalhotra at hotmail dot com 27-Jan-2009 03:49
if you are storing multi-byte characters in XML, then saving the XML using saveXML() will create problems. It will spit out the characters converted in encoded format.

<?php
$str = domdoc->saveXML(); // gives "&x#1245;" some encoded data
?>

Instead do the following

<?php
$str = domdoc->saveXML(domdoc->documentElement); // gives "保存しました" correct multi-byte data
?>
shinsh at shinmugen dot net 23-May-2008 07:57
Be careful, this function has been changed in 5.2.6 version. Adding a required parameter which is not that required wasn't the most intelligent idea ever, especially for a function which is often used.

To fix your programs if you have an error, fill the first parameter like this:

$dom->saveXML($dom->documentElement);

Why didn't the devs simply implement this as optional parameter, fixing the default parameter as documentElement?
Kriogen 26-Dec-2007 12:57
Create before test.xml with:
<?xml version="1.0" encoding="utf-8"?>
<Photos>
</Photos>

and past after in your php-file:

<?php
$simp = simplexml_load_file('test.xml');
$node = $simp->addChild('home');
$node->addChild('mychild', 'insert text');
$s = simplexml_import_dom($simp);
$s->saveXML('test.xml');
?>

This code creating a child-nod in the root.
Owner http://www.mensfashion.ru
JITR 02-Aug-2007 05:10
Comment to `devin at SPAMISBAD dot tritarget dot com''s post:

Thanks for pointing out the pitfalls of `formatOutput' vs. `load*()'. This has certainly saved me from some possible surprises.

I think the seemingly strange behaviour can be explained. Warning: The following stuff is mostly based on deductions and experiments. Much less on studying the sources and specs (I'm not sure some of these would provide answer anyway, at least not easily).

As you point out, `preserveWhiteSpace' must be set before loading the DOM from the source string (I'm working with `loadXML()' but I believe the situation should be the same with `load()' you used). This looks logical, as this property seems to control the parsing and DOM creation process during which text nodes containing the whitespace are either included or dropped. This can be proven by dumping the DOM structure and comparing the results based on the value of `preserveWhiteSpace'. With `preserveWhiteSpace' set to `FALSE', no text nodes containing whitespace will be present in the returned DOM. When this property is `TRUE', these nodes will be present.

Note: When speaking about the whitespace in the previous paragraph, we're most certainly speaking about so called `whitespace in element content' or `element content whitespace', if I'm not mistaken. See also my comment in the notes of `DOMText->isWhitespaceInElementContent()' method.

As for the mysterious effect on the output of `saveXLM()', I think the explanation lies in the presence or absence of the above mentioned whitespace text nodes. This was also proven by experiments: After adding such a node into a DOM which contained none (the DOM was created using `loadXML()' with `preserveWhiteSpace' set to `FALSE'), the output formatting got affected in a such a way, the formatting got lost for the rest of the document after the added node. I think the presence of whitespace text nodes forces such rendering, that the content of these nodes is used to separate adjoining nodes thus disabling default formatting. Only when there are no such text nodes present, the ouput formatting takes effect (provided the `formatOutput' is set to `TRUE', of course).

Well, the thing I don't really understand is how you did get an output of a signle line with `formatOutput' set to `TRUE'. This has happened to me when no whitespace text nodes were present (ie. when loading the XML with `preserveWhiteSpace' set to `FALSE') *and* with `formatOutput' set to *`FALSE'* (with the opposite value of `formatOutput', the formatting should do it's work and you should not end up with just one line). But I haven't seen your source. Perhaps you had whitespace nodes containing no new-lines in your DOM?

As for the CAUTION about root element, I didn't see any problems with empty root element neither in shortened nor full form. What did you have in mind, when you said it `WORKS' or `DOES NOT WORK'?
Sander 25-Apr-2007 05:35
Note that for large DOM trees (tens of thousands of elements nested at least a few levels deep), setting formatOutput to true drives up memory usage to rather insane levels when you call saveXML(). (Tested with PHP 5.2.1) Pretty output is not worth that cost.
nevyn at NOSPAM dot email dot PLEASE dot it 27-Dec-2006 01:41
A little function to get the full xml contents of a Xml node.

function innerXml($node)
{
    $out = $node->ownerDocument->saveXML($node);
    $re = "{^<(\\w*)(?:\\s*\\w+=(?:\"[^\"]*\"|\'[^\']*\'))*\\s*>(.*)</\\1>$}";
    preg_match($re, $out, $mat);
    return $mat[2];
}
devin at SPAMISBAD dot tritarget dot com 14-Aug-2006 10:52
It took some searching to figure this one out. I didn't see much in the way of explaining this glitch in the manual thus far. (For PHP5 I believe)

formatOutput = true; appears to fail when the origin of the DOM came from a file via load(). EX:

<?php
    $dom = new DOMDocument();
    $dom->load ("test.xml");
    $dom->formatOutput = true;

    $new_tag = $dom->createElement ('testNode');
    $new_tag->appendChild (
        $dom->createElement ('test', 'this is a test'));
    $dom->documentElement->appendChild ($new_tag);

    printf ("<pre>%s</pre>", htmlentities ($dom->saveXML()));
?>

Will not indent the output and will display the modified nodes all in one long line. Makes for editing a config.xml a bit difficult when saving to a file.

By adding the preserveWhiteSpace = false; BEFORE the load() the formatOutput works as expected. EX:

<?php
    $dom = new DOMDocument();
    $dom->preserveWhiteSpace = false;
    $dom->load ("test.xml");
    $dom->formatOutput = true;

    $new_tag = $dom->createElement ('testNode');
    $new_tag->appendChild (
        $dom->createElement ('test', 'this is a test'));
    $dom->documentElement->appendChild ($new_tag);

    printf ("<pre>%s</pre>", htmlentities ($dom->saveXML()));
?>

CAUTION: If your loaded xml file (test.xml) has an empty root node that is not shortened or has no children this will NOT work.

Example:

DOES NOT WORK:
<?xml version="1.0"?>
<root>
</root>

WORKS:
<?xml version="1.0"?>
<root/>

WORKS:
<?xml version="1.0"?>
<root>
  <!-- comment -->
</root>

WORKS:
<?xml version="1.0"?>
<root>
  <child/>
</root>
26-Mar-2006 04:20
I used the function posted by "joe" but the following works to me for get the innerXML
<?php
$itemLeido = $XMLRespuesta->getElementsByTagName("articulos");
foreach($itemLeido as $node) {
    echo($node->ownerDocument->saveXML($node));
}
?>
mswiercz at mwerk dot com 10-Sep-2004 03:43
Quick tip to minimize memory when generating documents with DOM.

Rather than using
   $xmlStr = DOMDocument->saveXML();
   echo $xmlStr;

to dump a large DOM to the output buffer, use a PHP output stream, as in

   DOMDocument->save('php://output');

A lot of memory will be saved when generating large DOMs.
padys at tlen dot pl 05-Aug-2004 07:36
When you save whole document:
DOMDocument->saveXML() produces string in encoding defined in property DOMDocument->encoding.

When you save only one node:
DOMDocument->saveXML(DOMNode) produces always string in UTF-8.


スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。

  • ≪ DOMDocument::saveXML
  • DOMDocument::schemaValidateSource ≫
  • PHP Manual
  • DOMDocument
  • スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。

DOMDocument::schemaValidate

(PHP 5, PHP 7, PHP 8)

DOMDocument::schemaValidate — スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。

説明

public DOMDocument::schemaValidate(string $filename, int $flags = 0): bool

指定されたスキーマファイルに基づいてドキュメントを検証します。

パラメータ

filename

スキーマへのパス。

flags

Libxml のスキーマ検証フラグのビットマスク。現在サポートしている値は LIBXML_SCHEMA_CREATE だけです。 Libxml 2.6.14 以降で使えます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMDocument::schemaValidateSource() - スキーマに基づいてドキュメントを検証する
  • DOMDocument::relaxNGValidate() - ドキュメントを relaxNG で検証する
  • DOMDocument::relaxNGValidateSource() - ドキュメントを relaxNG で検証する
  • DOMDocument::validate() - DTD に基づいてドキュメントを検証する

User Contributed Notes

mmamsch at googlemail dot com 16-Sep-2015 10:01
A note for people trying to validate complex schemas with PHP.  It seems that libxml will not automatically try to import referenced schemas, but simply skip the validation if the schemas were not explicitly imported.

In our example we tried to validate an XML file against a schema with the namespace "xttp://automotive-his.de/200706/rif" that contains a reference to the namespace "xttp://automotive-his.de/200706/rif-xhtml":

  <xsd:complexType name="XHTML-CONTENT">
    <xsd:sequence>
      <xsd:any namespace="xttp://automotive-his.de/200706/rif-xhtml"/>
    </xsd:sequence>
  </xsd:complexType>

which basically says that an xhtml-content element can contain any element from the rif-xhtml namespace.

However since libxml does not know where to find the schema file, it will stop the validation if the elements from the referenced namespace, passing also document with invalid xhtml content as valid.

The solution was to create a combined schema, which contains import statements for all files matching the referenced schemas:

<xsd:schema xmlns:xs="xttp://www.w3.org/2001/XMLSchema">
<xs:import namespace="xttp://automotive-his.de/200706/rif-xhtml" schemaLocation="rif-xhtml.xsd"/>
<xs:import namespace="xttp://automotive-his.de/200706/rif" schemaLocation="rif.xsd"/>
<xs:import namespace="xttp://www.w3.org/XML/1998/namespace" schemaLocation="../xml.xsd"/>
</xsd:schema>

Note that the schemaLocation tells the validator, where to find the files for the corresponding namespaces. When validating the XML document against this combined schema, libxml validated correctly the content inside the XHTML-Content.

Hope this helps someone out there.
wkoehler at ce-gmbh dot com 11-Jan-2011 02:37
In older versions of PHP5 this function might cause error messages when dealing with namespaces. I had problems with PHP 5.2.14 which comes with libXML V2.6.16. After switching to PHP 5.3.5 with libXML V2.7.7 I no longer had problems. Took me only about 30 hrs to figure that one out.
NetPanther 27-Mar-2009 01:42
Initial situation:
- Debian Lenny
- Apache 2 with PHP 5.2.6
- libxml 2.6.32

Problem: While trying to validate a manually created (!) DOMDocument against an existing XML Schema, I ran into a warning like the one below. Validation fails, even though the document IS valid and the command line tool xmllint confirms this (even with libxml 2.6.32, so this must be a problem with DOM). The validation works fine with libxml 2.7.3.

Warning: DOMDocument::schemaValidate() [domdocument.schemavalidate]: Element 'YourRootElementName': No matching global declaration available for the validation root. in /var/www/YourFile.php on line X

Solution: As libxml 2.7.3 is not provided for Debian Lenny yet and this problem seems to be caused by DOM (s.o.), I currently use the following workaround on my machines. DOM obviously has some namespace problems with documents, that have been created manually (i.e. they were not loaded from a file).

So my workaround is saving the DOMDocument temporarily, re-loading it and then validating the temporary DOMDocument. Strangely enough the validation of the same document (= same content) now works. Sure, creating a temporary file is not a nice solution, but unless this bug is fixed, this workaround should do just fine.

<?php

// Works with libxml 2.7.3 and higher.
public function isValid()
{
  return $this->dom->schemaValidate('schema.xsd');
}

// Workaround for prior libxml versions, e.g. 2.6.32.
public function isValid()
{
  // Create temporary file and save manually created DOMDocument.
  $tempFile = time() . '-' . rand() . '-document.tmp';
  $this->dom->save($tempFile);

  // Create temporary DOMDocument and re-load content from file.
  $tempDom = new DOMDocument();
  $tempDom->load($tempFile);

  // Delete temporary file.
  if (is_file($tempFile))
  {
    unlink($tempFile);
  }

  // Validate temporary DOMDocument.
  return $tempDom->schemaValidate('schema.xsd');
}

?>
poletto at jeuxvideo dot com 13-Feb-2008 12:32
I had a tricky issue using this method, i thought it was bug but i realized i misundestood something about namespaces.
When you want to use a schema to describe an xml document, you basically put the default namespace to a personnal namespace (and you refer to this namespace in the targetNamespace attribute of your schema).

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://my.uri.net">
  <elt>
    <x>blabla</x>
    <y>blabla</y>
  </elt>
</root>

That xmlns attribute specifies a "default namespace" and means that the root element and its children are in this namespace.
What i misunderstood is that, there's no way with the DOM api to specify a "default namespace" for each children of the root element.
Thus you may need to use createElementNS() and createAttributeNS() methods for each created element or attribute in the document specifying the URI of your namespace each time ("http://my.uri.net").

This only applies if you want to validate a document built with the API, not with a document loaded from an xml file or stream.
justin at redwiredesign dot com 08-Nov-2006 03:32
In his previous comment, Mike A wrote about validating documents using an XSD. However, you can validate without one. In my case, I needed to ensure that the content entered was just valid XML or not, and I couldn't find an XSD to support that. So I wrote this:

public static function validate($xml)
{
    libxml_use_internal_errors(true);

    $doc = new DOMDocument('1.0', 'utf-8');
    $doc->loadXML($xml);

    $errors = libxml_get_errors();
    if (empty($errors))
    {
        return true;
    }

    $error = $errors[0];
    if ($error->level < 3)
    {
        return true;
    }

    $lines = explode("\r", $xml);
    $line = $lines[($error->line)-1];

    $message = $error->message.' at line '.$error->line.':<br />'.htmlentities($line);

    return $message;
}

The catch here is that the function only checks for the first error is LIBXML_ERR_FATAL, which would break XSL/XML compilation.

In my experience, the errors are returned by libxml_get_errors in descending severity, so this may be an OK thing to do.
Mike A. 17-Feb-2006 12:03
For more detailed feedback from DOMDocument::schemaValidate, disable libxml errors and fetch error information yourself.  See http://php.net/manual/en/ref.libxml.php for more info.

example.xml
<?xml version="1.0"?>
<example>
    <child_string>This is an example.</child_string>
    <child_integer>Error condition.</child_integer>
</example>

example.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
    <xs:element name="example">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="child_string" type="xs:string"/>
                <xs:element name="child_integer" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

<?php

function libxml_display_error($error)
{
    $return = "<br/>\n";
    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "<b>Warning $error->code</b>: ";
            break;
        case LIBXML_ERR_ERROR:
            $return .= "<b>Error $error->code</b>: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "<b>Fatal Error $error->code</b>: ";
            break;
    }
    $return .= trim($error->message);
    if ($error->file) {
        $return .=    " in <b>$error->file</b>";
    }
    $return .= " on line <b>$error->line</b>\n";

    return $return;
}

function libxml_display_errors() {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        print libxml_display_error($error);
    }
    libxml_clear_errors();
}

// Enable user error handling
libxml_use_internal_errors(true);

$xml = new DOMDocument();
$xml->load('example.xml');

if (!$xml->schemaValidate('example.xsd')) {
    print '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
    libxml_display_errors();
}

?>

Old error message:
Warning: DOMDocument::schemaValidate() [function.schemaValidate]: Element 'child_integer': 'Error condition.' is not a valid value of the atomic type 'xs:integer'. in example.php on line 40

New error message:
DOMDocument::schemaValidate() Generated Errors!
Error 1824: Element 'child_integer': 'Error condition.' is not a valid value of the atomic type 'xs:integer'. in example.xml on line 4


スキーマに基づいてドキュメントを検証する

  • ≪ DOMDocument::schemaValidate
  • DOMDocument::validate ≫
  • PHP Manual
  • DOMDocument
  • スキーマに基づいてドキュメントを検証する

DOMDocument::schemaValidateSource

(PHP 5, PHP 7, PHP 8)

DOMDocument::schemaValidateSource — スキーマに基づいてドキュメントを検証する

説明

public DOMDocument::schemaValidateSource(string $source, int $flags = 0): bool

指定した文字列に定義されているスキーマに基づいてドキュメントを検証します。

パラメータ

source

スキーマを含む文字列。

flags

Libxml のスキーマ検証フラグのビットマスク。現在サポートしている値は LIBXML_SCHEMA_CREATE だけです。 Libxml 2.6.14 以降で使えます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMDocument::schemaValidate() - スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。
  • DOMDocument::relaxNGValidate() - ドキュメントを relaxNG で検証する
  • DOMDocument::relaxNGValidateSource() - ドキュメントを relaxNG で検証する
  • DOMDocument::validate() - DTD に基づいてドキュメントを検証する

User Contributed Notes

There are no user contributed notes for this page.


DTD に基づいてドキュメントを検証する

  • ≪ DOMDocument::schemaValidateSource
  • DOMDocument::xinclude ≫
  • PHP Manual
  • DOMDocument
  • DTD に基づいてドキュメントを検証する

DOMDocument::validate

(PHP 5, PHP 7, PHP 8)

DOMDocument::validate — DTD に基づいてドキュメントを検証する

説明

public DOMDocument::validate(): bool

DTD に基づいてドキュメントを検証します。

DTD による検証を行うには、DOMDocument の validateOnParse プロパティを使用することも可能です。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。 ドキュメントに DTD が添付されていない場合は、このメソッドは false を返します。

例

例1 DTD による検証の例

<?php
$dom = new DOMDocument;
$dom->load('book.xml');
if ($dom->validate()) {
echo "このドキュメントは正常です!\n";
}
?>

XML ファイルの読み込み時に検証することも可能です。

<?php
$dom = new DOMDocument;
$dom->validateOnParse = true;
$dom->load('book.xml');
?>

参考

  • DOMDocument::schemaValidate() - スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。
  • DOMDocument::schemaValidateSource() - スキーマに基づいてドキュメントを検証する
  • DOMDocument::relaxNGValidate() - ドキュメントを relaxNG で検証する
  • DOMDocument::relaxNGValidateSource() - ドキュメントを relaxNG で検証する

User Contributed Notes

cabral dot brc at gmail dot com 08-Sep-2010 12:46
I was trying to validate my SVG file just to get the IDs with getElementById(),

<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<text id="text_titulo" x="150" y="20" font-family="Arial" font-size="15px" style="font-weight:bold;">Title</text>
<text id="text_subtitulo" x="200" y="35" font-family="Arial" font-size="10px">Sub Title</text>
<g transform="translate(0,50) scale(0.1)">
  <a id="a_AC" ...... >
    <polygon id="polygon_AC" ....... />
  </a>
</g>
</svg>

but when calling $dom->load(), it was getting the errors "failed to open stream" and "Validation failed: no DTD found !I/O warning : failed to load external entity"
so I created my own validation wrapper (I just want to find the IDs with getElementById() )

<?php
  $docSVG = new DOMDocument();
  $docSVG->load(realpath($filepath));
  setAllId($docSVG);

function setAllId($DOMNode){
  if($DOMNode->hasChildNodes()){
    foreach ($DOMNode->childNodes as $DOMElement) {
      if($DOMElement->hasAttributes()){
        $id=$DOMElement->getAttribute("id");
        if($id){
          $DOMElement->setIdAttribute("id",$id);
        }
      }
      setAllId($DOMElement);
    }
  }
}
?>
a dot schaffhirt at sedna-soft dot de 17-Sep-2008 02:22
When validating documents with this method there are two issues I don't like about it. First, it creates a bunch of warnings, which one would not expect, as the plot of calling this method is preventing any warnings that could occur when erroneously relying on the document's validity. Second, it only returns a boolean with no chance of getting additional details about the reasons for rendering invalid.

That's the reason for me to use a little wrapper, which I post here in case anyone finds it useful.

Please note that it only works with PHP5 or later.

<?php
    class MyDOMDocument {
        private $_delegate;
        private $_validationErrors;

        public function __construct (DOMDocument $pDocument) {
            $this->_delegate = $pDocument;
            $this->_validationErrors = array();
        }

        public function __call ($pMethodName, $pArgs) {
            if ($pMethodName == "validate") {
                $eh = set_error_handler(array($this, "onValidateError"));
                $rv = $this->_delegate->validate();
                if ($eh) {
                    set_error_handler($eh);
                }
                return $rv;
            }
            else {
                return call_user_func_array(array($this->_delegate, $pMethodName), $pArgs);
            }
        }
        public function __get ($pMemberName) {
            if ($pMemberName == "errors") {
                return $this->_validationErrors;
            }
            else {
                return $this->_delegate->$pMemberName;
            }
        }
        public function __set ($pMemberName, $pValue) {
            $this->_delegate->$pMemberName = $pValue;
        }
        public function onValidateError ($pNo, $pString, $pFile = null, $pLine = null, $pContext = null) {
            $this->_validationErrors[] = preg_replace("/^.+: */", "", $pString);
        }
    }
?>

<?php
    // $doc is a DOMDocument object
    $myDoc = new MyDOMDocument($doc); // copy constructor

    // do anything with $myDoc that you would with $doc

    $isValid = $myDoc->validate(); // won't create warnings
    if (!$isValid) {
        print_r($myDoc->errors); // the array all warnings are collected in
    }
?>

Maybe you need to change the the part
preg_replace("/^.+: */", "", $pString)
to something different depending on your system's error reporting settings (HTML or plain text), whatsoever

Best Regards,

Anja
darren at viamedia dot co dot za 05-Aug-2008 07:19
If you are loading xml with the intention of validating it against an internal dtd and you have experienced issues with the validation it could be related to missing LIBXML constants.

I found this post by "aidan at php dot net" in root level dom docs and thought it might be more useful here:
As of PHP 5.1, libxml options may be set using constants rather than the use of proprietary DomDocument properties.

DomDocument->resolveExternals is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDATTR

DomDocument->validateOnParse is equivilant to setting
LIBXML_DTDLOAD
LIBXML_DTDVALID

PHP 5.1 users are encouraged to use the new constants.

Example:
<?php
$dom = new DOMDocument;
// Resolve externals
$dom->load($file, LIBXML_DTDLOAD|LIBXML_DTDATTR);
// OR
// Validate against DTD
$dom->load($file, LIBXML_DTDLOAD|LIBXML_DTDVALID);
$dom->validate();
?>


DOMDocument オブジェクト内の XIncludes を置換する

  • ≪ DOMDocument::validate
  • DOMDocumentFragment ≫
  • PHP Manual
  • DOMDocument
  • DOMDocument オブジェクト内の XIncludes を置換する

DOMDocument::xinclude

(PHP 5, PHP 7, PHP 8)

DOMDocument::xinclude — DOMDocument オブジェクト内の XIncludes を置換する

説明

public DOMDocument::xinclude(int $options = 0): int|false

このメソッドは、DOMDocument オブジェクト内の » XIncludes を置換します。

注意:

include される XML ファイルに DTD が添付されている場合は libxml2 が自動的にエンティティを解決するため、 このメソッドは予期せぬ結果を引き起こすことがあります。

パラメータ

options

追加の Libxml パラメータ を、ビット演算子の OR で指定します。

戻り値

ドキュメント内の XIncludes の数を返します。 何かの処理に失敗した場合は -1、 置換が発生しなかった場合は false を返します。

例

例1 DOMDocument::xinclude() の例

<?php

$xml = <<<EOD
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Books of the other guy..</title>
<para>
<xi:include href="book.xml">
<xi:fallback>
<error>xinclude: book.xml not found</error>
</xi:fallback>
</xi:include>
</para>
</chapter>
EOD;

$dom = new DOMDocument;

// 見た目をきれいにします
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;

// 上で定義した XML 文字列を読み込みます
$dom->loadXML($xml);

// xincludes を置換します
$dom->xinclude();

echo $dom->saveXML();

?>

上の例の出力は、 たとえば以下のようになります。

<?xml version="1.0"?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
  <title>Books of the other guy..</title>
  <para>
    <row xml:base="/home/didou/book.xml">
       <entry>The Grapes of Wrath</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>0140186409</entry>
      </row>
    <row xml:base="/home/didou/book.xml">
       <entry>The Pearl</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>014017737X</entry>
      </row>
    <row xml:base="/home/didou/book.xml">
       <entry>Samarcande</entry>
       <entry>Amine Maalouf</entry>
       <entry>fr</entry>
       <entry>2253051209</entry>
      </row>
  </para>
</chapter>

User Contributed Notes

nicolas_rainardNOSPAM at yahoo dot fr 12-Jul-2007 04:56
If you use the loadXML() method instead of the load() one (let's say, to process the XML string before loading and parsing it), you will have problems with xinclude(), because the parser will not know where to find the files to include.
Using chdir() before xinclude() will not help.

The solution is to set the documentURI property of the DOMDocument object accordingly to it's original filename, and everything will work fine !

<?php

$xml = file_get_contents($file);
$xml = do_something_with($xml);

$doc = new DOMDocument;
$doc->documentURI = $file;
$doc->loadXML($xml);
$doc->xinclude();

?>


DOMDocumentFragment クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMDocumentFragment extends DOMNode implements DOMParentNode {
/* プロパティ */
public readonly ?DOMElement $firstElementChild;
public readonly ?DOMElement $lastElementChild;
public readonly int $childElementCount;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct()
public append(DOMNode|string ...$nodes): void
public appendXML(string $data): bool
public prepend(DOMNode|string ...$nodes): void
public replaceChildren(DOMNode|string ...$nodes): void
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

childElementCount

子要素の数。

firstElementChild

最初の子要素。存在しない場合は null になります。

lastElementChild

最後の子要素。存在しない場合は null になります。

変更履歴

バージョン | 説明
8.0.0 | プロパティ firstElementChild, lastElementChild, childElementCount が追加されました。
8.0.0 | DOMDocumentFragment は、 DOMParentNode を実装しました。

目次

  • DOMDocumentFragment::append — 最後の子ノードの後ろにノードを追加する
  • DOMDocumentFragment::appendXML — 生の XML データを追加する
  • DOMDocumentFragment::__construct — DOMDocumentFragment オブジェクトを構築する
  • DOMDocumentFragment::prepend — 最初の子ノードの前にノードを追加する
  • DOMDocumentFragment::replaceChildren — 文書片の子を置換する

User Contributed Notes

peter at softcoded dot com 03-May-2017 03:31
DOMDocumentFragment makes it easy to add (or replace)
nodes. Individually creating nodes using DOM methods can
be tedious. Instead, do something like this:

/**
* Create fragment of colgroup
* @param DOMDocument $doc The DOMDocument
* @return DOMDocumentFragment
*/
function makeFragment($d){
  $chunk = <<<HTML
  <colgroup>
    <col class="c1"/>
    <col class="c2"/>
    <col class="c3"/>
    <col class="c4"/>
  </colgroup>
HTML;
  $fragment = $d->createDocumentFragment();
  $fragment->appendXML($chunk);
  return $fragment;
}
Ricki 29-Mar-2011 06:00
DOMDocumentFragment only appears useful if created from a parent DOMDocument eg.

1. $dom = new DOMDocument("1.0","UTF-8");
2. $docFrag = $dom->createDocumentFragment();
3. Now append items to $docFrag
4. Graft $docFrag contents back onto $dom at the desired location

Conversely taking this approach:
1. $dom = new DOMDocument("1.0","UTF-8");
2. $docFrag = new DOMDocumentFragment();
3. Now append items to $docFrag

...will fail on step 3 with a "read only" error as $docFrag is not created as a child of  DOMDocument.

I'm not sure of the reason for this: on the web people have cited security, and others have cited poor design however whatever the reason, it is really limiting when wanting to encapsulating generic independent DocumentFragments into classes for easy grafting to the desired tree. The only workarounds i have seen look expensive from a performance perspective and cumbersome from a coding perspective ie. create a  dummy $dom for temporary use.

(This is valid as of PHP 5.3) I've put this here as i've wasted a lot of time finding it out - I hope this saves others some heartache.

Using new DOMDocumentFramt
matthijs at stdin dot nl 29-Mar-2011 03:06
Note that DOMDocumentFragment is a bit special when it's added to another node. When that happens, not the fragment itself is added as a child, but all of the children of the fragment are moved over to the new parent node.

For example, consider this script:

<?php

/* Create a document and a fragment containing a single node */
$doc = new DOMDocument();
$fragment = $doc->createDocumentFragment();
$fragment->appendChild($doc->createElement('foo'));

/* Now, the foo node is a child of the fragment */
var_dump($fragment->firstChild);

/* After appending the fragment to another node, the children of the
 * fragment will have been transfered to that node (and the fragment is
 * not present in the children list!) */
$doc->appendChild($fragment);
/* So the fragment has no children anymore */
var_dump($fragment->firstChild);
/* But $doc has a single child, which is the foo element, not the
 * fragment */
var_dump($doc->childNodes->length);
var_dump($doc->firstChild);

?>

This produces the following output:

object(DOMElement)#3 (0) {
}
NULL
int(1)
object(DOMElement)#3 (0) {
}


最後の子ノードの後ろにノードを追加する

  • ≪ DOMDocumentFragment
  • DOMDocumentFragment::appendXML ≫
  • PHP Manual
  • DOMDocumentFragment
  • 最後の子ノードの後ろにノードを追加する

DOMDocumentFragment::append

(PHP 8)

DOMDocumentFragment::append — 最後の子ノードの後ろにノードを追加する

説明

public DOMDocumentFragment::append(DOMNode|string ...$nodes): void

ひとつ以上の nodes を、子のリストに追加します。 追加されるのは、最後の子ノードの後ろになります。

パラメータ

nodes

追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMDocumentFragment::append() の例

文書片にノードを追加します。

<?php
$doc = new DOMDocument;
$fragment = $doc->createDocumentFragment();
$fragment->appendChild($doc->createElement("hello"));

$fragment->append("beautiful", $doc->createElement("world"));

echo $doc->saveXML($fragment);
?>

上の例の出力は以下となります。

<hello/>beautiful<world/>

参考

  • DOMParentNode::append() - 最後の子ノードの後ろにノードを追加する
  • DOMDocumentFragment::prepend() - 最初の子ノードの前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


生の XML データを追加する

  • ≪ DOMDocumentFragment::append
  • DOMDocumentFragment::__construct ≫
  • PHP Manual
  • DOMDocumentFragment
  • 生の XML データを追加する

DOMDocumentFragment::appendXML

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

DOMDocumentFragment::appendXML — 生の XML データを追加する

説明

public DOMDocumentFragment::appendXML(string $data): bool

生の XML データを DOMDocumentFragment に追加します。

このメソッドは、DOM の標準にはないものです。 これは、XML DocumentFragment を DOMDocument に簡単に追加できるように作成されました。

標準に従いたい場合は、まずテンポラリの DOMDocument をダミーのルートで作成し、 追加したい XML データのルートの子ノードを順にループする必要があります。

パラメータ

data

追加する XML。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 XML データのドキュメントへの追加

<?php
$doc = new DOMDocument();
$doc->loadXML("<root/>");
$f = $doc->createDocumentFragment();
$f->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($f);
echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<root><foo>text</foo><bar>text2</bar></root>

User Contributed Notes

Thanks to Christoph. 07-Jun-2022 01:50
Strings such as " ' & < > may need to be escaped in advance.
In that case, you can use htmlspecialchars().
lpetrov(AT)axisvista.com 20-Jul-2007 05:45
Here is (maybe) a better example:
/**
* Helper function for replacing $node (DOMNode)
* with an XML code (string)
*
* @var DOMNode $node
* @var string $xml
*/
public function replaceNodeXML(&$node,$xml) {
 $f = $this->dom->createDocumentFragment();
 $f->appendXML($xml);
 $node->parentNode->replaceChild($f,$node);
}

Copied from the "PHP5 Dom Based Template" article at:
http://blog.axisvista.com/?p=35


DOMDocumentFragment オブジェクトを構築する

  • ≪ DOMDocumentFragment::appendXML
  • DOMDocumentFragment::prepend ≫
  • PHP Manual
  • DOMDocumentFragment
  • DOMDocumentFragment オブジェクトを構築する

DOMDocumentFragment::__construct

(PHP 5, PHP 7, PHP 8)

DOMDocumentFragment::__construct — DOMDocumentFragment オブジェクトを構築する

説明

public DOMDocumentFragment::__construct()

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


最初の子ノードの前にノードを追加する

  • ≪ DOMDocumentFragment::__construct
  • DOMDocumentFragment::replaceChildren ≫
  • PHP Manual
  • DOMDocumentFragment
  • 最初の子ノードの前にノードを追加する

DOMDocumentFragment::prepend

(PHP 8)

DOMDocumentFragment::prepend — 最初の子ノードの前にノードを追加する

説明

public DOMDocumentFragment::prepend(DOMNode|string ...$nodes): void

ひとつ以上の nodes を、子ノードのリストに追加します。 追加されるのは、最初の子ノードの前になります。

パラメータ

nodes

ノードの前に追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMDocumentFragment::prepend() の例

文書片のルートの前にノードを追加します。

<?php
$doc = new DOMDocument;
$fragment = $doc->createDocumentFragment();
$fragment->appendChild($doc->createElement("world"));

$fragment->prepend($doc->createElement("hello"), "beautiful");

echo $doc->saveXML($fragment);
?>

上の例の出力は以下となります。

<hello/>beautiful<world/>

参考

  • DOMParentNode::prepend() - 最初の子ノードの前にノードを追加する
  • DOMDocumentFragment::append() - 最後の子ノードの後ろにノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


文書片の子を置換する

  • ≪ DOMDocumentFragment::prepend
  • DOMDocumentType ≫
  • PHP Manual
  • DOMDocumentFragment
  • 文書片の子を置換する

DOMDocumentFragment::replaceChildren

(PHP 8 >= 8.3.0)

DOMDocumentFragment::replaceChildren — 文書片の子を置換する

説明

public DOMDocumentFragment::replaceChildren(DOMNode|string ...$nodes): void

文書片に含まれる子を、新しい nodes で置換します。

パラメータ

nodes

子を置き換えるノード 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMDocumentFragment::replaceChildren() の例

子を新しいノードで置換します

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><hello/></container>");
$fragment = $doc->createDocumentFragment();
$fragment->append("hello");

$fragment->replaceWith("beautiful", $doc->createElement("world"));

echo $doc->saveXML($fragment);
?>

上の例の出力は以下となります。

beautiful
<world/>

参考

  • DOMParentNode::replaceChildren() - ノード中の子を置換する
  • DOMDocumentFragment::append() - 最後の子ノードの後ろにノードを追加する
  • DOMDocumentFragment::prepend() - 最初の子ノードの前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


DOMDocumentType クラス

(PHP 5, PHP 7, PHP 8)

はじめに

各 DOMDocument は doctype 属性を保持しており、その値は null あるいは DOMDocumentType オブジェクトです。

クラス概要

class DOMDocumentType extends DOMNode {
/* プロパティ */
public readonly string $publicId;
public readonly string $systemId;
public readonly string $name;
public readonly DOMNamedNodeMap $entities;
public readonly DOMNamedNodeMap $notations;
public readonly string $internalSubset;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

publicId

外部サブセットの公開 ID。

systemId

外部サブセットのシステム ID。完全 URI である場合とそうでない場合がある。

name

DTD の名前。すなわち、DOCTYPE キーワードに続く値。

entities

DTD で宣言されている一般エンティティ (外部・内部とも) を含む DOMNamedNodeMap。

notations

DTD で宣言されている記法を含む DOMNamedNodeMap。

internalSubset

内部サブセットを文字列として取得する。存在しない場合は null となる。区切りの角括弧は含まない。

User Contributed Notes

There are no user contributed notes for this page.


DOMElement クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMElement extends DOMNode implements DOMParentNode, DOMChildNode {
/* プロパティ */
public readonly string $tagName;
public string $className;
public string $id;
public readonly mixed $schemaTypeInfo = null;
public readonly ?DOMElement $firstElementChild;
public readonly ?DOMElement $lastElementChild;
public readonly int $childElementCount;
public readonly ?DOMElement $previousElementSibling;
public readonly ?DOMElement $nextElementSibling;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $qualifiedName, ?string $value = null, string $namespace = "")
public after(DOMNode|string ...$nodes): void
public append(DOMNode|string ...$nodes): void
public before(DOMNode|string ...$nodes): void
public getAttribute(string $qualifiedName): string
public getAttributeNames(): array
public getAttributeNode(string $qualifiedName): DOMAttr|DOMNameSpaceNode|false
public getAttributeNodeNS(?string $namespace, string $localName): DOMAttr|DOMNameSpaceNode|null
public getAttributeNS(?string $namespace, string $localName): string
public getElementsByTagName(string $qualifiedName): DOMNodeList
public getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList
public hasAttribute(string $qualifiedName): bool
public hasAttributeNS(?string $namespace, string $localName): bool
public insertAdjacentElement(string $where, DOMElement $element): ?DOMElement
public insertAdjacentText(string $where, string $data): void
public prepend(DOMNode|string ...$nodes): void
public remove(): void
public removeAttribute(string $qualifiedName): bool
public removeAttributeNode(DOMAttr $attr): DOMAttr|false
public removeAttributeNS(?string $namespace, string $localName): void
public replaceChildren(DOMNode|string ...$nodes): void
public replaceWith(DOMNode|string ...$nodes): void
public setAttribute(string $qualifiedName, string $value): DOMAttr|bool
public setAttributeNode(DOMAttr $attr): DOMAttr|null|false
public setAttributeNodeNS(DOMAttr $attr): DOMAttr|null|false
public setAttributeNS(?string $namespace, string $qualifiedName, string $value): void
public setIdAttribute(string $qualifiedName, bool $isId): void
public setIdAttributeNode(DOMAttr $attr, bool $isId): void
public setIdAttributeNS(string $namespace, string $qualifiedName, bool $isId): void
public toggleAttribute(string $qualifiedName, ?bool $force = null): bool
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

childElementCount

子要素の数。

firstElementChild

最初の子要素。存在しない場合は null になります。

lastElementChild

最後の子要素。存在しない場合は null になります。

nextElementSibling

次の兄弟要素。存在しない場合は null になります。

previousElementSibling

前の兄弟要素。存在しない場合は null になります。

schemaTypeInfo

未実装。常に null を返す。

tagName

要素名

className

スペースで分割された、要素のクラスを表す文字列

id

要素のID

変更履歴

バージョン | 説明
8.0.0 | プロパティ firstElementChild, lastElementChild, childElementCount, previousElementSibling, nextElementSibling が追加されました。
8.0.0 | DOMElement は、 DOMParentNode と DOMChildNode を実装しました。

注意

注意:

DOM拡張モジュール は UTF-8 エンコーディングを使います。他のエンコーディングを扱う場合は、mb_convert_encoding(), UConverter::transcode(), iconv() を使ってください。

目次

  • DOMElement::after — 要素の後ろにノードを追加する
  • DOMElement::append — 最後のノードの後ろにノードを追加する
  • DOMElement::before — 要素の前にノードを追加する
  • DOMElement::__construct — 新しい DOMElement オブジェクトを作成する
  • DOMElement::getAttribute — 属性の値を返す
  • DOMElement::getAttributeNames — 属性の名前を取得する
  • DOMElement::getAttributeNode — 属性ノードを返す
  • DOMElement::getAttributeNodeNS — 属性ノードを返す
  • DOMElement::getAttributeNS — 属性の値を返す
  • DOMElement::getElementsByTagName — タグ名から要素を取得する
  • DOMElement::getElementsByTagNameNS — 名前空間 URI とローカル名から要素を取得する
  • DOMElement::hasAttribute — 属性が存在するかどうかを調べる
  • DOMElement::hasAttributeNS — 属性が存在するかどうかを調べる
  • DOMElement::insertAdjacentElement — 隣接する要素を挿入する
  • DOMElement::insertAdjacentText — 隣接するテキストを挿入する
  • DOMElement::prepend — 最初の子ノードの前にノードを追加する
  • DOMElement::remove — 要素を削除する
  • DOMElement::removeAttribute — 属性を削除する
  • DOMElement::removeAttributeNode — 属性を削除する
  • DOMElement::removeAttributeNS — 属性を削除する
  • DOMElement::replaceChildren — 要素中の子を置換する
  • DOMElement::replaceWith — 要素を新しいノードで置換する
  • DOMElement::setAttribute — 属性を新しく追加する、または変更する
  • DOMElement::setAttributeNode — 新しい属性ノードを要素に追加する
  • DOMElement::setAttributeNodeNS — 新しい属性ノードを要素に追加する
  • DOMElement::setAttributeNS — 新しい属性を追加する
  • DOMElement::setIdAttribute — ID 型の属性を名前で宣言する
  • DOMElement::setIdAttributeNode — ID 型の属性をノードで宣言する
  • DOMElement::setIdAttributeNS — ID 型の属性をローカル名および名前空間 URI で宣言する
  • DOMElement::toggleAttribute — 属性の値を切り替える

User Contributed Notes

johnny 03-Mar-2014 03:48
Get html of a node
 $html .= $dom->saveHTML($node);
Janne Enberg 07-Nov-2013 11:02
This page doesn't list the inherited properties from DOMNode, e.g. the quite important textContent property. It would be immensely helpful if it would list those as well.
felix dot klee at inka dot de 26-Feb-2013 03:23
How to rename an element and preserve attributes:

<?php

// Changes the name of element $element to $newName.
function renameElement($element, $newName) {
  $newElement = $element->ownerDocument->createElement($newName);
  $parentElement = $element->parentNode;
  $parentElement->insertBefore($newElement, $element);

  $childNodes = $element->childNodes;
  while ($childNodes->length > 0) {
    $newElement->appendChild($childNodes->item(0));
  }

  $attributes = $element->attributes;
  while ($attributes->length > 0) {
    $attribute = $attributes->item(0);
    if (!is_null($attribute->namespaceURI)) {
      $newElement->setAttributeNS('http://www.w3.org/2000/xmlns/',
                                  'xmlns:'.$attribute->prefix,
                                  $attribute->namespaceURI);
    }
    $newElement->setAttributeNode($attribute);
  }

  $parentElement->removeChild($element);
}

function prettyPrint($d) {
  $d->formatOutput = true;
  echo '<pre>'.htmlspecialchars($d->saveXML()).'</pre>';
}

$d = new DOMDocument( '1.0' );
$d->loadXML('<?xml version="1.0"?>
<library>
  <data a:foo="1" x="bar" xmlns:a="http://example.com/a">
    <invite>
      <username>jmansa</username>
      <userid>1</userid>
    </invite>
    <update>1</update>
  </data>
</library>');

$xpath = new DOMXPath($d);
$elements = $xpath->query('/library/data');
if ($elements->length == 1) {
  $element = $elements->item(0);
  renameElement($element, 'invites');
}

prettyPrint($d);

?>
loopduplicate at burningtoken dot com 22-Apr-2011 02:34
This works perfect for me as well:

<?php $xml = $domElement->ownerDocument->saveXML($domElement); ?>
Anonymous 24-Dec-2010 08:22
you can use DOMNode::nodeValue
DOMElement inherits this public property.

$elem->nodeValue
dpetroff ( at ) gmail.com 04-Dec-2010 11:24
Hi!

Combining all th comments, the easiest way to get inner HTML of the node is to use this function:

<?php
function get_inner_html( $node ) {
    $innerHTML= '';
    $children = $node->childNodes;
    foreach ($children as $child) {
        $innerHTML .= $child->ownerDocument->saveXML( $child );
    }

    return $innerHTML;
}
?>
nawaman at gmail dot com 03-Sep-2009 08:08
The following code shows can text-only content be extracted from a document.

<?php
function getTextFromNode($Node, $Text = "") {
    if ($Node->tagName == null)
        return $Text.$Node->textContent;

    $Node = $Node->firstChild;
    if ($Node != null)
        $Text = getTextFromNode($Node, $Text);

    while($Node->nextSibling != null) {
        $Text = getTextFromNode($Node->nextSibling, $Text);
        $Node = $Node->nextSibling;
    }
    return $Text;
}

function getTextFromDocument($DOMDoc) {
    return getTextFromNode($DOMDoc->documentElement);
}

$Doc = new DOMDocument();
$Doc->loadHTMLFile("Test.html");
echo getTextFromDocument($Doc)."\n";
?>
Daniel Morlock 07-May-2009 09:22
It would be nice to have a function which converts a document/node/element into a string.

Anyways, I use the following code snippet to get the innerHTML value of a DOMNode:

<?php
function getInnerHTML($Node)
{
     $Body = $Node->ownerDocument->documentElement->firstChild->firstChild;
     $Document = new DOMDocument();
     $Document->appendChild($Document->importNode($Body,true));
     return $Document->saveHTML();
}
?>
patrick smith 04-Nov-2008 08:14
Although it may be preferable to use the dom to manipulate elements, sometimes it's useful to actually get the innerHTML from a document element (e.g. to load into a client-side editor).

To get the innerHTML of a specific element ($elem_id) in a specific html file ($filepath):

<?php
$innerHTML = '';
$doc = new DOMDocument();
$doc->loadHTMLFile($filepath);
$elem = $doc->getElementById($elem_id);

// loop through all childNodes, getting html
$children = $elem->childNodes;
foreach ($children as $child) {
    $tmp_doc = new DOMDocument();
    $tmp_doc->appendChild($tmp_doc->importNode($child,true));
    $innerHTML .= $tmp_doc->saveHTML();
}
?>
Pinochet 25-Oct-2008 05:33
Hi to get the value of DOMElement just get the nodeValue public parameter (it is inherited from DOMNode):
<?php
echo $domElement->nodeValue;
?>
Everything is obvious if you now about this thing ;-)
j DOT wagner ( AT ) medieninnovation.com 08-Oct-2008 09:11
Caveat!
It took me almost an hour to figure this out, so I hope it saves at least one of you some time.

If you want to debug your DOM tree and try var_dump() or similar you will be fooled into thinking the DOMElement that you are looking at is empty, because var_dump() says: object(DOMElement)#1 (0) { }

After much debugging I found out that all DOM objects are invisible to var_dump() and print_r(), my guess is because they are C objects and not PHP objects. So I tried saveXML(), which works fine on DOMDocument, but is not implemented on DOMElement.

The solution is simple (if you know it):
$xml = $domElement->ownerDocument->saveXML($domElement);

This will give you an XML representation of $domElement.
Severin 14-Sep-2008 06:18
I wanted to find similar Elements - thats why I built an Xpath-String like this - maybe somebody needs it... its not very pretty - but neither is domdocument :)

<?php

$dom->load($xmlFile))

$xpathQuery = '//*';
$xmlNodes = $xpath->query($xpathQuery);

$pathlist = array();
$attrlist = array();
foreach ($xmlNodes as $node) {

  $depth = $this->_getDomDepth($node);   //get Path-Depth (for array key)
  $pathlist[$depth] = $node->tagName;     // tagname

  $attrs = $node->attributes;
  $attr='';
  $a=0;
  foreach ($attrs as $attrName => $attrNode)  // attributes
            {
              if ($attrName !='reg')
              {
                if ($a++!=0) $attr .= ' and ';
                $attr .= '@'.$attrName.'='."'".$attrNode->value."'";
              }
            }

          $attrlist[$depth] = $attr?'['.$attr.']':'';

          $path = ''; for ($i=0;$i<=$depth;$i++) $path .= '/'.$pathlist[$i].$attrlist[$i];  // the xpath of the actual Element

    // ... now you can go on and user $path to find similar elements
    }
  }
}

 private function _getDomDepth(DomNode $node)
   {
     $r = -2;
     while ($node) {
       $r++;
       $node = $node->parentNode;
     }
     return  $r;
   }
?>
ae.fxx 18-Jul-2008 01:49
Hi there.

Remember to append a DOMNode (or any of its descendants) to a DOMDocument __BEFORE__ you try to append a child to it.

I don't know why it has to be this way but it can't be done without it.

bye


要素の後ろにノードを追加する

  • ≪ DOMElement
  • DOMElement::append ≫
  • PHP Manual
  • DOMElement
  • 要素の後ろにノードを追加する

DOMElement::after

(PHP 8)

DOMElement::after — 要素の後ろにノードを追加する

説明

public DOMElement::after(DOMNode|string ...$nodes): void

渡された nodes を要素の後ろに追加します。

パラメータ

nodes

ノードの後ろに追加されるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMElement::after() の例

hello 要素の後ろにノードを追加します

<?php
$doc = new DOMDocument;
$doc->loadXML("<hello/>");
$container = $doc->documentElement;

$container->after("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<hello/>
beautiful
<world/>

参考

  • DOMChildNode::after() - ノードの後ろにノードを追加する
  • DOMElement::before() - 要素の前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


最後のノードの後ろにノードを追加する

  • ≪ DOMElement::after
  • DOMElement::before ≫
  • PHP Manual
  • DOMElement
  • 最後のノードの後ろにノードを追加する

DOMElement::append

(PHP 8)

DOMElement::append — 最後のノードの後ろにノードを追加する

説明

public DOMElement::append(DOMNode|string ...$nodes): void

ひとつ以上の nodes を子のリストに追加します。 追加されるのは、最後の子要素の後ろになります。

パラメータ

nodes

追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMElement::append() の例

container 要素の中に要素を追加します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container>hello </container>");
$world = $doc->documentElement;

$world->append("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container>hello beautiful<world/></container>

参考

  • DOMParentNode::append() - 最後の子ノードの後ろにノードを追加する
  • DOMElement::prepend() - 最初の子ノードの前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


要素の前にノードを追加する

  • ≪ DOMElement::append
  • DOMElement::__construct ≫
  • PHP Manual
  • DOMElement
  • 要素の前にノードを追加する

DOMElement::before

(PHP 8)

DOMElement::before — 要素の前にノードを追加する

説明

public DOMElement::before(DOMNode|string ...$nodes): void

渡された nodes を要素の前に追加します。

パラメータ

nodes

ノードの前に追加されるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMElement::before() の例

hello 要素の前にノードを追加します

<?php
$doc = new DOMDocument;
$doc->loadXML("<world/>");
$world = $doc->documentElement;

$world->before("hello", $doc->createElement("beautiful"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

hello
<beautiful/>
<world/>

参考

  • DOMChildNode::before() - ノードの前にノードを追加する
  • DOMElement::after() - 要素の後ろにノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


新しい DOMElement オブジェクトを作成する

  • ≪ DOMElement::before
  • DOMElement::getAttribute ≫
  • PHP Manual
  • DOMElement
  • 新しい DOMElement オブジェクトを作成する

DOMElement::__construct

(PHP 5, PHP 7, PHP 8)

DOMElement::__construct — 新しい DOMElement オブジェクトを作成する

説明

public DOMElement::__construct(string $qualifiedName, ?string $value = null, string $namespace = "")

新しい DOMElement オブジェクトを作成します。 このオブジェクトは読み込み専用です。このオブジェクトをドキュメントに 追加することが可能ですが、ノードがドキュメントに関連付けられるまでは ノードを追加することはできません。書き込み可能なノードを作成するには、 DOMDocument::createElement あるいは DOMDocument::createElementNS を使用します。

パラメータ

qualifiedName

要素のタグ名。namespaceURI をともに指定した場合、 この URI に関連付けられたプレフィックスが与えられます。

value

要素の値。

namespace

指定した名前空間の中で要素を作成するための 名前空間 URI。

例

例1 新しい DOMElement を作成する

<?php

$dom = new DOMDocument('1.0', 'iso-8859-1');
$element = $dom->appendChild(new DOMElement('root'));
$element_ns = new DOMElement('pr:node1', 'thisvalue', 'http://xyz');
$element->appendChild($element_ns);
echo $dom->saveXML(); /* <?xml version="1.0" encoding="iso-8859-1"?>
<root><pr:node1 xmlns:pr="http://xyz">thisvalue</pr:node1></root> */

?>

参考

  • DOMDocument::createElement() - 新しい要素ノードを作成する
  • DOMDocument::createElementNS() - 関連付けられた名前空間に新しい要素を作成する

User Contributed Notes

troelskn at gmail dot com 03-Jun-2008 07:46
Note that this function is buggy. You have to manually escape the $value argument with htmlspecialchars.
See: http://bugs.php.net/bug.php?id=31191


属性の値を返す

  • ≪ DOMElement::__construct
  • DOMElement::getAttributeNames ≫
  • PHP Manual
  • DOMElement
  • 属性の値を返す

DOMElement::getAttribute

(PHP 5, PHP 7, PHP 8)

DOMElement::getAttribute — 属性の値を返す

説明

public DOMElement::getAttribute(string $qualifiedName): string

現在のノードから、名前が qualifiedName である属性の値を取得します。

パラメータ

qualifiedName

属性の名前。

戻り値

属性の値、あるいは qualifiedName に対応する属性が 見つからなかった場合には空の文字列を返します。

参考

  • DOMElement::hasAttribute() - 属性が存在するかどうかを調べる
  • DOMElement::setAttribute() - 属性を新しく追加する、または変更する
  • DOMElement::removeAttribute() - 属性を削除する

User Contributed Notes

mpalmer at cybersource dot com 09-Nov-2007 03:32
- - - - - - - - - - - - - -

XML Data:
<data>
<Report ID="1">
    <Date>REVIEW</Date>
    <AuthorID>1</AuthorID>
</Report>
<Report ID="2">
    <Date>REVIEW</Date>
    <AuthorID>2</AuthorID>
</Report>
</data>

- - - - - - - - - - - - - -

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load( 'data.xml' );

$searchNode = $xmlDoc->getElementsByTagName( "Report" );

foreach( $searchNode as $searchNode )
{
    $valueID = $searchNode->getAttribute('ID');

    $xmlDate = $searchNode->getElementsByTagName( "Date" );
    $valueDate = $xmlDate->item(0)->nodeValue;

    $xmlAuthorID = $searchNode->getElementsByTagName( "AuthorID" );
    $valueAuthorID = $xmlAuthorID->item(0)->nodeValue;

    echo "$valueID - $valueDate - $valueAuthorID\n";
}
?>

- - - - - - - - - - - - - -

Output:

1 - REVIEW - 1
2 - REVIEW - 2

- - - - - - - - - - - - - -


属性の名前を取得する

  • ≪ DOMElement::getAttribute
  • DOMElement::getAttributeNode ≫
  • PHP Manual
  • DOMElement
  • 属性の名前を取得する

DOMElement::getAttributeNames

(PHP 8 >= 8.3.0)

DOMElement::getAttributeNames — 属性の名前を取得する

説明

public DOMElement::getAttributeNames(): array

属性の名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

属性の名前を返します。

例

例1 DOMElement::getAttributeNames() の例

<?php

$dom = new DOMDocument();
$dom->loadXML('<html xmlns:some="some:ns" some:test="a" test2="b"/>');
var_dump($dom->documentElement->getAttributeNames());
?>

上の例の出力は以下となります。

array(3) {
 [0]=>
 string(10) "xmlns:some"
 [1]=>
 string(9) "some:test"
 [2]=>
 string(5) "test2"
}

User Contributed Notes

There are no user contributed notes for this page.


属性ノードを返す

  • ≪ DOMElement::getAttributeNames
  • DOMElement::getAttributeNodeNS ≫
  • PHP Manual
  • DOMElement
  • 属性ノードを返す

DOMElement::getAttributeNode

(PHP 5, PHP 7, PHP 8)

DOMElement::getAttributeNode — 属性ノードを返す

説明

public DOMElement::getAttributeNode(string $qualifiedName): DOMAttr|DOMNameSpaceNode|false

現在の要素の、qualifiedName という名前の属性ノードを返します。

パラメータ

qualifiedName

属性の名前。

戻り値

属性ノードを返します。 XML の名前空間宣言 (xmlns や xmlns:* 属性) については、 DOMAttr オブジェクトではなく、 DOMNameSpaceNode が返されることに注意してください。

参考

  • DOMElement::hasAttribute() - 属性が存在するかどうかを調べる
  • DOMElement::setAttributeNode() - 新しい属性ノードを要素に追加する
  • DOMElement::removeAttributeNode() - 属性を削除する

User Contributed Notes

lowezar at gmail dot com 28-Feb-2011 08:22
It may also return DOMNameSpaceNode if you`re requesting 'xmlns:_prefix_'. So you`re unable to remove it with removeAttributeNode() which requires DOMAttr as parameter.
Alex 18-Feb-2009 08:33
Just trying to add some clarification: this function will return boolean "false" when there is not a $name attribute :)

Cheers, Alex


属性ノードを返す

  • ≪ DOMElement::getAttributeNode
  • DOMElement::getAttributeNS ≫
  • PHP Manual
  • DOMElement
  • 属性ノードを返す

DOMElement::getAttributeNodeNS

(PHP 5, PHP 7, PHP 8)

DOMElement::getAttributeNodeNS — 属性ノードを返す

説明

public DOMElement::getAttributeNodeNS(?string $namespace, string $localName): DOMAttr|DOMNameSpaceNode|null

現在のノードの、名前空間 namespaceにおける localName というローカル名の属性ノードを返します。

パラメータ

namespace

名前空間 URI。

localName

ローカル名。

戻り値

属性ノードを返します。 XML の名前空間宣言 (xmlns や xmlns:* 属性) については、 DOMAttr オブジェクトではなく、 DOMNameSpaceNode が返されることに注意してください。

参考

  • DOMElement::hasAttributeNS() - 属性が存在するかどうかを調べる
  • DOMElement::setAttributeNodeNS() - 新しい属性ノードを要素に追加する
  • DOMElement::removeAttributeNode() - 属性を削除する

User Contributed Notes

There are no user contributed notes for this page.


属性の値を返す

  • ≪ DOMElement::getAttributeNodeNS
  • DOMElement::getElementsByTagName ≫
  • PHP Manual
  • DOMElement
  • 属性の値を返す

DOMElement::getAttributeNS

(PHP 5, PHP 7, PHP 8)

DOMElement::getAttributeNS — 属性の値を返す

説明

public DOMElement::getAttributeNS(?string $namespace, string $localName): string

現在のノードから、名前空間 namespace における localName というローカル名の属性の値を取得します。

パラメータ

namespace

名前空間 URI。

localName

ローカル名。

戻り値

属性の値、あるいは localName および namespace に対応する属性が 見つからなかった場合には空の文字列を返します。

参考

  • DOMElement::hasAttributeNS() - 属性が存在するかどうかを調べる
  • DOMElement::setAttributeNS() - 新しい属性を追加する
  • DOMElement::removeAttributeNS() - 属性を削除する

User Contributed Notes

There are no user contributed notes for this page.


タグ名から要素を取得する

  • ≪ DOMElement::getAttributeNS
  • DOMElement::getElementsByTagNameNS ≫
  • PHP Manual
  • DOMElement
  • タグ名から要素を取得する

DOMElement::getElementsByTagName

(PHP 5, PHP 7, PHP 8)

DOMElement::getElementsByTagName — タグ名から要素を取得する

説明

public DOMElement::getElementsByTagName(string $qualifiedName): DOMNodeList

この関数は、指定した名前 qualifiedName のタグを持つ すべての子孫要素からなるクラス DOMNodeList の新しいインスタンスを返します。要素は、ツリーをたどっていく際に 見つかった順に並べられます。

パラメータ

qualifiedName

タグ名。ツリー内のすべての要素を返すには * を使用します。

戻り値

この関数は、一致したすべての要素からなる DOMNodeList クラスのインスタンスを返します。

参考

  • DOMElement::getElementsByTagNameNS() - 名前空間 URI とローカル名から要素を取得する

User Contributed Notes

There are no user contributed notes for this page.


名前空間 URI とローカル名から要素を取得する

  • ≪ DOMElement::getElementsByTagName
  • DOMElement::hasAttribute ≫
  • PHP Manual
  • DOMElement
  • 名前空間 URI とローカル名から要素を取得する

DOMElement::getElementsByTagNameNS

(PHP 5, PHP 7, PHP 8)

DOMElement::getElementsByTagNameNS — 名前空間 URI とローカル名から要素を取得する

説明

public DOMElement::getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList

この関数は、指定した名前 localName および namespace のタグを持つ すべての子孫要素を取得します。

パラメータ

namespace

条件に一致する要素の名前空間 URI。 "*" はすべての名前空間に一致します。 null を渡すと、空の名前空間に一致します。

localName

条件に一致する要素のローカル名。 "*" はすべてのローカル名に一致します。

戻り値

この関数は、一致したすべての要素からなる DOMNodeList クラスのインスタンスを返します。 各要素は、ツリー内の探索時に見つかった順で並べられます。

変更履歴

バージョン | 説明
8.0.3 | namespace は、nullable になりました。

参考

  • DOMElement::getElementsByTagName() - タグ名から要素を取得する

User Contributed Notes

spam at chovy dot com 03-Jun-2009 05:36
I had some difficulty stripping all default NS attributes for an ns-uri in one shot, the following will work though...first strip the documentElement namespace, then getElementsByTagNameNS() -- the documentation should reflect that the 2nd argument is actually the name of the tag, not the local namespace prefix as I first expected:

<?php

function strip_default_ns( $xml = null, $ns_uri = 'http://example.com/XML-Foo' ) {
    $ns_local = '';
    $ns_tag = '*';

    if ( empty($xml) ) return false;

    //remove document namespace
    $dom = new DOMDocument();
    $dom->loadXML($xml);
    $dom->documentElement->removeAttributeNS($ns_uri, $ns_local);

    //strip element namespaces
    foreach ( $dom->getElementsByTagNameNS($ns_uri, $ns_tag) as $elem ) {
        $elem->removeAttributeNS($ns_uri, $ns_local);
    }

    return $dom->saveXML();
}

$stripped_xml = strip_default_ns($the_xml);

?>

$stripped_xml can now take advantage of running XPath queries on it for the NULL namespace.


属性が存在するかどうかを調べる

  • ≪ DOMElement::getElementsByTagNameNS
  • DOMElement::hasAttributeNS ≫
  • PHP Manual
  • DOMElement
  • 属性が存在するかどうかを調べる

DOMElement::hasAttribute

(PHP 5, PHP 7, PHP 8)

DOMElement::hasAttribute — 属性が存在するかどうかを調べる

説明

public DOMElement::hasAttribute(string $qualifiedName): bool

要素のメンバとして qualifiedName という名前の属性が 存在するかどうかを示します。

パラメータ

qualifiedName

要素名。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMElement::hasAttributeNS() - 属性が存在するかどうかを調べる
  • DOMElement::getAttribute() - 属性の値を返す
  • DOMElement::setAttribute() - 属性を新しく追加する、または変更する
  • DOMElement::removeAttribute() - 属性を削除する

User Contributed Notes

There are no user contributed notes for this page.


属性が存在するかどうかを調べる

  • ≪ DOMElement::hasAttribute
  • DOMElement::insertAdjacentElement ≫
  • PHP Manual
  • DOMElement
  • 属性が存在するかどうかを調べる

DOMElement::hasAttributeNS

(PHP 5, PHP 7, PHP 8)

DOMElement::hasAttributeNS — 属性が存在するかどうかを調べる

説明

public DOMElement::hasAttributeNS(?string $namespace, string $localName): bool

要素のメンバとして localName という名前の属性が 名前空間 namespace に存在するかどうかを示します。

パラメータ

namespace

名前空間 URI。

localName

ローカル名。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMElement::hasAttribute() - 属性が存在するかどうかを調べる
  • DOMElement::getAttributeNS() - 属性の値を返す
  • DOMElement::setAttributeNS() - 新しい属性を追加する
  • DOMElement::removeAttributeNS() - 属性を削除する

User Contributed Notes

There are no user contributed notes for this page.


隣接する要素を挿入する

  • ≪ DOMElement::hasAttributeNS
  • DOMElement::insertAdjacentText ≫
  • PHP Manual
  • DOMElement
  • 隣接する要素を挿入する

DOMElement::insertAdjacentElement

(PHP 8 >= 8.3.0)

DOMElement::insertAdjacentElement — 隣接する要素を挿入する

説明

public DOMElement::insertAdjacentElement(string $where, DOMElement $element): ?DOMElement

where で指定された相対的な位置に、 要素を挿入します。

パラメータ

where

  • beforebegin - 目的の要素の直前に挿入します
  • afterbegin - 目的の要素の最初の子要素として挿入します
  • beforeend - 目的の要素の最後の子要素として挿入します
  • afterend - 目的の要素の直後に挿入します

element

挿入する要素

戻り値

DOMElement を返します。 失敗した場合は null を返します。

例

例1 DOMElement::insertAdjacentElement() の例

<?php

$dom = new DOMDocument();
$dom->loadXML('<?xml version="1.0"?><container><p>foo</p></container>');
$container = $dom->documentElement;
$p = $container->firstElementChild;

$p->insertAdjacentElement('beforebegin', $dom->createElement('A'));
echo $dom->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container><A/><p>foo</p></container>

参考

  • DOMElement::insertAdjacentText() - 隣接するテキストを挿入する

User Contributed Notes

There are no user contributed notes for this page.


隣接するテキストを挿入する

  • ≪ DOMElement::insertAdjacentElement
  • DOMElement::prepend ≫
  • PHP Manual
  • DOMElement
  • 隣接するテキストを挿入する

DOMElement::insertAdjacentText

(PHP 8 >= 8.3.0)

DOMElement::insertAdjacentText — 隣接するテキストを挿入する

説明

public DOMElement::insertAdjacentText(string $where, string $data): void

where で指定された相対的な位置に、 テキストを挿入します。

パラメータ

where

  • beforebegin - 目的の要素の直前に挿入します
  • afterbegin - 目的の要素の最初の子要素として挿入します
  • beforeend - 目的の要素の最後の子要素として挿入します
  • afterend - 目的の要素の直後に挿入します

data

挿入する文字列

戻り値

値を返しません。

例

例1 DOMElement::insertAdjacentText() の例

<?php

$dom = new DOMDocument();
$dom->loadXML('<?xml version="1.0"?><container><p>H</p></container>');

$container = $dom->documentElement;
$p = $container->firstElementChild;

$p->insertAdjacentText("afterbegin", "P");
$p->insertAdjacentText("beforeend", "P");

echo $dom->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container><p>PHP</p></container>

参考

  • DOMElement::insertAdjacentElement() - 隣接する要素を挿入する

User Contributed Notes

There are no user contributed notes for this page.


最初の子ノードの前にノードを追加する

  • ≪ DOMElement::insertAdjacentText
  • DOMElement::remove ≫
  • PHP Manual
  • DOMElement
  • 最初の子ノードの前にノードを追加する

DOMElement::prepend

(PHP 8)

DOMElement::prepend — 最初の子ノードの前にノードを追加する

説明

public DOMElement::prepend(DOMNode|string ...$nodes): void

ひとつ以上の nodes を、子のリストに追加します。 追加されるのは、最初の子ノードの前になります。

パラメータ

nodes

ノードの前に追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMElement::prepend() の例

container 要素の前にノードを追加します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container> world</container>");
$world = $doc->documentElement;

$world->prepend($doc->createElement("hello"), "beautiful");

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container><hello/>beautiful world</container>

参考

  • DOMParentNode::prepend() - 最初の子ノードの前にノードを追加する
  • DOMElement::append() - 最後のノードの後ろにノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


要素を削除する

  • ≪ DOMElement::prepend
  • DOMElement::removeAttribute ≫
  • PHP Manual
  • DOMElement
  • 要素を削除する

DOMElement::remove

(PHP 8)

DOMElement::remove — 要素を削除する

説明

public DOMElement::remove(): void

要素を削除します。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

例

例1 DOMElement::remove() の例

要素を削除します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><hello/><world/></container>");
$hello = $doc->documentElement->firstChild;

$hello->remove();

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container><world/></container>

参考

  • DOMElement::after() - 要素の後ろにノードを追加する
  • DOMElement::before() - 要素の前にノードを追加する
  • DOMElement::replaceWith() - 要素を新しいノードで置換する
  • DOMNode::removeChild() - 子要素群から子要素を削除する

User Contributed Notes

There are no user contributed notes for this page.


属性を削除する

  • ≪ DOMElement::remove
  • DOMElement::removeAttributeNode ≫
  • PHP Manual
  • DOMElement
  • 属性を削除する

DOMElement::removeAttribute

(PHP 5, PHP 7, PHP 8)

DOMElement::removeAttribute — 属性を削除する

説明

public DOMElement::removeAttribute(string $qualifiedName): bool

qualifiedName という名前の属性を要素から削除します。

パラメータ

qualifiedName

属性の名前。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用の場合に発生します。

参考

  • DOMElement::hasAttribute() - 属性が存在するかどうかを調べる
  • DOMElement::getAttribute() - 属性の値を返す
  • DOMElement::setAttribute() - 属性を新しく追加する、または変更する

User Contributed Notes

suwayan at mail dot ru 30-Mar-2012 12:19
<?php
/*When I try to get a some attribute from not validated HTML or XML document, PHP dies with no errors in logs or output:
*/
        function is_attribute_value($obj,$type,$value)
        {
            $_ret=false;
            if($obj)
            {
                if($val=$obj->getAttribute($type))
                {
                    if($val==$value)
                    {
                        $_ret=true;
                    }
                }
            }
            return $_ret;
        }
//And this check helped to me:
        function is_attribute_value($obj,$type,$value)
        {
            $_ret=false;
            if($obj->attributes)
            {
                if($val=$obj->getAttribute($type))
                {
                    if($val==$value)
                    {
                        $_ret=true;
                    }
                }
            }
            return $_ret;
        }
?>
Rakesh Verma - rakeshnsony at gmail dot com 10-Nov-2010 11:38
<?php

//Store your html into $html variable.

$html="<html>
<head>
<title>Rakesh Verma</title>
</head>

<body>
    <a href='http://example.com'>Example</a>
    <a href='http://google.com'>Google</a>
    <a href='http://www.yahoo.com'>Yahoo</a>
</body>

</html>";

$dom = new DOMDocument();
$dom->loadHTML($html);

//Evaluate Anchor tag in HTML
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for ($i = 0; $i < $hrefs->length; $i++) {
        $href = $hrefs->item($i);
        $url = $href->getAttribute('href');

        //remove and set target attribute
        $href->removeAttribute('target');
        $href->setAttribute("target", "_blank");

        $newURL=$url.".au";

        //remove and set href attribute
        $href->removeAttribute('href');
        $href->setAttribute("href", $newURL);
}

// save html
$html=$dom->saveHTML();

echo $html;

?>


属性を削除する

  • ≪ DOMElement::removeAttribute
  • DOMElement::removeAttributeNS ≫
  • PHP Manual
  • DOMElement
  • 属性を削除する

DOMElement::removeAttributeNode

(PHP 5, PHP 7, PHP 8)

DOMElement::removeAttributeNode — 属性を削除する

説明

public DOMElement::removeAttributeNode(DOMAttr $attr): DOMAttr|false

属性 attr を要素から削除します。

パラメータ

attr

属性ノード。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用の場合に発生します。

DOM_NOT_FOUND_ERR

attr が要素の属性でない場合に発生します。

参考

  • DOMElement::hasAttribute() - 属性が存在するかどうかを調べる
  • DOMElement::getAttributeNode() - 属性ノードを返す
  • DOMElement::setAttributeNode() - 新しい属性ノードを要素に追加する

User Contributed Notes

xr07354 at gmx dot de 18-Jun-2013 01:16
Basic: I use PHP5.4.9 from Ubuntu 13.04 repository. The aim of my code is to iterate HTML source (as a DomDocument) recursively and cleanup everything that is not valid to be used inside Epub files (i.e. and attribute align is not valid for paragraphs in Epubs).

FIRST: Today I tried removing attributes from a DOMElement using this simple code:
<?php
for ( $k=0; $k < $element->attributes->length; $k++) {
    if( /* some rule */ ){
        var_dump( $element->attributes->item($k)->nodeName);
        $element->removeAttributeNode( $element->attributes->item($k));
    }
}
?>
Unfortunately all attributes still existed when this loop was finished, even if these var_dumps told me that deleting them was tried.

I solved this problem iterating the attributes list backward:
<?php
for ( $k = $element->attributes->length - 1; $k >= 0; --$k) {
    if( /* same rule */ ){
        var_dump( $element->attributes->item($k)->nodeName);
        $element->removeAttributeNode( $element->attributes->item($k));
    }
}
?>
SECOND: DOMElement::removeAttributeNode does NOT return a bool but a DOMAttr object.


属性を削除する

  • ≪ DOMElement::removeAttributeNode
  • DOMElement::replaceChildren ≫
  • PHP Manual
  • DOMElement
  • 属性を削除する

DOMElement::removeAttributeNS

(PHP 5, PHP 7, PHP 8)

DOMElement::removeAttributeNS — 属性を削除する

説明

public DOMElement::removeAttributeNS(?string $namespace, string $localName): void

名前空間 namespace にある localName という名前の属性を 要素から削除します。

パラメータ

namespace

名前空間 URI。

localName

ローカル名。

戻り値

値を返しません。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用の場合に発生します。

参考

  • DOMElement::hasAttributeNS() - 属性が存在するかどうかを調べる
  • DOMElement::getAttributeNS() - 属性の値を返す
  • DOMElement::setAttributeNS() - 新しい属性を追加する

User Contributed Notes

primaryspace at hotmail dot com 10-Aug-2005 12:56
This method can be used to remove a namespace declaration from an element, even though the declaration is not considered an attribute by the DOM.  The prefix will be removed from any element or attribute using it.

<?php

$dom = DOMDocument::loadXML('<foo:root xmlns:foo="http:bar"/>');
$element = $dom->childNodes->item(0);

// prints '0':
echo (int) $element->hasAttributeNS('http:bar', 'foo');

$element->removeAttributeNS('http:bar', 'foo');

/* prints '<?xml version="1.0"?> <root/>': */
print htmlentities($dom->saveXML());

?>


要素中の子を置換する

  • ≪ DOMElement::removeAttributeNS
  • DOMElement::replaceWith ≫
  • PHP Manual
  • DOMElement
  • 要素中の子を置換する

DOMElement::replaceChildren

(PHP 8 >= 8.3.0)

DOMElement::replaceChildren — 要素中の子を置換する

説明

public DOMElement::replaceChildren(DOMNode|string ...$nodes): void

要素中の子を、新しい nodes で置換します。

パラメータ

nodes

子を置き換えるノード 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMElement::replaceChildren() の例

子を新しいノードで置換します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><hello/></container>");
$container = $doc->documentElement;

$container->replaceWith("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
beautiful
<world/>

参考

  • DOMParentNode::replaceChildren() - ノード中の子を置換する
  • DOMElement::replaceWith() - 要素を新しいノードで置換する
  • DOMElement::after() - 要素の後ろにノードを追加する
  • DOMElement::before() - 要素の前にノードを追加する
  • DOMElement::remove() - 要素を削除する

User Contributed Notes

There are no user contributed notes for this page.


要素を新しいノードで置換する

  • ≪ DOMElement::replaceChildren
  • DOMElement::setAttribute ≫
  • PHP Manual
  • DOMElement
  • 要素を新しいノードで置換する

DOMElement::replaceWith

(PHP 8)

DOMElement::replaceWith — 要素を新しいノードで置換する

説明

public DOMElement::replaceWith(DOMNode|string ...$nodes): void

要素を新しい nodes で置換します。

パラメータ

nodes

置き換えるノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | 親がないノードに対して、 このメソッドをコールしても何もしなくなりました。 これは DOM の仕様が要求する振る舞いに合わせるためです。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMElement::replaceWith() の例

要素を新しいノードで置換します。

<?php
$doc = new DOMDocument;
$doc->loadXML("<container><hello/></container>");
$cdata = $doc->documentElement->firstChild;

$cdata->replaceWith("beautiful", $doc->createElement("world"));

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<container>beautiful<world/></container>

参考

  • DOMChildNode::replaceWith() - ノードを新しいノードで置き換える
  • DOMElement::replaceChildren() - 要素中の子を置換する
  • DOMElement::after() - 要素の後ろにノードを追加する
  • DOMElement::before() - 要素の前にノードを追加する
  • DOMElement::remove() - 要素を削除する

User Contributed Notes

There are no user contributed notes for this page.


属性を新しく追加する、または変更する

  • ≪ DOMElement::replaceWith
  • DOMElement::setAttributeNode ≫
  • PHP Manual
  • DOMElement
  • 属性を新しく追加する、または変更する

DOMElement::setAttribute

(PHP 5, PHP 7, PHP 8)

DOMElement::setAttribute — 属性を新しく追加する、または変更する

説明

public DOMElement::setAttribute(string $qualifiedName, string $value): DOMAttr|bool

qualifiedName という名前の属性を、指定した値に設定します。 属性が存在しない場合は、作成されます。

パラメータ

qualifiedName

属性の名前。

value

属性の値。

戻り値

新しく作られた、または変更された DOMAttr を返します。 エラーが発生した場合は false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用の場合に発生します。

例

例1 属性を設定する

<?php
$doc = new DOMDocument("1.0");
$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("align", "left");
?>

参考

  • DOMElement::hasAttribute() - 属性が存在するかどうかを調べる
  • DOMElement::getAttribute() - 属性の値を返す
  • DOMElement::removeAttribute() - 属性を削除する

User Contributed Notes

info at ensostudio dot ru 02-Dec-2021 06:17
Solution to render HTML 5 tags with attributes with/without value:
<?php
$dom = new DOMImplementation();
$doc = $dom->createDocument(null, 'html', $dom->createDocumentType('html'));

$tag = $doc->appendChild($doc->createElement('input'));
$tag->setAttribute('type', 'text');
$tag->setAttribute('disabled', '');

echo $doc->saveHTML($tag); // <input type="text" disabled="">

$doc->normalize(); // normalize attributes
echo $doc->saveHTML($tag); // <input type="text" disabled>
?>
lehal2@hotmail 06-Jun-2013 09:44
The use of Dom to first remove and then add the width and height to the first img tag from the text.I hope it help you to save your time
<?php
$html = '

            <img src="http://www.example.com/images/header.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
        <img src="http://www.example.com/images/header2.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
        ';

$doc = DOMDocument::loadHTML($html);
$c =0;
foreach($doc->getElementsByTagName('img') as $image){
    if ($c>0) continue;
    foreach(array('width', 'height') as $attribute_to_remove){
        echo $attribute_to_remove;
        if($image->hasAttribute($attribute_to_remove)){
            $image->removeAttribute($attribute_to_remove);

        }
        if($attribute_to_remove=='height'){
            if(!$image->hasAttribute($attribute_to_remove)){
                $image->setAttribute($attribute_to_remove,'220');

            }}
        if($attribute_to_remove=='width'){
      if(!$image->hasAttribute($attribute_to_remove)){
            $image->setAttribute($attribute_to_remove,'700');

        }}
        $c = $c+1;
    }
}
echo $doc->saveHTML();
Rakesh Verma - rakeshnsony at gmail dot com 10-Nov-2010 11:27
<?php
//Store your html into $html variable.
$html="
<html>
<head>
<title>Untitled Document</title>
</head>

<body>
    <a href='http://example.com'>Example</a><br>
    <a href='http://google.com'>Google</a><br>

    <a href='http://www.yahoo.com'>Yahoo</a><br>
</body>

</html>";

$dom = new DOMDocument();
$dom->loadHTML($html);

//Evaluate Anchor tag in HTML
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for ($i = 0; $i < $hrefs->length; $i++) {
        $href = $hrefs->item($i);
        $url = $href->getAttribute('href');

        //remove and set target attribute
        $href->removeAttribute('target');
        $href->setAttribute("target", "_blank");

        $newURL=$url."/newurl";

        //remove and set href attribute
        $href->removeAttribute('href');
        $href->setAttribute("href", $newURL);
}

// save html
$html=$dom->saveHTML();

echo $html;

?>
address at gmail dot com 03-Jul-2008 07:25
If wanting to set an attribute of an element with unique id of "1"

<?php
$dom = new DomDocument();
$dom->load('test.xml');
$xp = new DomXPath($dom);
$res = $xp->query("//*[@id = '1']");
$res->item(0)->setAttribute('title','2');
$dom->save('test.xml');
?>
Vasil Rangelov 31-Jul-2007 04:44
@karvjorm,
Using this method is not exactly a good practice. Infact, I think it may be a bug.
Names beginning with "xml" are reserved (for namespaces in this case).
setAttribute() should return false in this case I think, but I suppose it doesn't.

Still, the right way to do it is with createElementNS().
It lets you specify the namespace when creating the element node.

So the equivalent to yours ($html added to allow word wrapping) is:

$dom = new DomDocument('1.0','iso-8859-15');
$html = $dom->createElementNS('http://www.w3.org/1999/xhtml', 'html');
$ht_ml = $dom->appendChild($html);
$ht_ml->setAttribute('xml:lang','fi');
$ht_ml->setAttribute('lang','fi');
karvjorm at users.sourceforge.net 02-Mar-2007 03:05
$dom = new DomDocument('1.0','iso-8859-15');

$ht_ml = $dom->appendChild($dom->createElement('html'));
$ht_ml->setAttribute('xmlns','http://www.w3.org/1999/xhtml');
$ht_ml->setAttribute('xml:lang','fi');
$ht_ml->setAttribute('lang','fi');

Result:

<?xml version="1.0" encoding="iso-8859-15"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">


新しい属性ノードを要素に追加する

  • ≪ DOMElement::setAttribute
  • DOMElement::setAttributeNodeNS ≫
  • PHP Manual
  • DOMElement
  • 新しい属性ノードを要素に追加する

DOMElement::setAttributeNode

(PHP 5, PHP 7, PHP 8)

DOMElement::setAttributeNode — 新しい属性ノードを要素に追加する

説明

public DOMElement::setAttributeNode(DOMAttr $attr): DOMAttr|null|false

新しい属性ノード attr を要素に追加します。 要素に同じ名前の属性が既に存在している場合、 その属性は attr で置き換えられます。

パラメータ

attr

属性ノード。

戻り値

属性が置換された場合は置換前のノード、そうでない場合は null を返します。 DOM_WRONG_DOCUMENT_ERR エラーが発生した場合、 かつ strictErrorChecking が false の場合には、false を返します。

エラー / 例外

DOM_WRONG_DOCUMENT_ERR

attr が、要素とは異なるドキュメントに存在する場合に発生します。

参考

  • DOMElement::hasAttribute() - 属性が存在するかどうかを調べる
  • DOMElement::getAttributeNode() - 属性ノードを返す
  • DOMElement::removeAttributeNode() - 属性を削除する

User Contributed Notes

karvjorm at users.sourceforge.net 02-Mar-2007 04:01
$dom = new DomDocument('1.0','iso-8859-15');

$ht_ml = $dom->appendChild($dom->createElement('html'));

$he_ad = $ht_ml->appendChild($dom->createElement('head'));

$tit_le= $he_ad->appendChild($dom->createElement('title'));
$tit_le->appendChild($dom->createTextNode('DOMAttr test'));

$me_ta = $he_ad->appendChild(new DOMElement('meta'));
$me_ta->setAttributeNode(new DOMAttr('name', 'Description'));
$me_ta->setAttributeNode(new DOMAttr('content', 'example'));

$me_ta = $he_ad->appendChild(new DOMElement('meta'));
$me_ta->setAttributeNode(new DOMAttr('name', 'Author'));
$me_ta->setAttributeNode(new DOMAttr('content', 'karvjorm'));

Result:

<?xml version="1.0" encoding="iso-8859-15"?>
<html>
  <head>
    <title>DOMAttr test</title>
    <meta name="Description" content="example"/>
    <meta name="Author" content="karvjorm"/>
  </head>


新しい属性ノードを要素に追加する

  • ≪ DOMElement::setAttributeNode
  • DOMElement::setAttributeNS ≫
  • PHP Manual
  • DOMElement
  • 新しい属性ノードを要素に追加する

DOMElement::setAttributeNodeNS

(PHP 5, PHP 7, PHP 8)

DOMElement::setAttributeNodeNS — 新しい属性ノードを要素に追加する

説明

public DOMElement::setAttributeNodeNS(DOMAttr $attr): DOMAttr|null|false

新しい属性ノード attr を要素に追加しますが、名前空間を考慮します。 要素に同じ名前の属性が既に存在している場合、 その属性は attr で置き換えられます。

パラメータ

attr

属性ノード。

戻り値

属性が置換された場合は置換前のノード、古い属性がない場合は null を返します。 DOM_WRONG_DOCUMENT_ERR エラーが発生した場合、 かつ strictErrorChecking が false の場合には、false を返します。

エラー / 例外

DOM_WRONG_DOCUMENT_ERR

attr が、要素とは異なるドキュメントに存在する場合に発生します。

参考

  • DOMElement::hasAttributeNS() - 属性が存在するかどうかを調べる
  • DOMElement::getAttributeNodeNS() - 属性ノードを返す
  • DOMElement::removeAttributeNode() - 属性を削除する

User Contributed Notes

There are no user contributed notes for this page.


新しい属性を追加する

  • ≪ DOMElement::setAttributeNodeNS
  • DOMElement::setIdAttribute ≫
  • PHP Manual
  • DOMElement
  • 新しい属性を追加する

DOMElement::setAttributeNS

(PHP 5, PHP 7, PHP 8)

DOMElement::setAttributeNS — 新しい属性を追加する

説明

public DOMElement::setAttributeNS(?string $namespace, string $qualifiedName, string $value): void

名前空間 namespace にある qualifiedName という名前の属性を、指定した値に設定します。 属性が存在しない場合は、作成されます。

パラメータ

namespace

名前空間 URI。

qualifiedName

prefix:tagname 形式で表した属性名。

value

属性の値。

戻り値

値を返しません。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用の場合に発生します。

DOM_NAMESPACE_ERR

qualifiedName が不正な形式であった場合や、 qualifiedName がプレフィックスを含むにもかかわらず namespace が null の場合に発生します。

参考

  • DOMElement::hasAttributeNS() - 属性が存在するかどうかを調べる
  • DOMElement::getAttributeNS() - 属性の値を返す
  • DOMElement::removeAttributeNS() - 属性を削除する

User Contributed Notes

catalinenache78 at gmail dot com 18-May-2011 07:39
To add new brand xml namespace use:

<?php
    $element->setAttributeNS(
        'http://www.w3.org/2000/xmlns/', // xmlns namespace URI
        'xmlns:mynamespace',
        'example.com/mynamespace'
    );
?>

'http://www.w3.org/2000/xmlns/' URI is important
to be able to add  new namespaces !!!

Later you can use your namespace like:

<?php
    $element->setAttributeNS(
        'example.com/mynamespace',
        'mynamespace:something',
        'value'
    );
?>


ID 型の属性を名前で宣言する

  • ≪ DOMElement::setAttributeNS
  • DOMElement::setIdAttributeNode ≫
  • PHP Manual
  • DOMElement
  • ID 型の属性を名前で宣言する

DOMElement::setIdAttribute

(PHP 5, PHP 7, PHP 8)

DOMElement::setIdAttribute — ID 型の属性を名前で宣言する

説明

public DOMElement::setIdAttribute(string $qualifiedName, bool $isId): void

ID 型となる属性を qualifiedName で宣言します。

パラメータ

qualifiedName

属性の名前。

isId

qualifiedName を ID 型にしたい場合に true、 それ以外の場合に false を設定します。

戻り値

値を返しません。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用である場合に発生します。

DOM_NOT_FOUND_ERR

qualifiedName がこの要素の属性でない場合に発生します。

参考

  • DOMDocument::getElementById() - id に対応する要素を検索する
  • DOMElement::setIdAttributeNode() - ID 型の属性をノードで宣言する
  • DOMElement::setIdAttributeNS() - ID 型の属性をローカル名および名前空間 URI で宣言する

User Contributed Notes

There are no user contributed notes for this page.


ID 型の属性をノードで宣言する

  • ≪ DOMElement::setIdAttribute
  • DOMElement::setIdAttributeNS ≫
  • PHP Manual
  • DOMElement
  • ID 型の属性をノードで宣言する

DOMElement::setIdAttributeNode

(PHP 5, PHP 7, PHP 8)

DOMElement::setIdAttributeNode — ID 型の属性をノードで宣言する

説明

public DOMElement::setIdAttributeNode(DOMAttr $attr, bool $isId): void

ID 型となる属性 attr を宣言します。

パラメータ

attr

属性ノード。

isId

name を ID 型にしたい場合に true、 それ以外の場合に false を設定します。

戻り値

値を返しません。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用である場合に発生します。

DOM_NOT_FOUND_ERR

name がこの要素の属性でない場合に発生します。

参考

  • DOMDocument::getElementById() - id に対応する要素を検索する
  • DOMElement::setIdAttribute() - ID 型の属性を名前で宣言する
  • DOMElement::setIdAttributeNS() - ID 型の属性をローカル名および名前空間 URI で宣言する

User Contributed Notes

There are no user contributed notes for this page.


ID 型の属性をローカル名および名前空間 URI で宣言する

  • ≪ DOMElement::setIdAttributeNode
  • DOMElement::toggleAttribute ≫
  • PHP Manual
  • DOMElement
  • ID 型の属性をローカル名および名前空間 URI で宣言する

DOMElement::setIdAttributeNS

(PHP 5, PHP 7, PHP 8)

DOMElement::setIdAttributeNS — ID 型の属性をローカル名および名前空間 URI で宣言する

説明

public DOMElement::setIdAttributeNS(string $namespace, string $qualifiedName, bool $isId): void

ID 型となる属性を qualifiedName および namespace で宣言します。

パラメータ

namespace

属性の名前空間 URI。

qualifiedName

属性のローカル名。prefix:tagname 形式。

isId

name を ID 型にしたい場合に true、 それ以外の場合に false を設定します。

戻り値

値を返しません。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用である場合に発生します。

DOM_NOT_FOUND_ERR

name がこの要素の属性でない場合に発生します。

参考

  • DOMDocument::getElementById() - id に対応する要素を検索する
  • DOMElement::setIdAttribute() - ID 型の属性を名前で宣言する
  • DOMElement::setIdAttributeNode() - ID 型の属性をノードで宣言する

User Contributed Notes

There are no user contributed notes for this page.


属性の値を切り替える

  • ≪ DOMElement::setIdAttributeNS
  • DOMEntity ≫
  • PHP Manual
  • DOMElement
  • 属性の値を切り替える

DOMElement::toggleAttribute

(PHP 8 >= 8.3.0)

DOMElement::toggleAttribute — 属性の値を切り替える

説明

public DOMElement::toggleAttribute(string $qualifiedName, ?bool $force = null): bool

属性の値を切り替えます。

パラメータ

qualifiedName

属性の修飾名

force

  • null を指定すると、この関数は属性の値を切り替えます
  • true を指定すると、この関数は属性の値を追加します
  • false を指定すると、この関数は属性を削除します

戻り値

この関数をコールした後、属性が存在していれば true を返します。 そうでない場合、false を返します。

例

例1 DOMElement::toggleAttribute() の例

<?php

$dom = new DOMDocument();
$dom->loadXML("<?xml version='1.0'?><container selected=\"\"/>");

var_dump($dom->documentElement->toggleAttribute('selected'));
echo $dom->saveXML() . PHP_EOL;

var_dump($dom->documentElement->toggleAttribute('selected'));
echo $dom->saveXML();
?>

上の例の出力は以下となります。

bool(false)
<?xml version="1.0"?>
<container/>

bool(true)
<?xml version="1.0"?>
<container selected=""/>

User Contributed Notes

There are no user contributed notes for this page.


DOMEntity クラス

(PHP 5, PHP 7, PHP 8)

はじめに

このインターフェイスは、XML ドキュメント内の既知のエンティティを表します。 パース済みかどうかは関係ありません。

クラス概要

class DOMEntity extends DOMNode {
/* プロパティ */
public readonly ?string $publicId;
public readonly ?string $systemId;
public readonly ?string $notationName;
public readonly ?string $actualEncoding = null;
public readonly ?string $encoding = null;
public readonly ?string $version = null;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

publicId

エンティティに関連付けられているパブリック ID が存在すればその値、 それ以外の場合は null

systemId

エンティティに関連付けられているシステム ID が存在すればその値、 それ以外の場合は null。これは完全な URI かもしれないし、 そうでないかもしれない。

notationName

パースされていないエンティティの場合はそのエンティティの名前、 パース済みのエンティティの場合は null

actualEncoding

外部でパースされたエンティティの場合は、このエンティティの パース時に使用されたエンコーディングを指定する属性。 内部サブセットからのエンティティであったり未知のエンティティで あった場合は null

encoding

外部でパースされたエンティティの場合は、テキスト宣言の一部として このエンティティのエンコーディングを指定する属性。それ以外の場合は null

version

外部でパースされたエンティティの場合は、テキスト宣言の一部として このエンティティのバージョン番号を指定する属性。それ以外の場合は null

User Contributed Notes

There are no user contributed notes for this page.


DOMEntityReference クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMEntityReference extends DOMNode {
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $name)
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

目次

  • DOMEntityReference::__construct — 新しい DOMEntityReference オブジェクトを作成する

User Contributed Notes

There are no user contributed notes for this page.


新しい DOMEntityReference オブジェクトを作成する

  • ≪ DOMEntityReference
  • DOMException ≫
  • PHP Manual
  • DOMEntityReference
  • 新しい DOMEntityReference オブジェクトを作成する

DOMEntityReference::__construct

(PHP 5, PHP 7, PHP 8)

DOMEntityReference::__construct — 新しい DOMEntityReference オブジェクトを作成する

説明

public DOMEntityReference::__construct(string $name)

新しい DOMEntityReference オブジェクトを作成します。

パラメータ

name

エンティティ参照の名前。

例

例1 新しい DOMEntityReference を作成する

<?php

$dom = new DOMDocument('1.0', 'iso-8859-1');
$element = $dom->appendChild(new DOMElement('root'));
$entity = $element->appendChild(new DOMEntityReference('nbsp'));
echo $dom->saveXML(); /* <?xml version="1.0" encoding="iso-8859-1"?><root>&nbsp;</root> */

?>

参考

  • DOMDocument::createEntityReference() - 新しいエンティティ参照ノードを作成する

User Contributed Notes

There are no user contributed notes for this page.


DOMException クラス

(PHP 5, PHP 7, PHP 8)

はじめに

しかるべき状況、すなわち論理的に不可能な操作を行った際などの場合に DOM 操作は例外を発生させます。

例外(exceptions) も参照ください。

クラス概要

final class DOMException extends Exception {
/* プロパティ */
public int $code;
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 継承したメソッド */
public Exception::__construct(string $message = "", int $code = 0, ?Throwable $previous = null)
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

プロパティ

code

発生したエラーの型を示す整数値

User Contributed Notes

There are no user contributed notes for this page.


DOMImplementation クラス

(PHP 5, PHP 7, PHP 8)

はじめに

DOMImplementation クラスは、 個々のドキュメントオブジェクトモデルのインスタンス独自の操作を行うためのメソッド群を提供します。

クラス概要

class DOMImplementation {
/* メソッド */
public createDocument(?string $namespace = null, string $qualifiedName = "", ?DOMDocumentType $doctype = null): DOMDocument|false
public createDocumentType(string $qualifiedName, string $publicId = "", string $systemId = ""): DOMDocumentType|false
public hasFeature(string $feature, string $version): bool
}

目次

  • DOMImplementation::__construct — 新しい DOMImplementation オブジェクトを作成する
  • DOMImplementation::createDocument — 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する
  • DOMImplementation::createDocumentType — 空の DOMDocumentType オブジェクトを作成する
  • DOMImplementation::hasFeature — DOM 実装が、指定した機能を実装しているかどうかを調べる

User Contributed Notes

LANGE.LUDO 07-Nov-2014 06:05
Ok got it working like a charm using "proxy pattern" with traits. The idea being declaring the common methods inside a "trait" in order for extended and registered Node Classes to have access even if not derived / child of the extended DOMNode...

Here a small snippet :
<?php
    namespace my;

    trait tNode
    {    // We need the magic method __get in order to add properties such as DOMNode->parentElement
        public function __get($name)
        {    if(property_exists($this, $name)){return $this->$name;}
            if(method_exists($this, $name)){return $this->$name();}
            throw new \ErrorException('my\\Node property \''.(string) $name.'\' not found...', 42, E_USER_WARNING);
        }

        // parentElement property definition
        private function parentElement()
        {    if($this->parentNode === null){return null;}
            if($this->parentNode->nodeType === XML_ELEMENT_NODE){return $this->parentNode;}
            return $this->parentNode->parentElement();
        }

        // JavaScript equivalent
        public function isEqualNode(\DOMNode $node){return $this->isSameNode($node);}
        public function compareDocumentPosition(\DOMNode $otherNode)
        {    if($this->ownerDocument !== $otherNode->ownerDocument){return DOCUMENT_POSITION_DISCONNECTED;}
            $c = strcmp($this->getNodePath(), $otherNode->getNodePath());
            if($c === 0){return 0;}
            else if($c < 0){return DOCUMENT_POSITION_FOLLOWING | ($c < -1 ? DOCUMENT_POSITION_CONTAINED_BY : 0);}
            return DOCUMENT_POSITION_PRECEDING | ($c > 1 ? DOCUMENT_POSITION_CONTAINS : 0);
        }
        public function contains(\DOMNode $otherNode){return ($this->compareDocumentPosition($otherNode) >= DOCUMENT_POSITION_CONTAINED_BY);}
    }

    class Document extends \DomDocument
    {    public function __construct($version=null, $encoding=null)
        {    parent::__construct($version, $encoding);
            $this->registerNodeClass('DOMNode', 'my\Node');
            $this->registerNodeClass('DOMElement', 'my\Element');
            $this->registerNodeClass('DOMDocument', 'my\Document');
            /* [...] */
        }
    }

    class Element extends \DOMElement
    {    use tNode;
        /* [...] */
    }

    class Node extends \DOMNode
    {    use tNode;
        /* [...] */
    }

?>


新しい DOMImplementation オブジェクトを作成する

  • ≪ DOMImplementation
  • DOMImplementation::createDocument ≫
  • PHP Manual
  • DOMImplementation
  • 新しい DOMImplementation オブジェクトを作成する

DOMImplementation::__construct

(PHP 5, PHP 7)

DOMImplementation::__construct — 新しい DOMImplementation オブジェクトを作成する

説明

DOMImplementation::__construct()

新しい DOMImplementation オブジェクトを作成します。

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


指定した型とドキュメント要素の DOMDocument オブジェクトを作成する

  • ≪ DOMImplementation::__construct
  • DOMImplementation::createDocumentType ≫
  • PHP Manual
  • DOMImplementation
  • 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する

DOMImplementation::createDocument

(PHP 5, PHP 7, PHP 8)

DOMImplementation::createDocument — 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する

説明

public DOMImplementation::createDocument(?string $namespace = null, string $qualifiedName = "", ?DOMDocumentType $doctype = null): DOMDocument|false

指定した型とドキュメント要素の DOMDocument オブジェクトを作成します。

パラメータ

namespace

作成するドキュメント要素の名前空間 URI。

qualifiedName

作成するドキュメント要素の修飾名。

doctype

作成するドキュメントの型、あるいは null。

戻り値

新しい DOMDocument オブジェクトを返します。 エラーの場合は false を返します。 namespace、qualifiedName および doctype が null の場合は、 ドキュメント要素を含まない空の DOMDocument を返します。

エラー / 例外

DOM_WRONG_DOCUMENT_ERR

doctype が既に別のドキュメントで使用されていたり、 別の実装で作成されている場合に発生します。

DOM_NAMESPACE_ERR

namespace および qualifiedName で指定した名前空間に間違いがある場合に発生します。

変更履歴

バージョン | 説明
8.0.3 | namespace は、nullable になりました。
8.0.0 | doctype は、nullable になりました。
8.0.0 | この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

参考

  • DOMDocument::__construct() - 新しい DOMDocument オブジェクトを作成する
  • DOMImplementation::createDocumentType() - 空の DOMDocumentType オブジェクトを作成する

User Contributed Notes

sleistico at gmail dot com 02-Jul-2018 03:48
I just recently got an error, having to do with deprecation, by using the type of calls in the other example listed here.  What I had to do instead looks like this...

$htmldoc = (new DOMImplementation)->createDocument(null, 'html', (new DOMImplementation)->createDocumentType("html"));

This creates a document with <!DOCTYPE html> at the top of it.
eboyjr 22-Jul-2010 12:48
To add on to the other example, here's how to create an XHTML 1.0 transitional document with head, title, and body elements.

<?php

$document = DOMImplementation::createDocument(null, 'html',
    DOMImplementation::createDocumentType("html",
        "-//W3C//DTD XHTML 1.0 Transitional//EN",
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"));
$document->formatOutput = true;

$html = $document->documentElement;
$head = $document->createElement('head');
$title = $document->createElement('title');
$text = $document->createTextNode('Title of Page');
$body = $document->createElement('body');

$title->appendChild($text);
$head->appendChild($title);
$html->appendChild($head);
$html->appendChild($body);

echo $document->saveXML();
?>

This outputs: (http links removed due to spam)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "doctype.dtd">
<html xmlns="w3org1999xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; CHARSET=shift-jis" />
    <title>Title of Page</title>
  </head>
  <body></body>
</html>

Note the saveXML function. If saveHTML was used instead, you get the output:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "doctype.dtd">
<html>
<head><title>Title of Page</title></head>
<body></body>
</html>
arturm at union dot com dot pl 06-May-2006 10:23
To create HTML document with doctype:

<?php
$doctype = DOMImplementation::createDocumentType("html",
                "-//W3C//DTD HTML 4.01//EN",
                "http://www.w3.org/TR/html4/strict.dtd");
$doc = DOMImplementation::createDocument(null, 'html', $doctype);
?>


空の DOMDocumentType オブジェクトを作成する

  • ≪ DOMImplementation::createDocument
  • DOMImplementation::hasFeature ≫
  • PHP Manual
  • DOMImplementation
  • 空の DOMDocumentType オブジェクトを作成する

DOMImplementation::createDocumentType

(PHP 5, PHP 7, PHP 8)

DOMImplementation::createDocumentType — 空の DOMDocumentType オブジェクトを作成する

説明

public DOMImplementation::createDocumentType(string $qualifiedName, string $publicId = "", string $systemId = ""): DOMDocumentType|false

空の DOMDocumentType オブジェクトを作成します。 エンティティ宣言および記法は使用可能にはなりません。エンティティ参照の 展開やデフォルト属性の追加は発生しません。

パラメータ

qualifiedName

作成されるドキュメント型の修飾名。

publicId

外部サブセットの公開 ID。

systemId

外部サブセットのシステム ID。

戻り値

ownerDocument を null に設定した 新しい DOMDocumentType ノードを返します。 エラーの場合は false を返します。

エラー / 例外

DOM_NAMESPACE_ERR

qualifiedName で指定した名前空間に間違いがある場合に発生します。

変更履歴

バージョン | 説明
8.0.0 | この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

例

例1 DTD を添付してドキュメントを作成する

<?php

// DOMImplementation クラスのインスタンスを作成します
$imp = new DOMImplementation;

// DOMDocumentType のインスタンスを作成します
$dtd = $imp->createDocumentType('graph', '', 'graph.dtd');

// DOMDocument のインスタンスを作成します
$dom = $imp->createDocument("", "", $dtd);

// その他のプロパティを設定します
$dom->encoding = 'UTF-8';
$dom->standalone = false;

// 空の要素を作成します
$element = $dom->createElement('graph');

// 要素を追加します
$dom->appendChild($element);

// ドキュメントの内容を出力します
echo $dom->saveXML();

?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE graph SYSTEM "graph.dtd">
<graph/>

参考

  • DOMImplementation::createDocument() - 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する

User Contributed Notes

until-all-bytes-are-free at example dot org 09-Apr-2011 04:28
I had problems to use a DTD from a file. It needed to be resolved relatively and it contained characters that made DomDocument failed to resolve the file.

Encoding and an absolute filename did not help much. So I used the data:// streamwrapper ( http://php.net/manual/en/wrappers.data.php ) as a work-around:

<?php

// relative or absolute filename
$path = '...';

// convert file contents into a filename
$data = file_get_contents($path);
$systemId = 'data://text/plain;base64,'.base64_encode($data);

// ...

// Creates a DOMDocumentType instance
$dtd = $aImp->createDocumentType('qualified name', '', $systemId);

?>

Works like a charm.


DOM 実装が、指定した機能を実装しているかどうかを調べる

  • ≪ DOMImplementation::createDocumentType
  • DOMNamedNodeMap ≫
  • PHP Manual
  • DOMImplementation
  • DOM 実装が、指定した機能を実装しているかどうかを調べる

DOMImplementation::hasFeature

(PHP 5, PHP 7, PHP 8)

DOMImplementation::hasFeature — DOM 実装が、指定した機能を実装しているかどうかを調べる

説明

public DOMImplementation::hasFeature(string $feature, string $version): bool

DOM 実装が、指定した機能 feature を実装しているかどうかを調べます。

DOM 仕様の » Conformance の節に、すべての機能の一覧があります。

パラメータ

feature

調べる機能。

version

調べる feature のバージョン番号。 DOM level 2 においては、これは 2.0 あるいは 1.0 のいずれかです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

例

例1 DOM の実装を調べる

<?php

$features = array(
'Core' => 'Core module',
'XML' => 'XML module',
'HTML' => 'HTML module',
'Views' => 'Views module',
'Stylesheets' => 'Style Sheets module',
'CSS' => 'CSS module',
'CSS2' => 'CSS2 module',
'Events' => 'Events module',
'UIEvents' => 'User interface Events module',
'MouseEvents' => 'Mouse Events module',
'MutationEvents' => 'Mutation Events module',
'HTMLEvents' => 'HTML Events module',
'Range' => 'Range module',
'Traversal' => 'Traversal module'
);

$implementation = new DOMImplementation;

foreach ($features as $key => $name) {
if ($implementation->hasFeature($key, '2.0')) {
echo "$name の機能を保持しています\n";
} else {
echo "$name の機能は保持していません\n";
}
}

?>

参考

  • DOMNode::isSupported() - 指定したバージョンで機能がサポートされているかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


DOMNamedNodeMap クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMNamedNodeMap implements IteratorAggregate, Countable {
/* プロパティ */
public readonly int $length;
/* メソッド */
public count(): int
public getIterator(): Iterator
public getNamedItem(string $qualifiedName): ?DOMNode
public getNamedItemNS(?string $namespace, string $localName): ?DOMNode
public item(int $index): ?DOMNode
}

プロパティ

length

マップ内のノードの数。子ノードのインデックスとして有効な範囲は 0 から length - 1 まで (両端を含む) です。

変更履歴

バージョン | 説明
8.0.0 | 実装されていなかったメソッド DOMNamedNodeMap::setNamedItem(), DOMNamedNodeMap::removeNamedItem(), DOMNamedNodeMap::setNamedItemNS(), DOMNamedNodeMap::removeNamedItem() が削除されました。
8.0.0 | DOMNamedNodeMap は IteratorAggregate を実装しました。 これより前のバージョンでは、 Traversable が代わりに実装されていました。

目次

  • DOMNamedNodeMap::count — マップにあるノードの数を取得する
  • DOMNamedNodeMap::getIterator — 外部のイテレータを取得する
  • DOMNamedNodeMap::getNamedItem — 名前で指定されたノードを取得する
  • DOMNamedNodeMap::getNamedItemNS — ローカル名および名前空間 URI で指定したノードを取得する
  • DOMNamedNodeMap::item — インデックスで指定したノードを取得する

User Contributed Notes

sirajshaikh96 at yahoo dot com 01-Jan-2021 02:48
I have tried to solve the general problem occurs in DOMNamedNodeMap that during executing for/foreachloop after executing removeAttribute('$name') for item(0), item(1) is not executing and warning occurs. Following codes give the solution of this problem that in loop item(0) should be applied rather than item($i) because after removing first attribute node now present element has only one attribute node.

<?php
$html  = '<h1 id="h1test" class="h2test">Heading</h1>';
$html .= '<p align="left" class="right">Hello World</p>';

$doc = new DOMDocument();
$doc->loadHTML($html);

// remove attributes from  the h1 element
$h1 = $doc->getElementsByTagName('h1')->item(0);
$length = $h1->attributes->length;
for ($i = 0; $i < $length; $i++) {
    $name = $h1->attributes->item(0)->nodeName;
    $value = $h1->attributes->item(0)->nodeValue;
    $h1->removeAttribute($name);
    echo "h1: removed attribute name :- " .$name."</br>";
    echo "h1: removed attribute value :- " .$value."</br>";
    }
// remove attributes from the p element
$p = $doc->getElementsByTagName('p')->item(0);
for ($i = 0; $i < $length; $i++) {
    $name = $p->attributes->item(0)->nodeName;
    $value = $p->attributes->item(0)->nodeValue;
    $p->removeAttribute($name);
    echo "p: removed attribute name :- " .$name."</br>";
    echo "p: removed attribute value :- " .$value."</br>";
}
?>

OUTPUT:

h1: removed attribute name :- id
h1: removed attribute value :- h1test
h1: removed attribute name :- class
h1: removed attribute value :- h2test
p: removed attribute name :- align
p: removed attribute value :- left
p: removed attribute name :- class
p: removed attribute value :- right
kendsnyder at gmail dot com 29-Oct-2009 07:55
To add to xafford's comment. When iterating a named node map collection using ->item() or using foreach, removing a attribute with DOMNode->removeAttribute() or DOMNode->removeAttributeNode() alters the collection as if it were a stack. To illustrate, the code below tries to remove all attributes from each element but only removes the first. One work around is to copy the named node map into an array before removing attributes. Using PHP 5.2.9 on Windows XP.

<?php
error_reporting(E_ALL);
$html  = '<h1 id="h1test" class="h1test">Heading</h1>';
$html .= '<p align="left" class="ptest">Hello World</p>';

$doc = new DOMDocument();
$doc->loadHTML($html);

// remove attributes from  the h1 element
$h1 = $doc->getElementsByTagName('h1')->item(0);
$length = $h1->attributes->length;
for ($i = 0; $i < $length; ++$i) {
    $name = $h1->attributes->item($i)->name;
    $h1->removeAttribute($name);
    echo "h1: removed attribute `$name`<br>";
}
// remove attributes from the p element
$p = $doc->getElementsByTagName('p')->item(0);
foreach ($p->attributes as $name => $attrNode) {
    $p->removeAttribute($name);
    echo "p: removed attribute `$name`<br>";
}

?>

OUTPUT:
-------
h1: removed attribute `id`

Notice: Trying to get property of non-object in nodemap.php on line 13
h1: removed attribute ``
p: removed attribute `align`
xafford 15-Oct-2009 03:16
I stumbled upon a problem with DOMNamedNodeMap. If you iterate over a DOMNamedNodeMap, representing the attributes of a DOMElement with foreach and you use DOMElement::removeAttributeNode only the first attribute will be handled.

Example (not complete):

<?php

/*
 * Imagine you got a node like this:
 * <a onclick="alert('evil')" href="http://example.com">evil</a>
 * and onclick should be removed, href would not be tested.
 */

foreach ( $node->attributes as $attribute )
{

    echo 'checking attribute ', $attribute->name, '<br />';

    if ( ! in_array ( $attribute->name, $allowed_attributes ) )
    {
        $node->removeAttributeNode ( $attribute );
    }

}

?>

The output would be:

checking attribute onclick


マップにあるノードの数を取得する

  • ≪ DOMNamedNodeMap
  • DOMNamedNodeMap::getIterator ≫
  • PHP Manual
  • DOMNamedNodeMap
  • マップにあるノードの数を取得する

DOMNamedNodeMap::count

(PHP 7 >= 7.2.0, PHP 8)

DOMNamedNodeMap::count — マップにあるノードの数を取得する

説明

public DOMNamedNodeMap::count(): int

マップにあるノードの数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

マップにあるノードの数を返します。これは length プロパティと等しくなります。

User Contributed Notes

There are no user contributed notes for this page.


外部のイテレータを取得する

  • ≪ DOMNamedNodeMap::count
  • DOMNamedNodeMap::getNamedItem ≫
  • PHP Manual
  • DOMNamedNodeMap
  • 外部のイテレータを取得する

DOMNamedNodeMap::getIterator

(PHP 8)

DOMNamedNodeMap::getIterator — 外部のイテレータを取得する

説明

public DOMNamedNodeMap::getIterator(): Iterator

名前付きノードのマップ向けに、外部のイテレータを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

Iterator あるいは Traversable を実装したオブジェクトのインスタンスを返します。

エラー / 例外

失敗した場合は Exception をスローします。

参考

  • IteratorAggregate::getIterator() - 外部イテレータを取得する

User Contributed Notes

There are no user contributed notes for this page.


名前で指定されたノードを取得する

  • ≪ DOMNamedNodeMap::getIterator
  • DOMNamedNodeMap::getNamedItemNS ≫
  • PHP Manual
  • DOMNamedNodeMap
  • 名前で指定されたノードを取得する

DOMNamedNodeMap::getNamedItem

(PHP 5, PHP 7, PHP 8)

DOMNamedNodeMap::getNamedItem — 名前で指定されたノードを取得する

説明

public DOMNamedNodeMap::getNamedItem(string $qualifiedName): ?DOMNode

nodeName で指定されたノードを取得します。

パラメータ

qualifiedName

取得するノードの名前。

戻り値

指定した (任意の型の) nodeName のノード、 あるいはノードが見つからなかった場合には null を返します。

参考

  • DOMNamedNodeMap::getNamedItemNS() - ローカル名および名前空間 URI で指定したノードを取得する

User Contributed Notes

franp at free dot fr 03-Mar-2006 07:28
Basic example of use :

<?xml version="1.0" encoding="UTF-8"?>
<racine version="2.0a">
  <article/>
</racine>

<?php
(...)
 echo $doc->documentElement->attributes->getNamedItem("version")->nodeValue;

// returns "2.0a"
?>


ローカル名および名前空間 URI で指定したノードを取得する

  • ≪ DOMNamedNodeMap::getNamedItem
  • DOMNamedNodeMap::item ≫
  • PHP Manual
  • DOMNamedNodeMap
  • ローカル名および名前空間 URI で指定したノードを取得する

DOMNamedNodeMap::getNamedItemNS

(PHP 5, PHP 7, PHP 8)

DOMNamedNodeMap::getNamedItemNS — ローカル名および名前空間 URI で指定したノードを取得する

説明

public DOMNamedNodeMap::getNamedItemNS(?string $namespace, string $localName): ?DOMNode

localName および namespace で指定したノードを取得します。

パラメータ

namespace

取得するノードの名前空間 URI。

localName

取得するノードのローカル名。

戻り値

指定した (任意の型の) ローカル名および名前空間 URI のノード、 あるいはノードが見つからなかった場合には null を返します。

参考

  • DOMNamedNodeMap::getNamedItem() - 名前で指定されたノードを取得する

User Contributed Notes

There are no user contributed notes for this page.


インデックスで指定したノードを取得する

  • ≪ DOMNamedNodeMap::getNamedItemNS
  • DOMNameSpaceNode ≫
  • PHP Manual
  • DOMNamedNodeMap
  • インデックスで指定したノードを取得する

DOMNamedNodeMap::item

(PHP 5, PHP 7, PHP 8)

DOMNamedNodeMap::item — インデックスで指定したノードを取得する

説明

public DOMNamedNodeMap::item(int $index): ?DOMNode

DOMNamedNodeMap オブジェクトから、 index で指定したノードを取得します。

パラメータ

index

マップ内のインデックス。

戻り値

マップ内の index 番目の位置にあるノード、 あるいはインデックスが不正な形式 (マップ内の要素数以上) の場合は null を返します。

User Contributed Notes

reyjacobs at yahoo dot com 07-Mar-2008 11:24
Nevermind: I got it, and here it is:

<?php
if($element->hasAttributes())
{
    $attributes = $element->attributes;
    if(!is_null($attributes))
    {
        foreach ($attributes as $index=>$attr)
        {
            echo $attr->name."=\"".$attr->value."\"";
        }
    }
}
?>


DOMNameSpaceNode クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMNameSpaceNode {
/* プロパティ */
public readonly string $nodeName;
public readonly ?string $nodeValue;
public readonly int $nodeType;
public readonly string $prefix;
public readonly ?string $localName;
public readonly ?string $namespaceURI;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
}

プロパティ

nodeName

このノードの修飾名

nodeValue

このノードが宣言している名前空間URI。 名前空間が空の場合は、null

nodeType

ノードのタイプ。 XML_NAMESPACE_DECL_NODE になります。

prefix

このノードが宣言している名前空間のprefix

localName

このノードの修飾名のローカルパート

namespaceURI

このノードが宣言している名前空間URI。 未指定の場合は null

isConnected

ノードがドキュメントに接続しているかどうか

ownerDocument

このノードと関連がある DOMDocument。 このノードが DOMDocument でない場合は null

parentNode

このノードの親ノード。 該当するノードがない場合、null を返します。

parentElement

このノードの親要素。 該当するノードがない場合、null を返します。

変更履歴

バージョン | 説明
8.3.0 | DOMNameSpaceNode::$parentElement と DOMNameSpaceNode::$isConnected が追加されました。

User Contributed Notes

There are no user contributed notes for this page.


DOMNode クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMNode {
/* プロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public appendChild(DOMNode $node): DOMNode|false
public C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public cloneNode(bool $deep = false): DOMNode|false
public contains(DOMNode|DOMNameSpaceNode|null $other): bool
public getLineNo(): int
public getNodePath(): ?string
public getRootNode(?array $options = null): DOMNode
public hasAttributes(): bool
public hasChildNodes(): bool
public insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public isDefaultNamespace(string $namespace): bool
public isEqualNode(?DOMNode $otherNode): bool
public isSameNode(DOMNode $otherNode): bool
public isSupported(string $feature, string $version): bool
public lookupNamespaceURI(?string $prefix): ?string
public lookupPrefix(string $namespace): ?string
public normalize(): void
public removeChild(DOMNode $child): DOMNode|false
public replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

nodeName

現在のノード型の正確な名前を返す

nodeValue

その型に応じてノードの値を返す。 W3C の仕様とは異なり、 DOMElement ノードの値は null ではなく DOMNode::textContent と等しくなる。

nodeType

ノードの型を、定義済みの定数 XML_xxx_NODE のいずれかで返す

parentNode

このノードの親 (存在しない場合は null) を返す

parentElement

この要素の親要素。存在しない場合は null を返す

childNodes

このノードのすべての子を含む DOMNodeList。 子が存在しない場合は、空の DOMNodeList

firstChild

このノードの最初の子。存在しない場合は null を返す

lastChild

このノードの最後の子。存在しない場合は null を返す

previousSibling

このノードの直前のノード。存在しない場合は null を返す

nextSibling

このノードの直後のノード。存在しない場合は null を返す

attributes

このノードが DOMElement の場合は ノードの属性を含む DOMNamedNodeMap、 それ以外の場合は null

isConnected

ノードが Document に接続されているかどうか

ownerDocument

このノードに関連付けられている DOMDocument オブジェクト このノードが DOMDocument だった場合は、null

namespaceURI

このノードの名前空間 URI。指定されていない場合は null

prefix

このノードの名前空間プレフィックス

localName

このノードの名前のローカル部分を返す

baseURI

このノードの完全なベース URI。もし実装が完全な URL を できなかった場合は null

textContent

このノードとその子孫ノードのテキスト

変更履歴

バージョン | 説明
8.3.0 | プロパティ DOMNode::$parentElement と DOMNode::$isConnected が追加されました。
8.0.0 | 実装されていなかったメソッド DOMNode::compareDocumentPosition(), DOMNode::isEqualNode(), DOMNode::getFeature(), DOMNode::setUserData(), DOMNode::getUserData() が削除されました。

注意

注意:

DOM拡張モジュール は UTF-8 エンコーディングを使います。他のエンコーディングを扱う場合は、mb_convert_encoding(), UConverter::transcode(), iconv() を使ってください。

参考

  • » W3C specification of Node

目次

  • DOMNode::appendChild — 子要素群の最後に新しい子要素を追加する
  • DOMNode::C14N — ノードを文字列に正規化する
  • DOMNode::C14NFile — ノードをファイルに正規化する
  • DOMNode::cloneNode — ノードを複製する
  • DOMNode::contains — ノードが別のノードを含んでいるかを調べる
  • DOMNode::getLineNo — ノードが存在する行の番号を取得します。
  • DOMNode::getNodePath — ノードの XPath を取得する
  • DOMNode::getRootNode — ルート(根)ノードを取得する
  • DOMNode::hasAttributes — ノードが属性を保持しているかどうかを調べる
  • DOMNode::hasChildNodes — ノードが子を保持しているかどうかを調べる
  • DOMNode::insertBefore — 参照しているノードの前に新しい子を追加する
  • DOMNode::isDefaultNamespace — 指定した namespaceURI がデフォルトの名前空間かどうかを調べる
  • DOMNode::isEqualNode — ノードが等しいかを調べる
  • DOMNode::isSameNode — 2 つのノードが等しいかどうかを調べる
  • DOMNode::isSupported — 指定したバージョンで機能がサポートされているかどうかを調べる
  • DOMNode::lookupNamespaceURI — プレフィックスに基づいて、ノードの名前空間 URI を取得する
  • DOMNode::lookupPrefix — 名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する
  • DOMNode::normalize — ノードを正規化する
  • DOMNode::removeChild — 子要素群から子要素を削除する
  • DOMNode::replaceChild — 子を置き換える

User Contributed Notes

Anonymous 06-May-2018 04:12
It would be helpful if docs for concrete properties mentioned readonly status of some properties:
"
ownerDocument

    The DOMDocument object associated with this node.

"
zlk1214 at gmail dot com 15-Jan-2016 01:07
A function that can set the inner HTML without encoding error. $html can be broken content such as "<a ID=id20>ssss"
function setInnerHTML($node, $html) {
    removeChildren($node);
    if (empty($html)) {
        return;
    }

    $doc = $node->ownerDocument;
    $htmlclip = new DOMDocument();
    $htmlclip->loadHTML('<meta http-equiv="Content-Type" content="text/html;CHARSET=shift-jis"><div>' . $html . '</div>');
    $clipNode = $doc->importNode($htmlclip->documentElement->lastChild->firstChild, true);
    while ($item = $clipNode->firstChild) {
        $node->appendChild($item);
    }
}
metanull 24-Jul-2014 03:11
Yet another DOMNode to php array conversion function.
Other ones on this page are generating too "complex" arrays; this one should keep the array as tidy as possible.
Note: make sure to set LIBXML_NOBLANKS when calling DOMDocument::load, loadXML or loadHTML
See: http://be2.php.net/manual/en/libxml.constants.php
See: http://be2.php.net/manual/en/domdocument.loadxml.php

<?php
         /**
         * Returns an array representation of a DOMNode
         * Note, make sure to use the LIBXML_NOBLANKS flag when loading XML into the DOMDocument
         * @param DOMDocument $dom
         * @param DOMNode $node
         * @return array
         */
        function nodeToArray( $dom, $node) {
            if(!is_a( $dom, 'DOMDocument' ) || !is_a( $node, 'DOMNode' )) {
                return false;
            }
            $array = false;
            if( empty( trim( $node->localName ))) {// Discard empty nodes
                return false;
            }
            if( XML_TEXT_NODE == $node->nodeType ) {
                return $node->nodeValue;
            }
            foreach ($node->attributes as $attr) {
                $array['@'.$attr->localName] = $attr->nodeValue;
            }
            foreach ($node->childNodes as $childNode) {
                if ( 1 == $childNode->childNodes->length && XML_TEXT_NODE == $childNode->firstChild->nodeType ) {
                    $array[$childNode->localName] = $childNode->nodeValue;
                }  else {
                    if( false !== ($a = self::nodeToArray( $dom, $childNode))) {
                        $array[$childNode->localName] =     $a;
                    }
                }
            }
            return $array;
        }
?>
pizarropablo at gmail dot com 16-Apr-2014 02:36
In response to: alastair dot dallas at gmail dot com about "#text" nodes.
"#text" nodes appear when there are spaces or new lines between end tag and next initial tag.

Eg "<data><age>10</age>[SPACES]<other>20</other>[SPACES]</data>"

"data" childNodes has 4 childs:
- age = 10
- #text = spaces
- other = 20
- #text =  spaces
matej dot golian at gmail dot com 29-Aug-2013 01:15
Here is a little function that truncates a DomNode to a specified number of text characters. I use it to generate HTML excerpts for my blog entries.

<?php

function makehtmlexcerpt(DomNode $html, $excerptlength)
{
$remove = 0;
$htmllength = strlen(html_entity_decode($html->textContent, ENT_QUOTES, 'UTF-8'));
$truncate = $htmllength - $excerptlength;
if($htmllength > $excerptlength)
{
if($html->hasChildNodes())
{
$children = $html->childNodes;
for($counter = 0; $counter < $children->length; $counter ++)
{
$child = $children->item($children->length - ($counter + 1));
$childlength = strlen(html_entity_decode($child->textContent, ENT_QUOTES, 'UTF-8'));
if($childlength <= $truncate)
{
$remove ++;
$truncate = $truncate - $childlength;
}
else
{
$child = makehtmlexcerpt($child, $childlength - $truncate);
break;
}
}
if($remove != 0)
{
for($counter = 0; $counter < $remove; $counter ++)
{
$html->removeChild($html->lastChild);
}
}
}
else
{
if($html->nodeName == '#text')
{
$html->nodeValue = substr(html_entity_decode($html->nodeValue, ENT_QUOTES, 'UTF-8'), 0, $htmllength - $truncate);
}
}
}
return $html;
}

?>
alastair dot dallas at gmail dot com 25-Sep-2011 08:44
The issues around mixed content took me some experimentation to remember, so I thought I'd add this note to save others time.

When your markup is something like: <div><p>First text.</p><ul><li><p>First bullet</p></li></ul></div>, you'll get XML_ELEMENT_NODEs that are quite regular. The <div> has children <p> and <ul> and the nodeValue for both <p>s yields the text you expect.

But when your markup is more like <p>This is <b>bold</b> and this is <i>italic</i>.</p>, you realize that the nodeValue for XML_ELEMENT_NODEs is not reliable. In this case, you need to look at the <p>'s child nodes. For this example, the <p> has children: #text, <b>, #text, <i>, #text.

In this example, the nodeValue of <b> and <i> is the same as their #text children. But you could have markup like: <p>This <b>is bold and <i>bold italic</i></b>, you see?</p>. In this case, you need to look at the children of <b>, which will be #text, <i>, because the nodeValue of <b> will not be sufficient.

XML_TEXT_NODEs have no children and are always named '#text'. Depending on how whitespace is handled, your tree may have "empty" #text nodes as children of <body> and elsewhere.

Attributes are nodes, but I had forgotten that they are not in the tree expressed by childNodes. Walking the full tree using childNodes will not visit any attribute nodes.
imranomar at gmail dot com 20-Mar-2011 06:10
Just discovered that node->nodeValue strips out all the tags
I. Cook 19-Apr-2010 02:43
For a reference with more information about the XML DOM node types, see http://www.w3schools.com/dom/dom_nodetype.asp

(When using PHP DOMNode, these constants need to be prefaced with "XML_")
R. Studer 13-Jan-2010 09:03
For clarification:
The assumingly 'discoverd' by previous posters and seemingly undocumented methods (.getElementsByTagName and .getAttribute) on this class (DOMNode) are in fact methods of the class DOMElement, which inherits from DOMNode.

See: http://www.php.net/manual/en/class.domelement.php
David Rekowski 08-Jan-2010 01:54
You cannot simply overwrite $textContent, to replace the text content of a DOMNode, as the missing readonly flag suggests. Instead you have to do something like this:

<?php

$node->removeChild($node->firstChild);
$node->appendChild(new DOMText('new text content'));

?>

This example shows what happens:

<?php

$doc = DOMDocument::loadXML('<node>old content</node>');
$node = $doc->getElementsByTagName('node')->item(0);
echo "Content 1: ".$node->textContent."\n";

$node->textContent = 'new content';
echo "Content 2: ".$node->textContent."\n";

$newText = new DOMText('new content');

$node->appendChild($newText);
echo "Content 3: ".$node->textContent."\n";

$node->removeChild($node->firstChild);
$node->appendChild($newText);
echo "Content 4: ".$node->textContent."\n";

?>

The output is:

Content 1: old content // starting content
Content 2: old content // trying to replace overwriting $node->textContent
Content 3: old contentnew content // simply appending the new text node
Content 4: new content // removing firstchild before appending the new text node

If you want to have a CDATA section, use this:

<?php
$doc = DOMDocument::loadXML('<node>old content</node>');
$node = $doc->getElementsByTagName('node')->item(0);
$node->removeChild($node->firstChild);
$newText = $doc->createCDATASection('new cdata content');
$node->appendChild($newText);
echo "Content withCDATA: ".$doc->saveXML($node)."\n";
?>
Steve K 03-Nov-2009 11:47
This class apparently also has a getElementsByTagName method.

I was able to confirm this by evaluating the output from DOMNodeList->item() against various tests with the is_a() function.
marc at ermshaus dot org 05-May-2009 08:36
It took me forever to find a mapping for the XML_*_NODE constants. So I thought, it'd be handy to paste it here:

 1 XML_ELEMENT_NODE
 2 XML_ATTRIBUTE_NODE
 3 XML_TEXT_NODE
 4 XML_CDATA_SECTION_NODE
 5 XML_ENTITY_REFERENCE_NODE
 6 XML_ENTITY_NODE
 7 XML_PROCESSING_INSTRUCTION_NODE
 8 XML_COMMENT_NODE
 9 XML_DOCUMENT_NODE
10 XML_DOCUMENT_TYPE_NODE
11 XML_DOCUMENT_FRAGMENT_NODE
12 XML_NOTATION_NODE
matt at lamplightdb dot co dot uk 06-Apr-2009 05:39
And apparently also a setAttribute method too:

$node->setAttribute( 'attrName' , 'value' );
brian wildwoodassociates.info 07-Dec-2008 11:27
This class has a getAttribute method.

Assume that a DOMNode object $ref contained an anchor taken out of a DOMNode List.  Then

    $url = $ref->getAttribute('href');

would isolate the url associated with the href part of the anchor.


子要素群の最後に新しい子要素を追加する

  • ≪ DOMNode
  • DOMNode::C14N ≫
  • PHP Manual
  • DOMNode
  • 子要素群の最後に新しい子要素を追加する

DOMNode::appendChild

(PHP 5, PHP 7, PHP 8)

DOMNode::appendChild — 子要素群の最後に新しい子要素を追加する

説明

public DOMNode::appendChild(DOMNode $node): DOMNode|false

この関数は、既存の子要素のリストに新しい子要素を追加するか、 あるいは新しい子要素リストを作成します。子要素の作成には DOMDocument::createElement()、 DOMDocument::createTextNode() などを使用するか、単に別のノードを使用します。

既存のノードを使う場合、そのノードは移動します。

パラメータ

node

追加する子要素。

戻り値

追加したノードを返します。 エラーの場合は false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用であったり、挿入するノードの以前の親が 読み込み専用であったりした場合に発生します。

DOM_HIERARCHY_REQUEST_ERR

node で指定した型の子ノードを 保持することが許可されていない場合、あるいは追加しようとしている ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

node が、このノードとは別の ドキュメントで作成されたものである場合に発生します。

例

以下の例は、新しいドキュメントに新しい要素を追加します。

例1 子要素の追加

<?php

$doc = new DOMDocument;

$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);

echo $doc->saveXML();
?>

例2 ネストされた子ノード

<?php

$doc = new DOMDocument;

$headNode = $doc->createElement("head");
$doc->appendChild($headNode);

$titleNode = $doc->createElement("title");
$headNode->appendChild($titleNode);

echo $doc->saveXML();
?>

参考

  • DOMChildNode::after() - ノードの後ろにノードを追加する
  • DOMNode::insertBefore() - 参照しているノードの前に新しい子を追加する
  • DOMNode::removeChild() - 子要素群から子要素を削除する
  • DOMNode::replaceChild() - 子を置き換える

User Contributed Notes

cweiske at php dot net 05-Nov-2017 01:56
If you want to move the children of one node to another, you cannot simply iterate on $element->childNodes - you have to make an array first:

<?php
$children = [];
foreach ($elemWithChildren->childNodes as $child) {
    $children[] = $child;
}
foreach ($children as $child) {
    $targetElement->appendChild($child);
}
?>
frame at dynamiccreated dot de 01-Dec-2010 04:14
Aware dealing with DOMNodeList and appendChild() on the same Node.

If you want to replace only the children not the DOMElement itself you probably foreach childNodes-property or get the DOMElements with a for-loop and item()-method of the DOMNodeList.

You will fail if you not clone the received single DOMElement. Actually the count of the DOMNodelist will be decreased on appendChild count but appendChild seems to refer to the old Nodelist and nothing visible will happen. Cloning will help.
krisdover at hotmail dot com 31-May-2008 08:49
What's not mentioned here is that DOMNode::appendChild() can also be used to move an existing node to another part of the DOMDocument, e.g.

<?php
$doc = new DOMDocument();
$doc->loadXML("<foobar><bar/><foo/></foobar>");
$bar = $doc->documentElement->firstChild;
$foo = $doc->documentElement->lastChild;
$foo->appendChild($bar);
print $doc->saveXML();
?>

This produces:

<?xml version="1.0"?>
<foobar><foo><bar/></foo></foobar>

Note that the nodes "<foo/>" and "<bar/>" were siblings, i.e. the first and last child of "<foobar>" but using appendChild() we were able to move "<bar/>" so that it is a child of "<foo/>".

This saves you the trouble of doing a DOMNode::removeChild($bar) to remove "<bar/>" before appending it as a child of "<foo/>".

Kris Dover
jrtayloriv at gmail dot com 30-Mar-2008 04:56
If you want to create nested DOM elements:

<?php
    $doc = new DOMDocument();

    $foo = $doc->createElement("foo");
    $doc->appendChild($foo);

    $bar = $doc->createElement("bar");
    $foo->appendChild($bar);

    $bazz = $doc->createElement("bazz");
    $foo->appendChild($bazz);

    echo $doc->saveXML();
?>

Is equivalent to:

<foo>
  <bar></bar>
  <bazz></bazz>
</foo>


ノードを文字列に正規化する

  • ≪ DOMNode::appendChild
  • DOMNode::C14NFile ≫
  • PHP Manual
  • DOMNode
  • ノードを文字列に正規化する

DOMNode::C14N

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DOMNode::C14N — ノードを文字列に正規化する

説明

public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false

ノードを文字列に正規化します。

パラメータ

exclusive

指定した xpath あるいは名前空間プレフィックスにマッチするノードだけを対象としたパースを有効にする。

withComments

コメントを残して出力する。

xpath

ノードをフィルタする XPath の配列。 この配列のそれぞれのエントリは、以下の情報を持つ連想配列です:

  • XPath の式の文字列を含む query キー。必須です。
  • 名前空間のプレフィックス(keys) を名前空間URI (values) にマップした配列を含む namespaces キー。オプションです。

nsPrefixes

ノードを絞り込むための名前空間プレフィックスの配列。

戻り値

正規化したノードを文字列で返します。 失敗した場合に false を返します

例

例1 XPath クエリの例

以下のコードは、XPath クエリを使ってノードをフィルタし、 正規化する高度なやり方を示します。

<?php
$dom = new DOMDocument();
$dom->loadXML(<<<XML
<root xmlns:food="urn:food">
<!-- redundant namespace declaration will be canonicalized -->
<food:fruit xmlns:food="urn:food">Apple</food:fruit>
<food:fruit>Orange</food:fruit>
<food:fruit>Pear</food:fruit>
<!-- vegetables here -->
<food:vegetable>Lettuce</food:vegetable>
</root>
XML);
echo $dom->C14N(true, false, [
"query" => ".//f:fruit|.//f:fruit/text()",
"namespaces" => ["f" => "urn:food"],
]);
?>

上の例の出力は以下となります。

<food:fruit>Apple</food:fruit><food:fruit>Orange</food:fruit><food:fruit>Pear</food:fruit>

参考

  • DOMNode::C14NFile() - ノードをファイルに正規化する

User Contributed Notes

lordbaco 28-Jan-2016 09:57
[edit by nielsdos: This has been fixed starting in PHP 8.4]

Good to know:

<< Due to a known issue in XML canonicalization in PHP, processing large metadata files in SimpleSAMLphp takes a big amount of resources, with that amount growing approximately by the square of the number of entities in the metadata set >>
https://simplesamlphp.org/metaprocessing

<< The C14N() function appears to have a runtime that is O(N^2) (or possibly worse?) depending on input size, which means that it becomes very slow as the input grows. For example, an input with around 196000 nodes takes about 290 seconds, while an input with 486000 nodes takes 2200 seconds. >>
https://bugs.php.net/bug.php?id=53655

We had the same issue with a 4.1 MB XML (105k lines). The sample code of ticket  #53655 takes 1h36 minute to canonicalize it!
jorda at edpsciences dot org 13-Mar-2015 09:11
C14N() returns an empty string if the node is not included in the document tree:
<?php
$d = new DOMDocument('1.0');
$d->loadXML('<foo></foo>');
$n = $d->createElement('bar');
var_dump($n->C14N());
$d->documentElement->appendChild($n);
var_dump($n->C14N());
?>
output:
string(0) ""
string(11) "<bar></bar>"
Rijk 27-Mar-2013 09:26
When working with (malformed) HTML, you're probably better off using DOMDocument's saveHTML() method instead. C14N() will attempt to make your HTML valid XML, for example by converting <br> to <br></br>.

So instead of:
$html = $Node->C14N();

Use:
$html = $Node->ownerDocument->saveHTML( $Node );


ノードをファイルに正規化する

  • ≪ DOMNode::C14N
  • DOMNode::cloneNode ≫
  • PHP Manual
  • DOMNode
  • ノードをファイルに正規化する

DOMNode::C14NFile

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DOMNode::C14NFile — ノードをファイルに正規化する

説明

public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false

ノードをファイルに正規化します。

パラメータ

uri

出力を書き出すパス。

exclusive

指定した xpath あるいは名前空間プレフィックスにマッチするノードだけを対象としたパースを有効にする。

withComments

コメントを残して出力する。

xpath

ノードをフィルタする XPath の配列。 この配列のそれぞれのエントリは、以下の情報を持つ連想配列です:

  • XPath の式の文字列を含む query キー。必須です。
  • 名前空間のプレフィックス(keys) を名前空間URI (values) にマップした配列を含む namespaces キー。オプションです。

nsPrefixes

ノードを絞り込むための名前空間プレフィックスの配列。

戻り値

書き込んだバイト数を返します。 失敗した場合に false を返します

参考

  • DOMNode::C14N() - ノードを文字列に正規化する

User Contributed Notes

There are no user contributed notes for this page.


ノードを複製する

  • ≪ DOMNode::C14NFile
  • DOMNode::contains ≫
  • PHP Manual
  • DOMNode
  • ノードを複製する

DOMNode::cloneNode

(PHP 5, PHP 7, PHP 8)

DOMNode::cloneNode — ノードを複製する

説明

public DOMNode::cloneNode(bool $deep = false): DOMNode|false

ノードのコピーを作成します。

パラメータ

deep

子孫要素を含めてコピーするかどうかを指定します。 このパラメータのデフォルト値は false です。

戻り値

複製されたノードを返します。

User Contributed Notes

cmd at 1xinternet dot de 16-Nov-2016 12:11
If you need to clone node including all child DOMNode elements:

private function cloneNode($node){

        $nd = new DOMNode();

        for ($i = 0; $i < $node->childNodes->length; $i++) {
            $child = $node->childNodes->item($i);
            if ($child->nodeType === XML_TEXT_NODE) {
                $nd->appendChild($node->cloneNode(true));
            }
            else{
                $nd->appendChild($this->cloneNode($child));
            }
        }

        return $nd;
    }
h-fate at gmx dot net 01-Oct-2014 07:48
If you have an object that holds a DOMNode, cloning the object won't clone the DOMNode with it. If you simply copy the object or add its DOMNode several times, you will in fact only move the DOMNode in the tree, not multiply it. That might seem obvious, but took me half a day to find out.

The object needs to use __clone and clone the node manually:

<?php
class containsNode {
    public $node; //set from somewhere

    public function __clone() {
        $this->node = $this->node->cloneNode(TRUE);
    }
}
?>
frame at dynamiccreated dot de 02-Dec-2012 02:19
Remeber that DOMNode always needs a reference to a parent node or DOMDocument.

For example, if you try to clone a node - copy all children - and overwrite or delete the variable which holds the cloned node - all children will loose any reference and getting invalid.

This will cause a nice message like "Couldn't... node no longer exists" if you have luck. In most cases PHP only gives you the poor information "Couldn't fetch DOM[...]" which makes hard to find out whats going on, depending on the current operation.
cemkalyoncu at gmail dot com 28-Apr-2009 03:04
If you need some function to clone a node without touching namespaces you can use the following.

<?php
private function cloneNode($node,$doc){
    $nd=$doc->createElement($node->nodeName);

    foreach($node->attributes as $value)
        $nd->setAttribute($value->nodeName,$value->value);

    if(!$node->childNodes)
        return $nd;

    foreach($node->childNodes as $child) {
        if($child->nodeName=="#text")
            $nd->appendChild($doc->createTextNode($child->nodeValue));
        else
            $nd->appendChild(cloneNode($child,$doc));
    }

    return $nd;
}
?>
[montana] at [percepticon] dot [com] 16-Feb-2009 02:23
<?php

//@oliver thanks for example source...

/*
 cloneNode(false) does not omit
 Attributes of cloned node,
 to achieve this an iteration is required.
 this is probably less efficient
 than merely creating a new
 node from the desired nodeName
 but in some cases could be useful.

use case:

omit subnodes and attributes of
secured portions of an xml document
without altering expected general structure;
*/
//xml to use

$file="<?xml version='1.0'?>
<book type='paperback'>
    <title name='MAP'>Red Nails</title>
    <price>$12.99</price>
    <author>
        <name first='Robert' middle='E' last='Howard'/>
        <birthdate disco='false' nirvana='definitely'>
            9/21/1977
            <month title='september' />
        </birthdate>
    </author>
    <author>
        <name first='Arthur' middle='Mc' last='Kayn'/>
    </author>
</book>";

$doc = new domDocument;

$doc->loadXML($file);

$xpath = new domXPath($doc);

$query = "//author/birthdate";
$xpathQuery = $xpath->query($query);

//would be a loop in production code...
$child = $xpathQuery->item(0);

$parent = $child->parentNode;

$doppel = $child->cloneNode(false);

$limit = $doppel->attributes->length;

for ($a=0;$a<$limit;$a++) {
    $doppel->removeAttributeNode($doppel->attributes->item(0));
}
//swap for now empty node
$parent->replaceChild( $doppel, $child);

print $doc->saveXML();

?>
oliver dot christen at camptocamp dot com 19-Nov-2004 08:48
simple exemple of node cloning

<?xml version="1.0"?>

<book type="paperback">
    <title name='MAP'>Red Nails</title>
    <price>$12.99</price>
    <author>
        <name first="Robert" middle="E" last="Howard"/>
        <birthdate>9/21/1977</birthdate>
    </author>
    <author>
        <name first="Arthur" middle="Mc" last="Kayn"/>
    </author>
</book>

<?php

//filename xml file to use
$file = 'book.xml';

$doc = new domDocument;

if (file_exists($file)) {
    $doc->load($file);
} else {
    exit('Erreur !.');
}

$xpath = new domXPath($doc);

$query = "//author/*";
$xpathQuery = $xpath->query($query);

$size = $xpathQuery->length;
for ($i=0; $i<$size; $i++){
    $node = $xpathQuery->item($i);
    if ($node->nodeName == 'birthdate' && $node->hasChildNodes() && $node->firstChild->textContent != ''){
        $clonenode = $node->cloneNode(true);
        $refnode = $node;
    }
}
for ($i=0; $i<$size; $i++){
    $node = $xpathQuery->item($i);
    if (!$node->isSameNode($refnode)){
        $newnode = $node->appendChild($clonenode);
    }
}

print $doc->saveXML();

?>


ノードが別のノードを含んでいるかを調べる

  • ≪ DOMNode::cloneNode
  • DOMNode::getLineNo ≫
  • PHP Manual
  • DOMNode
  • ノードが別のノードを含んでいるかを調べる

DOMNode::contains

(PHP 8 >= 8.3.0)

DOMNode::contains — ノードが別のノードを含んでいるかを調べる

説明

public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool

ノードが other ノードを含んでいるかを調べます。

パラメータ

other

調べるノード

戻り値

ノードが other ノードを含んでいる場合 true を返します。そうでない場合に false を返します。

例

例1 DOMNode::contains() の例

<?php

$dom = new DOMDocument();
$dom->loadXML(<<<XML
<!DOCTYPE HTML>
<html>
<body>
<main>
<p>Hello, world!</p>
</main>
</body>
</html>
XML);

$xpath = new DOMXPath($dom);
$main = $xpath->query("//main")[0];

var_dump($dom->documentElement->contains($main));
?>

上の例の出力は以下となります。

bool(true)

User Contributed Notes

There are no user contributed notes for this page.


ノードが存在する行の番号を取得します。

  • ≪ DOMNode::contains
  • DOMNode::getNodePath ≫
  • PHP Manual
  • DOMNode
  • ノードが存在する行の番号を取得します。

DOMNode::getLineNo

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DOMNode::getLineNo — ノードが存在する行の番号を取得します。

説明

public DOMNode::getLineNo(): int

パース時にノードが定義された行の番号を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

パース時にノードが定義された行の番号を返します。 ノードが手動で作成された場合、戻り値は 0 になります。

例

例1 DOMNode::getLineNo() メソッドの例

<?php
// 以下の例で使うXMLのダンプ
$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<root>
<node />
</root>
XML;

// DOMDocumentクラスのインスタンスを生成する
$dom = new DOMDocument;

// XMLをロードする
$dom->loadXML($xml);

// <node> 要素が定義された行がどこにあるかを表示する
printf('The <node> tag is defined on line %d', $dom->getElementsByTagName('node')->item(0)->getLineNo());
?>

上の例の出力は以下となります。

The <node> tag is defined in line 3

User Contributed Notes

ruud at vanmelick dot com 25-Oct-2013 09:15
The 65535 line number limit is no longer a problem when you use libxml 2.9 or higher, but you have to explicitly enable support for big line numbers:

<?php
define('XML_PARSE_BIG_LINES', 4194304);
$dom = new DOMDocument;
$dom->loadXML($xml, XML_PARSE_BIG_LINES);
?>
Anonymous 19-May-2012 02:21
The DOMNode::getLineNo() method doesn't work properly due to a libxml2 bug.

https://bugzilla.gnome.org/show_bug.cgi?id=676026
luke dot NOREPLY at webconnex dot com 04-Mar-2011 06:28
This function is buggy. It doesn't always return the correct line number, especially for text elements. As an alternative you can do something like this:

<?php
$text = $node->ownerDocument->saveXML($node);
$line += substr_count($text, "\n");
?>

You'll want to keep a reference to $line (starting at 0) and add to it as you parse over the document recursively.

In order for this to work you have to tell DOMDocument to preserve white space before loading the document.


ノードの XPath を取得する

  • ≪ DOMNode::getLineNo
  • DOMNode::getRootNode ≫
  • PHP Manual
  • DOMNode
  • ノードの XPath を取得する

DOMNode::getNodePath

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DOMNode::getNodePath — ノードの XPath を取得する

説明

public DOMNode::getNodePath(): ?string

ノードの XPath ロケーションパスを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

XPath を含む文字列、あるいはエラー時に null を返します。

例

例1 DOMNode::getNodePath() の例

<?php
// 新しい DOMDocument インスタンスを作ります
$dom = new DOMDocument;

// XML を読み込みます
$dom->loadXML('
<fruits>
<apples>
<apple>braeburn</apple>
<apple>granny smith</apple>
</apples>
<pears>
<pear>conference</pear>
</pears>
</fruits>
');

// 各要素の XPath を表示します
foreach ($dom->getElementsByTagName('*') as $node) {
echo $node->getNodePath() . "\n";
}
?>

上の例の出力は以下となります。

/fruits
/fruits/apples
/fruits/apples/apple[1]
/fruits/apples/apple[2]
/fruits/pears
/fruits/pears/pear

参考

  • DOMXPath

User Contributed Notes

There are no user contributed notes for this page.


ルート(根)ノードを取得する

  • ≪ DOMNode::getNodePath
  • DOMNode::hasAttributes ≫
  • PHP Manual
  • DOMNode
  • ルート(根)ノードを取得する

DOMNode::getRootNode

(PHP 8 >= 8.3.0)

DOMNode::getRootNode — ルート(根)ノードを取得する

説明

public DOMNode::getRootNode(?array $options = null): DOMNode

ルート(根)ノードを取得します。

パラメータ

options

このパラメータにはまだ意味がありません

戻り値

ルート(根)ノードを返します。

例

例1 DOMNode::getRootNode() の例

<?php

$dom = new DOMDocument();
$dom->loadXML('<?xml version="1.0"?><html><body/></html>');

var_dump($dom->documentElement->firstElementChild->getRootNode() === $dom);
?>

上の例の出力は以下となります。

bool(true)

User Contributed Notes

There are no user contributed notes for this page.


ノードが属性を保持しているかどうかを調べる

  • ≪ DOMNode::getRootNode
  • DOMNode::hasChildNodes ≫
  • PHP Manual
  • DOMNode
  • ノードが属性を保持しているかどうかを調べる

DOMNode::hasAttributes

(PHP 5, PHP 7, PHP 8)

DOMNode::hasAttributes — ノードが属性を保持しているかどうかを調べる

説明

public DOMNode::hasAttributes(): bool

このメソッドは、ノードが属性を保持しているかどうかを調べます。 調べるノードは XML_ELEMENT_NODE である必要があります。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMNode::hasChildNodes() - ノードが子を保持しているかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


ノードが子を保持しているかどうかを調べる

  • ≪ DOMNode::hasAttributes
  • DOMNode::insertBefore ≫
  • PHP Manual
  • DOMNode
  • ノードが子を保持しているかどうかを調べる

DOMNode::hasChildNodes

(PHP 5, PHP 7, PHP 8)

DOMNode::hasChildNodes — ノードが子を保持しているかどうかを調べる

説明

public DOMNode::hasChildNodes(): bool

この関数は、ノードが子を保持しているかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMNode::hasAttributes() - ノードが属性を保持しているかどうかを調べる

User Contributed Notes

Anonymous 21-Mar-2015 04:33
Hi what if its a dynamic file and we cannot use get elements by tag name then how do we print the contents of all level tags?
richard dot gildx at gmail dot com 29-Jul-2012 01:20
This "hasChildNodes()" exercise is simple enough to make it clear and understandable. Or, you could take it as a tag empty check. By Richard Holm, Sweden.

<?php
$xmldoc=
'<?xml version="1.0" ?>
<root>
<text>Text</text>
<none/>
<empty></empty>
<space> </space>
</root>';

$domdoc=new DOMDocument();
$domdoc->loadXML($xmldoc);

$tag=$domdoc->getElementsByTagName('root')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo $tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('text')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo $tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('none')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo $tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('empty')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo $tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('space')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo $tag->tagName.$v."<br/>";
?>

Output:
root hasChildNodes
text hasChildNodes
none hasNoChildNodes
empty hasNoChildNodes
space hasChildNodes
sansana 14-Oct-2010 07:04
Personally I think using a simple:[code]if($DOMNode->childNodes <>0){}[/code] works better.
syngcw at syncgw.com 04-Jan-2010 05:53
This function is a bit tricky. If you want to find XML childnodes it is useless. You need to create a work-around:

<?php

$x = new DOMDocument();
$x->loadXML('
<A>
 <B>b-text</B>
 <C>
  <D>d-text</D>
 </C>
 <E/>
</A>');

shownode($x->getElementsByTagName('A')->item(0));
function shownode($x) {
 foreach ($x->childNodes as $p)
  if (hasChild($p)) {
      echo $p->nodeName.' -> CHILDNODES<br>';
      shownode($p);
  } elseif ($p->nodeType == XML_ELEMENT_NODE)
   echo $p->nodeName.' '.$p->nodeValue.'<br>';
}
function hasChild($p) {
 if ($p->hasChildNodes()) {
  foreach ($p->childNodes as $c) {
   if ($c->nodeType == XML_ELEMENT_NODE)
    return true;
  }
 }
 return false;
}

?>

shows:
B b-text
C -> CHILDNODES
D d-text
E
jintoppy at gmail dot com 28-Apr-2009 04:13
<?php

$doc = new DOMDocument;
$node = $doc->createElement("FirstMain", "First Main Node. This have child");
$doc->appendChild($node);
$childnode = $doc->createElement("childnode", "child node");
$node->appendChild($childnode);
$secondnode = $doc->createElement("SecondMain", "First Main Node. This don't have child");
$doc->appendChild($secondnode);
$doc->saveXML();
$nodeElmt = $doc->getElementsByTagName("FirstMain");
/*
if given as $nodeElmt = $doc->getElementsByTagName("childnode");
the output would be "This node has childnodes"

if given as $nodeElmt = $doc->getElementsByTagName("SecondMain");
the output would be "This node has no childnodes"

*/

foreach($nodeElmt as $nodeElmt)
{
if($nodeElmt->hasChildNodes())
{
echo "This node has childnodes";
}
else
{
echo "This node has no childnodes";
}
}

  ?>

- - - - - - - - - - - - - -

Output:

This node has childnodes

- - - - - - - - - - - - - -


参照しているノードの前に新しい子を追加する

  • ≪ DOMNode::hasChildNodes
  • DOMNode::isDefaultNamespace ≫
  • PHP Manual
  • DOMNode
  • 参照しているノードの前に新しい子を追加する

DOMNode::insertBefore

(PHP 5, PHP 7, PHP 8)

DOMNode::insertBefore — 参照しているノードの前に新しい子を追加する

説明

public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false

この関数は、参照しているノードの直前に新しいノードを挿入します。 追加するノードに対して変更を加えたい場合は、この関数から返される ノードを使用します。

既存のノードを使う場合、そのノードは移動します。

パラメータ

node

新しいノード。

child

参照ノード。指定されなかった場合は、node が子要素として追加されます。

戻り値

挿入されたノードを返します。 エラーの場合は false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

このノードが読み込み専用であったり、挿入されるノードの以前の親が 読み込み専用であった場合に発生します。

DOM_HIERARCHY_REQUEST_ERR

node で指定した型の子ノードを 保持することが許可されていない場合、あるいは追加しようとしている ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

node が、このノードとは別の ドキュメントで作成されたものである場合に発生します。

DOM_NOT_FOUND_ERR

child がこのノードの子ではない場合に 発生します。

参考

  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する

User Contributed Notes

jarry1250 at gmail dot com 30-May-2015 01:59
Note that supplying the same node for $newnode and $refnode leads to an E_WARNING ("Couldn't add newnode as the previous sibling of refnode"). For example imagine one wanted to make $newnode the first child of its parent by doing:

<?php
$firstSibling = $newnode->parentNode->firstChild;
// Bad:
$newnode->parentNode->insertBefore( $newnode, $firstSibling );
?>

This would generate a warning if it already was the first child of its parent, since $newnode and $firstSibling are identical. Easy to work around though:

<?php
$firstSibling = $newnode->parentNode->firstChild;
// Better:
if( $newnode !== $firstSibling ) {
    $newnode->parentNode->insertBefore( $newnode, $firstSibling );
}
?>
DrTebi at Yahoo 03-Oct-2007 05:54
Sorry, my previous posting worked only for the top node. Here the corrected version, which will work for any node:

XML
----
<?xml version="1.0"?>
<contacts>
  <person>Adam</person>
  <person>Eva</person>
  <person>Thomas</person>
</contacts>

PHP
---
<?php
// load XML, create XPath object
$xml = new DomDocument();
$xml->preserveWhitespace = false;
$xml->load('contacts.xml');
$xpath = new DOMXPath($xml);

// get node eva, which we will append to
$eva = $xpath->query('/contacts/person[.="Eva"]')->item(0);

// create node john
$john = $xml->createElement('person', 'John');

// insert john after eva
//   "in eva's parent node (=contacts) insert
//   john before eva's next node"
// this also works if eva would be the last node
$eva->parentNode->insertBefore($john, $eva->nextSibling);

// show result
header('Content-Type: text/plain');
print $xml->saveXML();
?>

Result
------
<?xml version="1.0"?>
<contacts>
  <person>Adam</person>
  <person>Eva</person><person>John</person>
  <person>Thomas</person>
</contacts>
justin at redwiredesign dot com 07-Feb-2007 08:20
The previous example is incorrect, and causes a DOM_NOT_FOUND error, as the child nodes are not direct descendants of the root node.

Therefore, the line:

$parent_path = "/root";

needs to change to:

$parent_path = "/root/parent";

or

$parent_path = "//parent";

for this example to work
jg at handcode dot de 18-Aug-2005 12:18
example to insert <newnode/> between <chid1/> and <child2/>

<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
  <parent>
    <child nr="1"/>
    <child nr="2"/>
  </parent>
</root>

<?php

$xml_src = 'test.xml';

// XPath-Querys
$parent_path = "//parent";
$next_path = "//parent/child[@nr='2']";

// Create a new DOM document
$dom = new DomDocument();
$dom->load($xml_src);

// Find the parent node
$xpath = new DomXPath($dom);

// Find parent node
$parent = $xpath->query($parent_path);

// new node will be inserted before this node
$next = $xpath->query($next_path);

// Create the new element
$element = $dom->createElement('newnode');

// Insert the new element
$parent->item(0)->insertBefore($element, $next->item(0));

echo $dom->saveXML();

?>
Jerry Ellis 03-Jun-2005 12:45
1st argument) a node to insert
2nd argument) a reference node - this is the node that the new node will be inserted before

The trick to using this method is that the OBJECT on which you actually CALL the insertBefore() method is actually the PARENT node of the reference node!

INCORRECT:
$DOMNode_refNode->insertBefore($DOMNode_newNode, $DOMNode_refNode);

CORRECT:
$DOMNode_refNode->parentNode->insertBefore($DOMNode_newNode, $DOMNode_refNode);


指定した namespaceURI がデフォルトの名前空間かどうかを調べる

  • ≪ DOMNode::insertBefore
  • DOMNode::isEqualNode ≫
  • PHP Manual
  • DOMNode
  • 指定した namespaceURI がデフォルトの名前空間かどうかを調べる

DOMNode::isDefaultNamespace

(PHP 5, PHP 7, PHP 8)

DOMNode::isDefaultNamespace — 指定した namespaceURI がデフォルトの名前空間かどうかを調べる

説明

public DOMNode::isDefaultNamespace(string $namespace): bool

namespace がデフォルトの名前空間であるかどうかを調べます。

パラメータ

namespace

調べる名前空間 URI。

戻り値

namespace がデフォルトの名前空間である場合に true、それ以外の場合に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


ノードが等しいかを調べる

  • ≪ DOMNode::isDefaultNamespace
  • DOMNode::isSameNode ≫
  • PHP Manual
  • DOMNode
  • ノードが等しいかを調べる

DOMNode::isEqualNode

(PHP 8 >= 8.3.0)

DOMNode::isEqualNode — ノードが等しいかを調べる

説明

public DOMNode::isEqualNode(?DOMNode $otherNode): bool

ノードが等しいかを調べます。

パラメータ

otherNode

ノード

戻り値

双方のノードが等しい場合 true を返します。 そうでない場合、false を返します。

例

例1 DOMNode::isEqualNode() の例

<?php

$dom1 = (new DOMDocument())->createElement('h1', 'Hello World!');
$dom2 = (new DOMDocument())->createElement('h1', 'Hello World!');

var_dump($dom1->isEqualNode($dom2));
?>

上の例の出力は以下となります。

bool(true)

User Contributed Notes

There are no user contributed notes for this page.


2 つのノードが等しいかどうかを調べる

  • ≪ DOMNode::isEqualNode
  • DOMNode::isSupported ≫
  • PHP Manual
  • DOMNode
  • 2 つのノードが等しいかどうかを調べる

DOMNode::isSameNode

(PHP 5, PHP 7, PHP 8)

DOMNode::isSameNode — 2 つのノードが等しいかどうかを調べる

説明

public DOMNode::isSameNode(DOMNode $otherNode): bool

この関数は、2 つのノードが等しいかどうかを調べます。この比較は、 その内容に基づくものではありません。

パラメータ

otherNode

比較対象となるノード。

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


指定したバージョンで機能がサポートされているかどうかを調べる

  • ≪ DOMNode::isSameNode
  • DOMNode::lookupNamespaceURI ≫
  • PHP Manual
  • DOMNode
  • 指定したバージョンで機能がサポートされているかどうかを調べる

DOMNode::isSupported

(PHP 5, PHP 7, PHP 8)

DOMNode::isSupported — 指定したバージョンで機能がサポートされているかどうかを調べる

説明

public DOMNode::isSupported(string $feature, string $version): bool

指定したバージョン version で、機能 feature がサポートされているかどうかを調べます。

パラメータ

feature

調べる機能。機能の一覧については DOMImplementation::hasFeature() の例を参照ください。

version

調べる機能 feature のバージョン番号。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • DOMImplementation::hasFeature() - DOM 実装が、指定した機能を実装しているかどうかを調べる

User Contributed Notes

There are no user contributed notes for this page.


プレフィックスに基づいて、ノードの名前空間 URI を取得する

  • ≪ DOMNode::isSupported
  • DOMNode::lookupPrefix ≫
  • PHP Manual
  • DOMNode
  • プレフィックスに基づいて、ノードの名前空間 URI を取得する

DOMNode::lookupNamespaceURI

(PHP 5, PHP 7, PHP 8)

DOMNode::lookupNamespaceURI — プレフィックスに基づいて、ノードの名前空間 URI を取得する

説明

public DOMNode::lookupNamespaceURI(?string $prefix): ?string

prefix に基づいて、 ノードの名前空間 URI を取得します。

パラメータ

prefix

探す名前空間のプレフィックス。 null を指定した場合、デフォルトの名前空間URIを返します。 但し、存在する場合に限ります。

戻り値

関連する名前空間 URI を返します。 見つからなかった場合は null を返します。

参考

  • DOMNode::lookupPrefix() - 名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する

User Contributed Notes

_ michael 30-Apr-2010 02:22
You have to pass *null* to lookupNamespaceURI if you want to read the default namespace. Passing an empty string doesn't work - even though the documentation says that lookupNamespaceURI takes a string as argument (and null would just be converted to an empty string).
lewar 05-Jun-2007 05:20
Simple way to get the URI of the default namespace:

<?php
    $document = new DOMDocument();
    $document->load($xml_file);
    $uri = $document->documentElement->lookupnamespaceURI(NULL);
?>


名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する

  • ≪ DOMNode::lookupNamespaceURI
  • DOMNode::normalize ≫
  • PHP Manual
  • DOMNode
  • 名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する

DOMNode::lookupPrefix

(PHP 5, PHP 7, PHP 8)

DOMNode::lookupPrefix — 名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する

説明

public DOMNode::lookupPrefix(string $namespace): ?string

名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得します。

パラメータ

namespace

名前空間 URI。

戻り値

名前空間のプレフィックスを返します。 エラーの場合は null を返します。

参考

  • DOMNode::lookupNamespaceUri() - プレフィックスに基づいて、ノードの名前空間 URI を取得する

User Contributed Notes

There are no user contributed notes for this page.


ノードを正規化する

  • ≪ DOMNode::lookupPrefix
  • DOMNode::removeChild ≫
  • PHP Manual
  • DOMNode
  • ノードを正規化する

DOMNode::normalize

(PHP 5, PHP 7, PHP 8)

DOMNode::normalize — ノードを正規化する

説明

public DOMNode::normalize(): void

空のテキストノードを削除し、このノードに隣接するテキストノードとそのすべての子をマージします。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

参考

  • » The DOM Specification
  • DOMDocument::normalizeDocument() - ドキュメントを正規化する

User Contributed Notes

Amir Laher 22-Aug-2005 04:45
This is a quote from the DOM level 2 spec, explaining the normalize() function.
----
normalize
Puts all Text nodes in the full depth of the sub-tree underneath this Node, including attribute nodes, into a "normal" form where only structure (e.g., elements, comments, processing instructions, CDATA sections, and entity references) separates Text nodes, i.e., there are neither adjacent Text nodes nor empty Text nodes. This can be used to ensure that the DOM view of a document is the same as if it were saved and re-loaded, and is useful when operations (such as XPointer [XPointer] lookups) that depend on a particular document tree structure are to be used.
----
(source: http://www.w3.org/TR/DOM-Level-2-Core/core.html)

i.e. the idea of normalize is to make text nodes the same as they would be if the xml document was re-loaded into DOM. It's handy if you want to compare DOM nodes.


子要素群から子要素を削除する

  • ≪ DOMNode::normalize
  • DOMNode::replaceChild ≫
  • PHP Manual
  • DOMNode
  • 子要素群から子要素を削除する

DOMNode::removeChild

(PHP 5, PHP 7, PHP 8)

DOMNode::removeChild — 子要素群から子要素を削除する

説明

public DOMNode::removeChild(DOMNode $child): DOMNode|false

この関数は、子要素群から子要素を削除します。

パラメータ

child

削除する子要素。

戻り値

子要素の削除に成功した場合に、削除した要素を返します。 エラーの場合は false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用の場合に発生します。

DOM_NOT_FOUND_ERR

child がこのノードの子要素でない場合に発生します。

例

以下の例は、XML ドキュメントから chapter 要素を削除します。

例1 子要素の削除

<?php

$doc = new DOMDocument;
$doc->load('book.xml');

$book = $doc->documentElement;

// chapter を取得し、それを book から削除します
$chapter = $book->getElementsByTagName('chapter')->item(0);
$oldchapter = $book->removeChild($chapter);

echo $doc->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
          "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<book id="listing">
 <title>My lists</title>

</book>

参考

  • DOMChildNode::remove() - ノードを削除する
  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMNode::replaceChild() - 子を置き換える

User Contributed Notes

nggit@phpindonesia 01-Feb-2019 02:29
You can use foreach to remove multiple elements from a DOMNodeList, only if you use a temporary array or via XPath query.
If not, the simplest way will be:

<?php

while ($element = $nodeList->item(0)) {
    $element->parentNode->removeChild($element);
}

?>
Kenney 28-Mar-2013 10:19
This method will remove all child nodes but leave the attributes (and namespace declarations) intact.

<?php
function removeChildren( &$node )
{
  $node->parentNode->replaceChild(
    $n = $node->cloneNode( false ),
    $node );

  $node = $n;
}
?>
drimsun at gmail dot com 11-Feb-2010 03:37
If you try to remove children of a nested node (e.g. a <ul> list that contains another <ul>) and only remove the first level of child nodes, you'll get a messed-up node object.

Upon re-use of the messed-up node you'll get an error message that says: "Fatal error: Call to a member function blahblah() on a non-object".

To remove ALL child nodes, use this recursive function instead:
<?php
/**
 * Helper function that removes all child nodes of $node recursively
 * (i.e. including child nodes of the child nodes and so forth).
 */
function remove_children(&$node) {
  while ($node->firstChild) {
    while ($node->firstChild->firstChild) {
      remove_children($node->firstChild);
    }
    $node->removeChild($node->firstChild);
  }
}
?>
Justin Carlson 05-Nov-2009 11:46
Just a note, if you remove a node the whitespace it occupied will remain if you save the file.

To avoid this, use $document->preserveWhiteSpace = false;

For Example:

<?php
$document = new DomDocument();
$document->preserveWhiteSpace = false;
?>
crazy888s at hotmail dot com 15-Apr-2009 01:50
You can't remove DOMNodes from a DOMNodeList as you're iterating over them in a foreach loop. For example...

<?php
$domNodeList = $domDocument->getElementsByTagname('p');
foreach ( $domNodeList as $domElement ) {
  //  ...do stuff with $domElement...
  $domElement->parentNode->removeChild($domElement);
}
?>

... will seemingly leave the internal iterator on the foreach out of wack and results will be quite strange. Though, making a queue of items to remove seems to work. For example...

<?php
$domNodeList = $domDocument->getElementsByTagname('p');
$domElemsToRemove = array();
foreach ( $domNodeList as $domElement ) {
  // ...do stuff with $domElement...
  $domElemsToRemove[] = $domElement;
}
foreach( $domElemsToRemove as $domElement ){
  $domElement->parentNode->removeChild($domElement);
}
?>
Justin Sheckler 30-Jan-2009 08:44
These two functions might be helpful to anyone trying to delete a node and all of its children:

<?php
function deleteNode($node) {
    deleteChildren($node);
    $parent = $node->parentNode;
    $oldnode = $parent->removeChild($node);
}

function deleteChildren($node) {
    while (isset($node->firstChild)) {
        deleteChildren($node->firstChild);
        $node->removeChild($node->firstChild);
    }
}
?>
tim cameron ryan 19-Jul-2008 01:00
Or something like:

<?php

while ($node->childNodes->length)
     $node->removeChild($node->firstChild);

?>
Michael D (DigitalGemstones.com) 05-Jul-2008 04:15
Note that iterating through the childNodes array and removing those children will stop the iteration.

For example:
<?php
foreach($node->childNodes as $child)
{
  if(iWantToDeleteThisNode($child))
     $child->parentNode->removeChild($child);
}
?>

Will not work.  Note that in removing the node, the childNodes array gets rebuilt (it seems) and so only the first item will be removed.  In order to properly remove all the children you want to remove, you will need to do something like the following:

<?php
$nodesToDelete = array();
foreach($node->childNodes as $child)
{
  if(iWantToDeleteThisNode($child))
    $nodesToDelete[] = $child;
}
foreach($nodesToDelete as $node)
{
  $node->parentNode->removeChild($node);
}
?>

I believe this is actually more efficient than the first snippet would be (if it worked) but obviously I cannot benchmark it.
Wala 04-Apr-2008 10:57
I used the following to delete an entire node using the child element:

<?php
$childElement->parentNode->parentNode-> removeChild($childElement->parentNode);
?>

I could not have thought of it without the help of everyone who contributed to this thread.

Thanks!

(I had to introduce the extra space between parentNode->removeChild to get rid of the wordwrap() warning while posting this note)
Vasil Rangelov 06-Oct-2007 10:14
At the time of writing, I suppose rightfully, removeChild() removes only the selected node, but when you remove an element, it's child elements are not removed. If you want to achieve that, replaceChild() is the solution.

The following should remove all descendants of the $node DOMNode, regardless of it's name:
<?php
$node->replaceChild(new DOMElement($node->nodeName), $node);
?>
If you're replacing the root element, you must explicitly state that with $node->documentElement as the second argument.
mytto at openxtrem dot com 07-Sep-2005 02:20
Back again on removing childs and iterators robustness.

Things get a bit more complicated when you only want to remove 'some' nodes according to a certain condition. Then you can't just remove the first one repeatedly.

The trick is to copy the content of the node list into a more robust collection than DOMNodeList, I name array!

The following piece of code will, for instance, remove all empty child nodes:

<?php
// Copy childNodes array
$childNodes = array();
foreach($node->childNodes as $childNode) {
  $childNodes[] = $childNode;
}

// Browse with the copy
foreach ($childNodes as $childNode) {
  if (!$childNode->hasChildNodes()); {
    $childNode->parentNode->removeChild($childNode);
  }
}
?>
blaine (at) blainegarrett (dot com) 23-Aug-2005 10:10
This might be obvious, but might help someone as well...

If you simply have a node that you need to remove (perhaps from an xpath) and don't know the parent node offhand (the examples seem to assume you have the parent in a variable), then you can do something easy like this...

$node->parentNode->removeChild($node);

parentNode is a scalar property of the Element.

Hope that helps.

--
Blaine Garrett
pedro at leb dot usp dot br 30-May-2005 04:24
You may also use the hasChild function:
<?php

while($node->hasChildNodes()) {
  $node->removeChild($node->childNodes->item(0));
}

?>

When you remove a childNode, the next node becomes the first one!
vsematika at centrum dot cz 13-Feb-2005 03:35
For those who don't understand >sbeam at onsetcorps dot net on 02-Feb-2005 12:07< 'hack', here's a little discussion:

First but *wrong* try would be:
<?php
foreach ($parent->childNodes as $child) {
   $parent->removeChild($child);
?>
This doesn't work because DOM tree id modified on-the-fly and this confuses foreach loop.

The idea behind sbeam's trick is that after removing the first item in the first iteration, the second item in childNodes nodelist immediately becomes the first item. That's why we must _always_ remove the first child. Here's another implementation:

<?php
$count = $parent->childNodes->length;
for ($i = 0; $i < $count; $i++) {
   $oldNode = $parent->removeChild($parent->childNodes->item(0)); // !!! not item($i) !!!
}
?>


子を置き換える

  • ≪ DOMNode::removeChild
  • DOMNodeList ≫
  • PHP Manual
  • DOMNode
  • 子を置き換える

DOMNode::replaceChild

(PHP 5, PHP 7, PHP 8)

DOMNode::replaceChild — 子を置き換える

説明

public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false

この関数は、子要素 child を新しいノードに 置き換えます。もし node がすでに子要素であった場合は、 それがふたたび追加されることはありません。置き換えに成功すると、 置き換え前のノードが返されます。

パラメータ

node

新しいノード。対象ドキュメントのメンバ、 すなわち、DOMDocument->createXXX() メソッドのひとつで作成されたものか DOMDocument::importNode で ドキュメントにインポートされたものである必要があります。

child

古いノード。

戻り値

古いノード、あるいはエラーが発生した場合は false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

このノードが読み込み専用であったり、挿入されるノードの以前の親が 読み込み専用であった場合に発生します。

DOM_HIERARCHY_REQUEST_ERR

node で指定した型の子ノードを 保持することが許可されていない場合、あるいは追加しようとしている ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

node が、このノードとは別の ドキュメントで作成されたものである場合に発生します。

DOM_NOT_FOUND_ERR

child がこのノードの子でない場合に発生します。

参考

  • DOMChildNode::replaceWith() - ノードを新しいノードで置き換える
  • DOMNode::appendChild() - 子要素群の最後に新しい子要素を追加する
  • DOMNode::removeChild() - 子要素群から子要素を削除する

User Contributed Notes

chealer at gmail dot com 15-Aug-2018 03:07
As of version 5.6, PHP still behaves as reported by jb at jbpros dot com. To use replaceChild() in a loop, the more standard pattern used in the following example can be used:

for ($currentNode = 0; $currentNode < $link->childNodes->length; $currentNode++) {
    $child = $link->childNodes[$currentNode];

    // "Remove" links, since links can't contain links
    if ($child instanceof DOMElement && $child->tagName == 'a') {
        $replacement = $dom->createTextNode($child->textContent);
        $link->replaceChild($replacement, $child);
    }
}
jb at jbpros dot com 01-Mar-2005 08:08
If you are trying to replace more than one node at once, you have to be careful about iterating over the DOMNodeList.  If the old node has a different name from the new node, it will be removed from the list once it has been replaced.  Use a regressive loop:

<?php

$xml = new DOMDocument;
$xml->load('docfile.xml');

$elements = $xml->getElementsByTagNameNS('http://www.example.com/NS/', '*');
$i = $elements->length - 1;
while ($i > -1) {
    $element = $elements->item($i);
    $ignore = false;

    $newelement = $xml>createTextNode('Some new node!');
    $element->parentNode->replaceChild($newelement, $element);
    $i--;
}

?>

The loop counter ($i) will always be in the list's interval as removed elements indexes are above the counter.
aidan at php dot net 26-Dec-2004 02:17
Here is a simple example for replacing a node:

Let's define our XML like so:

<?php
$xml = <<<XML
<?xml version="1.0"?>
<root>
  <parent>
     <child>bar</child>
     <child>foo</child>
  </parent>
</root>
XML;
?>

If we wanted to replace the entire <parent> node, we could do something like this:

<?php
// Create a new document fragment to hold the new <parent> node
$parent = new DomDocument;
$parent_node = $parent ->createElement('parent');

// Add some children
$parent_node->appendChild($parent->createElement('child', 'somevalue'));
$parent_node->appendChild($parent->createElement('child', 'anothervalue'));

// Add the keywordset into the new document
// The $parent variable now holds the new node as a document fragment
$parent->appendChild($parent_node);
?>

Next, we need to locate the old node:

<?php
// Load the XML
$dom = new DomDocument;
$dom->loadXML($xml);

// Locate the old parent node
$xpath = new DOMXpath($dom);
$nodelist = $xpath->query('/root/parent');
$oldnode = $nodelist->item(0);
?>

We then import and replace the new node:

<?php
// Load the $parent document fragment into the current document
$newnode = $dom->importNode($parent->documentElement, true);

// Replace
$oldnode->parentNode->replaceChild($newnode, $oldnode);

// Display
echo $dom->saveXML();
?>

Our new node is successfully imported:

<?xml version="1.0"?>
<root>
<parent><child>somevalue</child><child>anothervalue</child></parent>
</root>
franp at free dot fr 23-Sep-2004 08:39
1) If your XPath query returns a NodeList including a unique item, or if you know for sure the order of the items returned, you can use the "item(n)" syntax instead of the "foreach" syntax.
This can greatly improve you code lisibility.
s the method name implies, replaceChild cannot replace a node itself but a child of a node.
The trick is to use replaceChild on the parent node of your Xpath query result.

<?xml version="1.0" ?>
<action>
 <actionGlobal>
  <actionGlobalFR>sometext</actionGlobalFR>
 <actionGlobal>
</action>

$frag = $doc->createElement("actionGlobalFR");
$fragA = $doc->createTextNode("anothertext");
$frag->appendChild($fragA);

$xpResult = $xp->query("/action/actionGlobal/actionGlobalFR");
$blipblip = $xpResult->item(0)->parentNode->replaceChild($ajout, $xpResult->item(0));

2) Also, as the method name implies, replaceChild cannot replace a node itself but a child of a node.
Still it is possible to replace a node pointed by XPath istead of its child.
The trick is to use replaceChild on the parent node of your Xpath query result.

<?xml version="1.0" ?>
<action>
  <FR>French Text</FR>
</action>

<?php
$frag = $doc->createElement("EN");
$fragA = $doc->createTextNode("English Text");
$frag->appendChild($fragA);

$xpResult = $xp->query("/action/FR");
$blipblip = $xpResult->item(0)->parentNode->replaceChild($fragA, $xpResult->item(0));
?>

Et voil? !

This produces :
<?xml version="1.0" ?>
<action>
  <EN>English Text</EN>
</action>

....................................................

3) Also, be carefull, you CANNOT replace a node that doesn't exist.
While this may seems obvious, it is easy to forget.

Consider this :
<?xml version="1.0" ?>
<action>
  <EN></EN>
</action>

You cannot use replaceChild() to turn this into :
<?xml version="1.0" ?>
<action>
  <EN>Some text</EN>
</action>

The reason is that since the <EN></EN> element is empty, it has no child (this is clearer to understand if you consider that <EN></EN> can be written <EN />).
The fact that you intend to put some text inbetween <EN> and </EN> does not change the fact that it has no text yet, thus no child yet.
When dealing with DOM, do not take your dream for the reality. The DOM parser doen't care about your dreams. If an element is currently empty, it has no child, whatever you intend to fill in.

Thus, the solution to teh problem is to use appendChild intead of replaceChild :

<?php
$fragA = $doc->createTextNode("Some Text");
$xpResult = $xp->query("/action/EN");
$blipblip = $xpResult->item(0)->appendChild($fragA);
?>

This produces the awaited :
<?xml version="1.0" ?>
<action>
  <EN>Some Text</EN>
</action>

....................................................

4) Note that the description of replaceChild in the doc is wrong. Arguments have been inverted.
The correct description is :
object DOMNode->replaceChild (object newnode, object oldnode)


DOMNodeList クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMNodeList implements IteratorAggregate, Countable {
/* プロパティ */
public readonly int $length;
/* メソッド */
public count(): int
public getIterator(): Iterator
public item(int $index): DOMElement|DOMNode|DOMNameSpaceNode|null
}

プロパティ

length

リスト内のノードの数。有効な子ノードのインデックスの範囲は 0 以上 length - 1 以下

変更履歴

バージョン | 説明
8.0.0 | DOMNodeList は IteratorAggregate を実装しました。 これより前のバージョンでは、 Traversable を代わりに実装していました。
7.2.0 | Countable インターフェイスが実装され、 length の値を返すようになりました。

参考

  • » W3C での NodeList の仕様

目次

  • DOMNodeList::count — リストにあるノードの数を取得する
  • DOMNodeList::getIterator — 外部のイテレータを取得する
  • DOMNodelist::item — インデックスで指定したノードを取得する

User Contributed Notes

niko at yopmail dot com 03-Apr-2021 03:13
It's worth to mention that DOMNodeList is not an Array,  so you have to convert first to an array before to use for, foreach or array_map, array_filter, array_walk functions.

Use iterator_to_array to make the conversion ( since PHP 5.1.0 ) .

<code>
  /* @ suppress warning var_dump not yet implemented for class */

@array_walk( iterator_to_array( $Some_NodeList ), 'var_dump' ) );

foreach( iterator_to_array( $Some_NodeList ) as $node )
    @var_dump( $node );

</code>

Hope is usefull.
ignitedfirestarter at gmail dot com 04-Jul-2012 10:39
If you want to recurse over a DOM then this might help:
<?php

/**
 * PHP's DOM classes are recursive but don't provide an implementation of
 * RecursiveIterator. This class provides a RecursiveIterator for looping over DOMNodeList
 */
class DOMNodeRecursiveIterator extends ArrayIterator implements RecursiveIterator {

  public function __construct (DOMNodeList $node_list) {

    $nodes = array();
    foreach($node_list as $node) {
      $nodes[] = $node;
    }

    parent::__construct($nodes);

  }

  public function getRecursiveIterator(){
    return new RecursiveIteratorIterator($this, RecursiveIteratorIterator::SELF_FIRST);
  }

  public function hasChildren () {
    return $this->current()->hasChildNodes();
  }

  public function getChildren () {
    return new self($this->current()->childNodes);
  }

}
?>
geompse at gmail dot com 19-May-2010 08:39
Note that $length is calculated (php5.3.2).
Iterating over a large NodeList may be time expensive.

Prefer :
$nb = $nodelist->length;
for($pos=0; $pos<$nb; $pos++)

Than:
for($pos=0; $pos<$nodelist->length; $pos++)

I had a hard time figuring that out...
bobvandell at hotmail dot com 26-Aug-2008 09:12
That's actually incorrect. You can use function results as objects. It makes building an API for your database very clean and neat. For example:

Our code:

$articles = Node::screate('tags', 123456)->assets('like:title:test')->articles;

We use the above code to get articles that are linked to assets that are linked to a specific tag in our database.
c dot 1 at smithies dot org 23-May-2008 05:43
You can modify, and even delete, nodes from a DOMNodeList if you iterate backwards:

$els = $document->getElementsByTagName('input');
for ($i = $els->length; --$i >= 0; ) {
  $el = $els->item($i);
  switch ($el->getAttribute('name')) {
    case 'MAX_FILE_SIZE' :
      $el->parentNode->removeChild($el);
    break;
    case 'inputfile' :
      $el->setAttribute('type', 'text');
    //break;
  }
}
drichter at muvicom dot de 14-May-2008 06:11
Addition to my first note:

An traditional for-loop does not allow you to change the DOM-tree while looping - the effects are the nearly the same as with foreach. So you have to collect the nodes in an array and do the tree-altering stuff within a second loop (looping the array this time ...)
drichter at muvicom dot de 14-May-2008 04:56
I have done some testing and have found 2 results:
(My System: Win XP with PHP 5.2.1)

1) Iteration with foreach does function correctly as "james dot j dot hackett at gmail dot com" writes, _if_ you only do readonly stuff with foreach or minor writings of some attributes.

2) foreach does not function, if you are doing some DOM-Operations while iterating. In my situation it was adding the iterated $node as an child to an new node:

$newNode = $dom->createElement('newNode') ;
foreach ($nodeList as $node) {
  echo $node->nodeValue ;
  $newNode->appendChild($node) ;
}

This only gives you the first element ...

I'm interpreting it as an confusing but correct behavior because of the changes within the $dom-object while appending the node at an additional place ...

So, if you want to do something like 2) use for, length and item() :)
james dot j dot hackett at gmail dot com 08-May-2008 09:47
In Response to 'kassah at gmail'

You don't need to convert a DOMNodeList to an array in order iterate through it using 'foreach'.  You can use foreach directly with the DOMNodeList.

$nodeList = $someDomDocument->getElementsbytagname('user');

foreach ($nodeList as $node) {
    echo $node->nodeValue;
}
brack at wjp dot de 21-Apr-2008 02:35
In PHP 5.2.5 (Windows) it is not possible to iterate correctly over the DOMNodeList object returned by DOMNode->childNodes using foreach. Instead I had to use the for loop in conjunction with the item() method of DOMNodeList for iterating over all child nodes correctly.

I don't know whether this is really a bug, but apparently it is.


リストにあるノードの数を取得する

  • ≪ DOMNodeList
  • DOMNodeList::getIterator ≫
  • PHP Manual
  • DOMNodeList
  • リストにあるノードの数を取得する

DOMNodeList::count

(PHP 7 >= 7.2.0, PHP 8)

DOMNodeList::count — リストにあるノードの数を取得する

説明

public DOMNodeList::count(): int

リストにあるノードの数を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

リストにあるノードの数を返します。 これは length プロパティに等しくなります。

User Contributed Notes

plimpton47 at example dot com 04-May-2018 08:09
Be careful with using this function as it's not available for anything before PHP 7.2, use the length property instead


外部のイテレータを取得する

  • ≪ DOMNodeList::count
  • DOMNodelist::item ≫
  • PHP Manual
  • DOMNodeList
  • 外部のイテレータを取得する

DOMNodeList::getIterator

(PHP 8)

DOMNodeList::getIterator — 外部のイテレータを取得する

説明

public DOMNodeList::getIterator(): Iterator

ノードリスト向けの、外部イテレータを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

Iterator あるいは Traversable を実装したオブジェクトのインスタンスを返します。

エラー / 例外

失敗した場合は Exception をスローします。

参考

  • IteratorAggregate::getIterator() - 外部イテレータを取得する

User Contributed Notes

There are no user contributed notes for this page.


インデックスで指定したノードを取得する

  • ≪ DOMNodeList::getIterator
  • DOMNotation ≫
  • PHP Manual
  • DOMNodeList
  • インデックスで指定したノードを取得する

DOMNodelist::item

(PHP 5, PHP 7, PHP 8)

DOMNodelist::item — インデックスで指定したノードを取得する

説明

public DOMNodeList::item(int $index): DOMElement|DOMNode|DOMNameSpaceNode|null

DOMNodeList オブジェクトから、 index で指定したノードを取得します。

ヒント

コレクション内のノードの数を知るには、 DOMNodeList オブジェクトの length プロパティを使用します。

パラメータ

index

コレクション内のノードのインデックス。

戻り値

DOMNodeList 内の index 番目の位置にあるノード、あるいはインデックスが不正な形式の場合は null を返します。

例

例1 テーブル内のすべての要素を取得する

<?php

$doc = new DOMDocument;
$doc->load('book.xml');

$items = $doc->getElementsByTagName('entry');

for ($i = 0; $i < $items->length; $i++) {
echo $items->item($i)->nodeValue . "\n";
}

?>

別の方法として foreach を使用することも可能で、 こちらのほうがずっと使いやすいでしょう。

<?php

foreach ($items as $item) {
echo $item->nodeValue . "\n";
}

?>

上の例の出力は以下となります。

Title
Author
Language
ISBN
The Grapes of Wrath
John Steinbeck
en
0140186409
The Pearl
John Steinbeck
en
014017737X
Samarcande
Amine Maalouf
fr
2253051209

User Contributed Notes

jeffpuckett2 at gmail dot com 15-Jun-2016 02:55
DOMNodelist::item can return a DOMElement object, which extends DOMNode class. But it can also return a DOMText object.

<?php
$xml = '
<root>
  <node/>
  <node>
    <sub>more</sub>
  </node>
  <node>
    <sub>another</sub>
  </node>
  <node>value</node>
</root>
';

$doc = new DOMDocument();
$doc->loadXML($xml);

$items = $doc->documentElement->childNodes;
for ($i = 0; $i < $items->length; $i++)
  echo get_class($items->item($i)).PHP_EOL;
?>

Results in this output:

DOMText
DOMElement
DOMText
DOMElement
DOMText
DOMElement
DOMText
DOMElement
DOMText
Anonymous 25-Jun-2012 11:36
calling domnodelist->item($i) with an index $i greater than domnodelist->length - 1 , will return the entire document, will not produce an error, and will not circle back to the start of the list.
Nagy Attila 06-Jan-2011 09:02
DOMNodeList::item does not return in constant time!

If you need to iterate over large nodelist then you'd better use standard navigation.

Instead of:

<?php
foreach ($nodelist as $node) {
    // do something
}
?>

you could do:

<?php
$node = $parentnode->firstChild;

do {
    // do something
} while ($node = $node->nextSibling);
?>
olivier dot berger at it-sudparis dot eu 21-Aug-2008 02:56
It seems that with zend.ze1_compatibility_mode on, the only way to iterate over the items list is with :
for ($i = 0; $i < $nodeList->length; ++$i) {
    $nodeName = $nodeList->item($i)->nodeName;
    $nodeValue = $nodeList->item($i)->nodeValue;
}

As other attemps failed :

for ($i = 0; $i < $nodeList->length; ++$i) {
    $node = &$nodeList->item($i);
    $nodeName = $node->nodeName;
    $nodeValue = $node->nodeValue;
}

or :
foreach ($nodeList as $node) {
    echo $node->nodeName;
    echo $node->nodeValue;
}
vinyanov at poczta dot onet dot pl 05-Jan-2008 10:12
SimpleXML has its own SPL iterator. See http://www.php.net/~helly/php/ext/spl/classSimpleXMLIterator.html . But I guess that there are none for DOM nodes. By the way, two out of three implementations I found over the Net were not recursive, so I wrote my own. Here is the snippet:

<?php

class DOMNodeListIterator implements RecursiveIterator
{
    private
        $nodes,
        $offset;

    function __construct(DOMNodeList $nodes)
    {
        return $this -> nodes = $nodes;
    }

    function rewind()
    {
        return $this -> offset = 0;
    }

    function current()
    {
        return $this -> nodes -> item($this -> offset);
    }

    function key()
    {
        return $this -> current() -> nodeName;
    }

    function next()
    {
        return $this -> offset++;
    }

    function valid()
    {
        return $this -> offset < $this -> nodes -> length;
    }

    function hasChildren()
    {
        return isset($this -> current() -> childNodes -> length) && $this -> current() -> childNodes -> length > 0;
    }

    function getChildren()
    {
        return new self($this -> current() -> childNodes);
    }
}

?>

Remember to use RecursiveIteratorIterator::SELF_FIRST flag when you create your iterator iterator.

<?php

$iterator = new DOMNodeListIterator($document -> childNodes);
$iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);

?>

Should work, has just few minutes though. :)
Hayley Watson 29-Oct-2007 02:14
Keep in mind that DOMNodelists are "live" - changes to the document or node that the DOMNodelist was derived from will be reflected in the DOMNodelist. In other words, a list of a parent node's children will change if you change the parent's children!
james dot dunmore at gmai dot com 27-Jul-2007 08:57
tfg_allardyce at gmail dot com

I have had exactly this problem.

To rectify I've had to do this:
<?php
$old_element = $doc->getElementsByTagName('Element1')->item(0);
$new_element = $doc->createElement('NewElement1');

$old_element_childNodes = $old_element->childNodes;
$length = $old_element_childNodes->length;

for($i = 0; $i < $length; $i++)
{
    $oldChildren_array[] = $old_element_childNodes->item($i);
}

foreach($oldChildren_array as $old_c)
{
    $new_element->appendChild($old_c);
}
?>

Rather than this:
(which I will bug report)
<?php
$old_element = $doc->getElementsByTagName('Element1')->item(0):
$new_element = $doc->createElement('NewElement1');

foreach($old_element->childNode as $node)
{
     $new_element->appendChild($node);
}

?>

Using the latter, randomally removes the children!
Geoffrey Thubron 26-May-2007 02:47
@ tfg_allardyce at gmail dot com

You could loop through the list backwards, that way, you are only ever taking off the last item from the list, and hence wont have disrupted the order.
oliver dot christen at camptocamp dot com 13-Feb-2007 07:27
NodeList are something annoying because you can't output the content with a simple print_r, so I did a little function that add all the node to a new empty DOMDocument and output it as a string.
Have fun.

<?php

public function domNodeList_to_string($DomNodeList) {
    $output = '';
    $doc = new DOMDocument;
    while ( $node = $DomNodeList->item($i) ) {
        // import node
        $domNode = $doc->importNode($node, true);
        // append node
        $doc->appendChild($domNode);
        $i++;
    }
    $output = $doc->saveXML();
    $output = print_r($output, 1);
    // I added this because xml output and ajax do not like each others
    $output = htmlspecialchars($output);
    return $output;
}

?>


DOMNotation クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMNotation extends DOMNode {
/* プロパティ */
public readonly string $publicId;
public readonly string $systemId;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

publicId

systemId

User Contributed Notes

There are no user contributed notes for this page.


DOMParentNode インターフェイス

(PHP 8)

インターフェイス概要

interface DOMParentNode {
/* メソッド */
public append(DOMNode|string ...$nodes): void
public prepend(DOMNode|string ...$nodes): void
public replaceChildren(DOMNode|string ...$nodes): void
}

目次

  • DOMParentNode::append — 最後の子ノードの後ろにノードを追加する
  • DOMParentNode::prepend — 最初の子ノードの前にノードを追加する
  • DOMParentNode::replaceChildren — ノード中の子を置換する

User Contributed Notes

There are no user contributed notes for this page.


最後の子ノードの後ろにノードを追加する

  • ≪ DOMParentNode
  • DOMParentNode::prepend ≫
  • PHP Manual
  • DOMParentNode
  • 最後の子ノードの後ろにノードを追加する

DOMParentNode::append

(PHP 8)

DOMParentNode::append — 最後の子ノードの後ろにノードを追加する

説明

public DOMParentNode::append(DOMNode|string ...$nodes): void

ひとつ以上の nodes を、 最後の子ノードの後ろの、子ノードのリストに追加します。

パラメータ

nodes

追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

参考

  • DOMParentNode::prepend() - 最初の子ノードの前にノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


最初の子ノードの前にノードを追加する

  • ≪ DOMParentNode::append
  • DOMParentNode::replaceChildren ≫
  • PHP Manual
  • DOMParentNode
  • 最初の子ノードの前にノードを追加する

DOMParentNode::prepend

(PHP 8)

DOMParentNode::prepend — 最初の子ノードの前にノードを追加する

説明

public DOMParentNode::prepend(DOMNode|string ...$nodes): void

ひとつ以上の nodes を、 最初の子ノードの前の、 子ノードのリストに追加します。

パラメータ

nodes

ノードの前に追加するノード。 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

参考

  • DOMParentNode::append() - 最後の子ノードの後ろにノードを追加する

User Contributed Notes

There are no user contributed notes for this page.


ノード中の子を置換する

  • ≪ DOMParentNode::prepend
  • DOMProcessingInstruction ≫
  • PHP Manual
  • DOMParentNode
  • ノード中の子を置換する

DOMParentNode::replaceChildren

(PHP 8 >= 8.3.0)

DOMParentNode::replaceChildren — ノード中の子を置換する

説明

public DOMParentNode::replaceChildren(DOMNode|string ...$nodes): void

ノード中の子を置換します。

パラメータ

nodes

子を置き換えるノード 文字列は自動的にテキストノードに変換されます。

戻り値

値を返しません。

エラー / 例外

DOM_HIERARCHY_REQUEST_ERR

指定された nodes のうちの一つの子ノードの型を、 親ノードが許可していない場合や、ノードが自分自身やその祖先であった場合に発生します。

DOM_WRONG_DOCUMENT_ERR

指定された nodes のうちの一つが、 このノードを作成したドキュメントとは異なるものから作成された場合に発生します。

変更履歴

バージョン | 説明
8.3.0 | オーナーとなるドキュメントがないノードに対して、 このメソッドをコールしても動作するようになりました。 これより前のバージョンでは、エラーコード DOM_HIERARCHY_REQUEST_ERR を持つ DOMException がスローされていました。

例

例1 DOMParentNode::replaceChildren() の例

<?php

$dom = new DOMDocument();
$dom->loadHTML('<!DOCTYPE HTML><html><p>hi</p> test <p>hi2</p></html>');

$dom->documentElement->replaceChildren('foo', $dom->createElement('p'), 'bar');
echo $dom->saveXML();
?>

上の例の出力は以下となります。

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE HTML>
<html>foo<p/>bar</html>

User Contributed Notes

There are no user contributed notes for this page.


DOMProcessingInstruction クラス

(PHP 5, PHP 7, PHP 8)

クラス概要

class DOMProcessingInstruction extends DOMNode {
/* プロパティ */
public readonly string $target;
public string $data;
/* 継承したプロパティ */
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $name, string $value = "")
/* 継承したメソッド */
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

target

data

目次

  • DOMProcessingInstruction::__construct — 新しい DOMProcessingInstruction オブジェクトを作成する

User Contributed Notes

There are no user contributed notes for this page.


新しい DOMProcessingInstruction オブジェクトを作成する

  • ≪ DOMProcessingInstruction
  • DOMText ≫
  • PHP Manual
  • DOMProcessingInstruction
  • 新しい DOMProcessingInstruction オブジェクトを作成する

DOMProcessingInstruction::__construct

(PHP 5, PHP 7, PHP 8)

DOMProcessingInstruction::__construct — 新しい DOMProcessingInstruction オブジェクトを作成する

説明

public DOMProcessingInstruction::__construct(string $name, string $value = "")

新しい DOMProcessingInstruction オブジェクトを 作成します。このオブジェクトは読み込み専用です。このオブジェクトを ドキュメントに追加することは可能ですが、ノードをドキュメントに 関連付けるまではこのノードに別のノードを追加することはできません。 書き込み可能なノードを作成するには、 DOMDocument::createProcessingInstruction を使用してください。

パラメータ

name

処理命令のタグ名。

value

処理命令の値。

例

例1 新しい DOMProcessingInstruction を作成する

<?php

$dom = new DOMDocument('1.0', 'UTF-8');
$html = $dom->appendChild(new DOMElement('html'));
$body = $html->appendChild(new DOMElement('body'));
$pinode = new DOMProcessingInstruction('php', 'echo "Hello World"; ');
$body->appendChild($pinode);
echo $dom->saveXML();

?>

上の例の出力は以下となります。

<?xml version="1.0" encoding="UTF-8"?>
<html><body><?php echo "Hello World"; ?></body></html>

参考

  • DOMDocument::createProcessingInstruction() - 新しい PI ノードを作成する

User Contributed Notes

There are no user contributed notes for this page.


DOMText クラス

(PHP 5, PHP 7, PHP 8)

はじめに

DOMText クラスは DOMCharacterData を継承しており、 DOMElement あるいは DOMAttr の中身のテキストを表します。

クラス概要

class DOMText extends DOMCharacterData {
/* プロパティ */
public readonly string $wholeText;
/* 継承したプロパティ */
public string $data;
public readonly int $length;
public readonly ?DOMElement $previousElementSibling;
public readonly ?DOMElement $nextElementSibling;
public readonly string $nodeName;
public ?string $nodeValue;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
public string $textContent;
/* メソッド */
public __construct(string $data = "")
public isElementContentWhitespace(): bool
public isWhitespaceInElementContent(): bool
public splitText(int $offset): DOMText|false
/* 継承したメソッド */
public DOMCharacterData::after(DOMNode|string ...$nodes): void
public DOMCharacterData::appendData(string $data): true
public DOMCharacterData::before(DOMNode|string ...$nodes): void
public DOMCharacterData::deleteData(int $offset, int $count): bool
public DOMCharacterData::insertData(int $offset, string $data): bool
public DOMCharacterData::remove(): void
public DOMCharacterData::replaceData(int $offset, int $count, string $data): bool
public DOMCharacterData::replaceWith(DOMNode|string ...$nodes): void
public DOMCharacterData::substringData(int $offset, int $count): string|false
public DOMNode::appendChild(DOMNode $node): DOMNode|false
public DOMNode::C14N(
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): string|false
public DOMNode::C14NFile(
string $uri,
bool $exclusive = false,
bool $withComments = false,
?array $xpath = null,
?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $deep = false): DOMNode|false
public DOMNode::contains(DOMNode|DOMNameSpaceNode|null $other): bool
public DOMNode::getLineNo(): int
public DOMNode::getNodePath(): ?string
public DOMNode::getRootNode(?array $options = null): DOMNode
public DOMNode::hasAttributes(): bool
public DOMNode::hasChildNodes(): bool
public DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public DOMNode::isDefaultNamespace(string $namespace): bool
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $otherNode): bool
public DOMNode::isSupported(string $feature, string $version): bool
public DOMNode::lookupNamespaceURI(?string $prefix): ?string
public DOMNode::lookupPrefix(string $namespace): ?string
public DOMNode::normalize(): void
public DOMNode::removeChild(DOMNode $child): DOMNode|false
public DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
}

プロパティ

wholeText

論理的に隣接した (要素やコメント、処理命令などで分割されていない) テキストノードの全テキストを保持します。

変更履歴

バージョン | 説明
8.0.0 | 実装されていなかったメソッド DOMText::replaceWholeText() が削除されました。

目次

  • DOMText::__construct — 新しい DOMText オブジェクトを作成する
  • DOMText::isElementContentWhitespace — このテキストノードが、要素の内容にホワイトスペースが含まれているかを返す
  • DOMText::isWhitespaceInElementContent — このテキストノードが空白を含むかどうかを示す
  • DOMText::splitText — 指定したオフセットでノードを 2 つに分割する

User Contributed Notes

Trititaty 20-Oct-2016 11:47
Text replacement function for DOM.

<?php
function domTextReplace( $search, $replace, DOMNode &$domNode, $isRegEx = false ) {
  if ( $domNode->hasChildNodes() ) {
    $children = array();
    // since looping through a DOM being modified is a bad idea we prepare an array:
    foreach ( $domNode->childNodes as $child ) {
      $children[] = $child;
    }
    foreach ( $children as $child ) {
      if ( $child->nodeType === XML_TEXT_NODE ) {
        $oldText = $child->wholeText;
        if ( $isRegEx ) {
          $newText = preg_replace( $search, $replace, $oldText );
        } else {
          $newText = str_replace( $search, $replace, $oldText );
        }
        $newTextNode = $domNode->ownerDocument->createTextNode( $newText );
        $domNode->replaceChild( $newTextNode, $child );
      } else {
        domTextReplace( $search, $replace, $child, $isRegEx );
      }
    }
  }
}


新しい DOMText オブジェクトを作成する

  • ≪ DOMText
  • DOMText::isElementContentWhitespace ≫
  • PHP Manual
  • DOMText
  • 新しい DOMText オブジェクトを作成する

DOMText::__construct

(PHP 5, PHP 7, PHP 8)

DOMText::__construct — 新しい DOMText オブジェクトを作成する

説明

public DOMText::__construct(string $data = "")

新しい DOMText オブジェクトを作成します。

パラメータ

data

text ノードの値。指定しなかった場合は空の text ノードが作成されます。

例

例1 新しい DOMText を作成する

<?php

$dom = new DOMDocument('1.0', 'iso-8859-1');
$element = $dom->appendChild(new DOMElement('root'));
$text = $element->appendChild(new DOMText('root value'));
echo $dom->saveXML(); /* <?xml version="1.0" encoding="iso-8859-1"?><root>root value</root> */

?>

参考

  • DOMDocument::createTextNode() - 新しいテキストノードを作成する

User Contributed Notes

Thomas 27-Apr-2012 01:54
I experinced that DOMText, given a integer as only value to the constructor failed to return valid data. I had to typecast the input to a string first:

$intValue = 3252; // Post/Zip-code
$some_element->appendChild( new DOMText( (string) $intValue) );

When not typecasting using "(string)" the XML output from $root->saveXML() would not validate.


このテキストノードが、要素の内容にホワイトスペースが含まれているかを返す

  • ≪ DOMText::__construct
  • DOMText::isWhitespaceInElementContent ≫
  • PHP Manual
  • DOMText
  • このテキストノードが、要素の内容にホワイトスペースが含まれているかを返す

DOMText::isElementContentWhitespace

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

DOMText::isElementContentWhitespace — このテキストノードが、要素の内容にホワイトスペースが含まれているかを返す

説明

public DOMText::isElementContentWhitespace(): bool

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

riking 28-Jun-2018 12:17
This is the recommended (W3C) function name for the equivalent:
http://php.net/manual/en/domtext.iswhitespaceinelementcontent.php

See there for additional notes.


このテキストノードが空白を含むかどうかを示す

  • ≪ DOMText::isElementContentWhitespace
  • DOMText::splitText ≫
  • PHP Manual
  • DOMText
  • このテキストノードが空白を含むかどうかを示す

DOMText::isWhitespaceInElementContent

(PHP 5, PHP 7, PHP 8)

DOMText::isWhitespaceInElementContent — このテキストノードが空白を含むかどうかを示す

説明

public DOMText::isWhitespaceInElementContent(): bool

このテキストノードが空白のみを含む（あるいは空である）かどうかを示します。 このテキストノードが要素の内容に空白を含むかどうかは、 ドキュメントの読み込み時に決定されます。

パラメータ

この関数にはパラメータはありません。

戻り値

ノードにゼロ個以上の空白文字だけが含まれる場合に true、 それ以外の場合に false を返します。

User Contributed Notes

JITR 07-Jul-2007 03:36
To add to `permidion at yahoo dot com''s comment:

Quite true. According to DOM Level 3 Core, the `isWhitespaceInElementContent()' method indicates, whether the node contains `whitespace in element content' (or `element content whitespace' according to the newer spec), see [1].

Btw, it seems the `isWhitespaceInElementContent()' method was replaced with the `isElementContentWhitespace' attribute in the current W3C recommendation, see [2].

I have the feeling, though, it would be more precise with the word `only' added, like: `... indicates, whether the node contains *only* element content whitespace.' This would better correspond with the fact the result is false, when there are any non-whitespace characters present (in addition to the whitespace ones), as already noted.

[1] (please concatenate the following two lines)
http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html
#core-Text3-isWhitespaceInElementContent
[2] (please concatenate the following two lines)
http://www.w3.org/TR/DOM-Level-3-Core/core.html
#Text3-isElementContentWhitespace
permidion at yahoo dot com 28-Oct-2004 08:30
if you have an xml element such as <name>Foo Bar</name> (note the space), isWhitespaceInElementContent will return false.
However it will return true for <name><name> or <name/>
so, that function can be used to determine if the element has a text content or not


指定したオフセットでノードを 2 つに分割する

  • ≪ DOMText::isWhitespaceInElementContent
  • DOMXPath ≫
  • PHP Manual
  • DOMText
  • 指定したオフセットでノードを 2 つに分割する

DOMText::splitText

(PHP 5, PHP 7, PHP 8)

DOMText::splitText — 指定したオフセットでノードを 2 つに分割する

説明

public DOMText::splitText(int $offset): DOMText|false

指定したオフセット offset でノードを 2 つに分割します。分割したノードのツリー内での位置関係は、兄弟となります。

分割した後は、このノードは offset 位置までの 内容を保持するようになります。元のノードが親ノードを保持している場合、 新しいノードは元のノードの兄弟として元のノードの次の位置に挿入されます。 offset がこのノードの長さに等しい場合は、 新しいノードにはデータが含まれません。

パラメータ

offset

分割する位置を示すオフセット。0 から始まります。

戻り値

同じ型の新しいノードを返します。offset 以降の内容をデータとして保持します。

User Contributed Notes

Flix Cloutier 28-Oct-2013 05:31
It should be noted that $offset is a **character offset**, not a **byte offset**. This means that most other PHP string functions that deal with lengths and offsets (strlen, strpos, preg_match with PREG_OFFSET_CAPTURE, etc.) use and return values unsuitable for this method if used with multibyte strings (like UTF-8 strings).

Byte offsets can be converted to character offsets with mb_strlen:

<?php
function char_offset($string, $byte_offset, $encoding = null)
{
    $substr = substr($string, 0, $byte_offset);
    return mb_strlen($substr, $encoding ?: mb_internal_encoding());
}
?>


DOMXPath クラス

(PHP 5, PHP 7, PHP 8)

はじめに

XPath 1.0 をサポートします。

クラス概要

class DOMXPath {
/* プロパティ */
public readonly DOMDocument $document;
public bool $registerNodeNamespaces;
/* メソッド */
public __construct(DOMDocument $document, bool $registerNodeNS = true)
public evaluate(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed
public query(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed
public registerNamespace(string $prefix, string $namespace): bool
public registerPhpFunctions(string|array|null $restrict = null): void
}

プロパティ

document

registerNodeNamespaces

true に設定すると、ノードの名前空間が登録されます。

変更履歴

バージョン | 説明
8.0.0 | プロパティ registerNodeNamespaces が追加されました。

目次

  • DOMXPath::__construct — 新しい DOMXPath オブジェクトを作成する
  • DOMXPath::evaluate — 与えられた XPath 式を評価し、可能であれば結果を返す
  • DOMXPath::query — 与えられた XPath 式を評価する
  • DOMXPath::registerNamespace — DOMXPath オブジェクトの名前空間を登録する
  • DOMXPath::registerPhpFunctions — PHP の関数を XPath 関数として登録する

User Contributed Notes

TechNyquist 08-Jan-2020 09:16
When working with XML (as a strict format) might be very important to give a namespace to XPath object in order to make it work properly.

I was experiencing "query" always returning empty node lists, it could not find anything. Only a broad "//*" was able to show off only the root element.

Then found out that registering the namespace reported in the "xmlns" attribute of the root element in the XPath object, and writing the namespace near the elements name, made it work properly.

So for an XML like this (from a sitemap):

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://example.com/index.php</loc>
        <lastmod>2005-01-01</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.5</priority>
    </url>
</urlset>

I needed the following XPath configuration:

<?php

    $doc = new DOMDocument;
    $doc->load("sitemap.xml");
    $xpath = new DOMXPath($doc);
    $xpath->registerNamespace('ns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
    $nodes = $xpath->query('//ns:urlset/ns:url');

?>

Then again, that "xmlns" could be provided dynamically from the root element attribute of course.
peter at softcoded dot com 03-May-2017 05:51
You may not always know at runtime whether your file has
a namespace or not. This can make it difficult to create
XPath queries. Use the seriously underdocumented
"namespaceURI" property of the documentElement of a
DOMDocument to determine if there is a namespace.
Use code such as the following:

$doc = new DOMDocument();
$doc->load($file);
$xpath = new DOMXPath($doc);
$ns = $doc->documentElement->namespaceURI;
if($ns) {
  $xpath->registerNamespace("ns", $ns);
  $nodes = $xpath->query("//ns:em[@class='glossterm']");
} else {
  $nodes = $xpath->query("//em[@class='glossterm']");
}
//look at nodes here
peter at softcoded dot com 03-May-2017 04:46
Using XPath expressions can save a lot of programming
and allow you to home in on only the nodes you want.
Suppose you want to delete all empty <p> tags.
If you create a query using the following XPath expression,
you can find <p> tags that do not have any text
(other than spaces), any attributes,
any children or comments:

$expression = "//p[not(@*)
   and not(*)
   and not(./comment())
   and normalize-space(text())='']";

This expression will only find para tags that look like:

<p>[any number of spaces]</p>
<p></p>

Imagine the code you would have to add if you used
DOMDocument::getElementsByTagName("p") instead.
archimedix32783262 at mailinator dot com 03-Sep-2014 12:03
Note that evaluate() will use the same encoding as the XML document.

So if you have a UTF-16 XML, you will have to query using UTF-16 strings.

You can use iconv() to convert from your code's encoding to the target encoding for better legibility.
dhz 05-Jan-2011 10:47
I just spent far too much time chasing this one....

When running an xpath query on a table be careful about table internal nodes (ie: <tr></tr>, and <td></td>).  If the master <table> tag is missing, then query() (and likely evaluate() also) will return unexpected results.

I had a DOMNode with a structure like this:

<td>
    <table></table>
    <table>
        <tr>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
        </tr>
    </table>
</td>

Upon which I was trying to do a relative query (ie: <?php $xpath_obj->query('my/x/path', $relative_node); ?>).

But because of the lone outer <td></td> tags, the inner tags were being invalidated, while the nodes were still recognized.  Meaning that the following query would work:

<?php $xpath_obj->query('*[2]/*[*[2]]', $relative_node); ?>

But when replacing any of the "*" tokens with the corresponding (and valid) "table", "tr", or "td" tokens the query would inexplicably break.
Mark Omohundro, ajamyajax dot com 14-Dec-2008 09:15
<?php
// to retrieve selected html data, try these DomXPath examples:

$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);

$xpath = new DOMXpath($doc);

// example 1: for everything with an id
//$elements = $xpath->query("//*[@id]");

// example 2: for node data in a selected id
//$elements = $xpath->query("/html/body/div[@id='yourTagIdHere']");

// example 3: same as above with wildcard
$elements = $xpath->query("*/div[@id='yourTagIdHere']");

if (!is_null($elements)) {
  foreach ($elements as $element) {
    echo "<br/>[". $element->nodeName. "]";

    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "\n";
    }
  }
}
?>


新しい DOMXPath オブジェクトを作成する

  • ≪ DOMXPath
  • DOMXPath::evaluate ≫
  • PHP Manual
  • DOMXPath
  • 新しい DOMXPath オブジェクトを作成する

DOMXPath::__construct

(PHP 5, PHP 7, PHP 8)

DOMXPath::__construct — 新しい DOMXPath オブジェクトを作成する

説明

public DOMXPath::__construct(DOMDocument $document, bool $registerNodeNS = true)

新しい DOMXPath オブジェクトを作成します。

パラメータ

document

DOMXPath に関連付けられた DOMDocument。

registerNodeNS

コンテキストノードのスコープ内の名前空間を、DOMXPath オブジェクトに自動登録するかどうか。 このオプションを使うと、スコープ内の名前空間ごとに、手動で DOMXPath::registerNamespace() をコールする必要がなくなります。 名前空間のプレフィックスが衝突した場合は、直近の子孫の名前空間プレフィックスのみが登録されます。

User Contributed Notes

thsoft at vipmail dot hu 04-Jul-2007 04:57
As of PHP 5.2.0, DOMXPath object implements XPath 1.0.
Saulo Vallory 26-Jun-2007 03:23
The DOMXPath object doesn't create a reference to the document. If you load a new xml using either load, loadXML or loadHTML functions the DOMXPath object will still query and evaluate over the source in the DOMDocument when it was created.


与えられた XPath 式を評価し、可能であれば結果を返す

  • ≪ DOMXPath::__construct
  • DOMXPath::query ≫
  • PHP Manual
  • DOMXPath
  • 与えられた XPath 式を評価し、可能であれば結果を返す

DOMXPath::evaluate

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

DOMXPath::evaluate — 与えられた XPath 式を評価し、可能であれば結果を返す

説明

public DOMXPath::evaluate(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed

与えられた XPath 式 expression を実行し、 可能であれば型付けされた結果を返します。

パラメータ

expression

実行する XPath 式。

contextNode

相対 XPath クエリを実行する場合に、オプションで基準ノードを指定することが可能です。 デフォルトでは、クエリは root 要素に対する相対パスとなります。

registerNodeNS

コンテキストノードのスコープ内の名前空間を、DOMXPath オブジェクトに自動登録するかどうか。 このオプションを使うと、スコープ内の名前空間ごとに、手動で DOMXPath::registerNamespace() をコールする必要がなくなります。 名前空間のプレフィックスが衝突した場合は、直近の子孫の名前空間プレフィックスのみが登録されます。

戻り値

可能であれば型付けされた結果、あるいは指定された XPath 式 expression にマッチするすべてのノードを含む DOMNodeList を返します。

expression が不正な形式な場合や contextNode が無効な場合は、 DOMXPath::evaluate() は false を返します。

例

例1 英語の書籍の数を取得する

<?php

$doc = new DOMDocument;

$doc->load('book.xml');

$xpath = new DOMXPath($doc);

$tbody = $doc->getElementsByTagName('tbody')->item(0);

// tbody ノードを基準とした相対クエリとなります
$query = 'count(row/entry[. = "en"])';

$entries = $xpath->evaluate($query, $tbody);
echo "There are $entries english books\n";

?>

上の例の出力は以下となります。

There are 2 english books

参考

  • DOMXPath::query() - 与えられた XPath 式を評価する

User Contributed Notes

danny at webdevelopers dot eu 28-Jan-2020 11:36
The only way how to distinguish FALSE returned value from syntax error FALSE is to re-run the XPath expression wrapped in string() function. If must return empty string. If it returns FALSE again then it is an error.

<?php

        $ret=$this->xp->evaluate($eval, $context);

        // Error detection: DOMXPath::evaluate() returns FALSE on error
        // so does DOMXPath::evaluate("boolean(/nothing)")
        // @workaround webdevelopers.eu
        if ($ret === false && $this->xp->evaluate("string($eval)", $context) === false) {
            throw new Exception("Invalid XPath expression ".json_encode($eval), 3491);
        }
?>
aazaharov81 at gmail dot com 14-Jan-2015 12:48
To query DOMNodes by their HTML classes, use such snippet
<?php

// CssClassXPathSelector
function ccxs($class) {
    return '[contains(concat(" ", normalize-space(@class), " "), " ' . $class . ' ")]';
}

 // then just
 $domitems = $this->xpath("//*[@id='searchResultsRows']//a" . ccxs('listing_row'));
?>
daniel at danielnorton dot com 25-Jun-2011 09:56
Note that this method does not provide any means to distinguish between a successful result that returns FALSE and an error.

For example, this will succeed and return FALSE:

<?php $xpath->evaluate("1 = 0"); ?>

One workaround when you know you are expecting a Boolean is to wrap the result with string(). e.g.

<?php $xpath->evaluate("string(1 = 0)"); ?>

This will return a string "false" on success, or the Boolean FALSE on error.
Damien Bezborodov 28-Mar-2011 06:13
If your expression returns a node set, you will get a DOMNodeList instead of a typed result. Instead, try modifying your expression from "//node[1]" to "string(//node[1])".
yuriucsal at NOSPAM dot yahoo dot com dot br 06-Mar-2005 12:55
this class can substitute the method evaluate while it is not validated. Made for Yuri Bastos and Jo?o Gilberto Magalh?es.

<?php

    class XPtahQuery
    {
        // function returns a DOMNodeList from a relative xPath
        public static function selectNodes($pNode, $xPath)
        {

            $pos = strpos(self::getFullXpath($pNode),"/",1);
            $xPathQuery = substr(self::getFullXpath($pNode),$pos);//to paste  /#document[1]/
            $xPathQueryFull = $xPathQuery. $xPath;
            $domXPath = new DOMXPath($pNode->ownerDocument);
            $rNodeList = $domXPath->query($xPathQueryFull);

                return $rNodeList;
        }
        // function returns a DOMNode from a xPath from other DOMNode
        public static function selectSingleNode($pNode, $xPath)
        {

            $pos = strpos(self::getFullXpath($pNode),"/",1);
            $xPathQuery = substr(self::getFullXpath($pNode),$pos);//to paste  /#document[1]/
            $xPathQueryFull = $xPathQuery. $xPath;
            $domXPath = new DOMXPath($pNode->ownerDocument);
            $rNode = $domXPath->query($xPathQueryFull)->item(0);

                return $rNode;
        }
        //utilitaries functions off selectSingleNode
        private function getNodePos($pNode, $nodeName)
        {
            if($pNode == null)
                {
                        return 0;
            }
            else
            {
                $var = 0;
                    if ($pNode->previousSibling != null)
                    {
                    if ($pNode->previousSibling->nodeName == $nodeName)
                    {
                        $var = 1;
                    }
                    }
                    return self::getNodePos($pNode->previousSibling, $nodeName) + $var;
            }
        }
        //utilitaries functions off selectSingleNode
        private function getFullXpath($pNode)
        {
            if($pNode == null)
                {
                        return "";
            }
            else
            {

                return self::getFullXpath($pNode->parentNode) . "/" . $pNode->nodeName . "[" .strval(self::getNodePos($pNode, $pNode->nodeName)+1) . "]";//+1 to get the real xPath index

            }
        }
    }
?>


与えられた XPath 式を評価する

  • ≪ DOMXPath::evaluate
  • DOMXPath::registerNamespace ≫
  • PHP Manual
  • DOMXPath
  • 与えられた XPath 式を評価する

DOMXPath::query

(PHP 5, PHP 7, PHP 8)

DOMXPath::query — 与えられた XPath 式を評価する

説明

public DOMXPath::query(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed

与えられた XPath 式 expression を評価します。

パラメータ

expression

実行する XPath 式。

contextNode

相対 XPath クエリを実行する場合に、オプションで基準ノードを指定することが可能です。 デフォルトでは、クエリは root 要素に対する相対パスとなります。

registerNodeNS

コンテキストノードのスコープ内の名前空間を、DOMXPath オブジェクトに自動登録するかどうか。 このオプションを使うと、スコープ内の名前空間ごとに、手動で DOMXPath::registerNamespace() をコールする必要がなくなります。 名前空間のプレフィックスが衝突した場合は、直近の子孫の名前空間プレフィックスのみが登録されます。

戻り値

与えられた XPath 式 expression にマッチする すべてのノードを含む DOMNodeList を返します。 ノードを返さない式の場合は、空の DOMNodeList を返します。

expression が不正な形式な場合や contextNode が無効な場合は、 DOMXPath::query() は false を返します。

例

例1 すべての英語の書籍を取得する

<?php

$doc = new DOMDocument;

// 空白に悩まされたくはありません
$doc->preserveWhiteSpace = false;

$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// root 要素から開始します
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';

$entries = $xpath->query($query);

foreach ($entries as $entry) {
echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
" by {$entry->previousSibling->nodeValue}\n";
}
?>

上の例の出力は以下となります。

Found The Grapes of Wrath, by John Steinbeck
Found The Pearl, by John Steinbeck

式を短くするため、contextNode パラメータを使用することも可能です。

<?php

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;

$doc->load('book.xml');

$xpath = new DOMXPath($doc);

$tbody = $doc->getElementsByTagName('tbody')->item(0);

// tbody ノードからの相対クエリです
$query = 'row/entry[. = "en"]';

$entries = $xpath->query($query, $tbody);

foreach ($entries as $entry) {
echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
" by {$entry->previousSibling->nodeValue}\n";
}
?>

参考

  • DOMXPath::evaluate() - 与えられた XPath 式を評価し、可能であれば結果を返す

User Contributed Notes

chris dot russo99 at gmail dot com 17-Aug-2016 03:58
If you can't find a solution for PHP XPATH case sensitivity, you can always try this approach:

http://fsockopen.com/php-programming/your-final-stop-for-php-xpath-case-insensitive

Instead of inserting PHP functions into a XPATH object, convert the XPATH object into an Array(), and then use any PHP function, the regular way.
ikmahesh at cdac dot in 08-Jul-2015 09:29
The parameters for $xPath->query() method is case sensitive.
It matches IDs exact words.
RiKdnUa at mail dot ru 17-Sep-2013 04:26
Пример XPath запроса к XML документу. XML документ содержить элементы с именами из НЕлатинских символов (кириллица). При использовании в XPath запросе предиката, функция DOMXPath::query() выдает предупреждение и запрос не работает. Чтобы запрос работал, надо явно указывать ось. Файл этого примера должен быть в кодировке WINDOWS-1251. Тестировал в PHP 5.2.9-2 и PHP 5.2.17

Example XPath-query to the XML-document. XML-document contains an elements with the names of non-Latin characters (cyrillic). When used predicate in XPath-query, function DOMXPath::query() gives a warning and query does not work. In order to earned the query, it is necessary to explicitly specify the axis. The file of this example is to be in the encoding WINDOWS-1251. Tested in PHP 5.2.9-2 and PHP 5.2.17
<?php
ini_set("display_errors","on");
error_reporting(-1);
function utf8encode($str){return iconv('WINDOWS-1251', 'UTF-8', $str);}
$xml="<?xml version='1.0' encoding='WINDOWS-1251'?>
<часть>
<ссылка href='yandex.com'>Яндекс</ссылка>
<ссылка href='rik.dn.ua/fotopan.php'>г.Донецк</ссылка>
</часть>
";
$document=new domDocument();
$document->preserveWhiteSpace=false;
$document->loadXML($xml);
$domxpath=new domXpath($document);
$list=$domxpath->query(utf8encode('/child::часть/child::ссылка'));//Ok
echo '$list->length='.$list->length."\n<br/>\n";
$list=$domxpath->query(utf8encode('/часть/ссылка'));//Ok
echo '$list->length='.$list->length."\n<br/>\n";
$list=$domxpath->query(utf8encode('/child::часть/child::ссылка[position()=1]'));//Ok
echo '$list->length='.$list->length."\n<br/>\n";
$list=$domxpath->query(utf8encode('/часть/ссылка[1]'));//Warning: DOMXPath::query() [domxpath.query]: Invalid expression in ...
echo '$list->length='.$list->length."\n<br/>\n";
$list=$domxpath->query(utf8encode('/часть/ссылка[position()=1]'));//Warning: DOMXPath::query() [domxpath.query]: Invalid expression in ...
echo '$list->length='.$list->length."\n<br/>\n";
?>
info at syncgw dot com 22-Sep-2011 09:05
A warning to all PHP programmer using this function PHP 5.0.0.0: We needed an equivalent to upper-case() function (is not available in XPath 1.0).

XML-Document:

<Rec>
<SourceRef>./c:calendar2</SourceRef>
<SourceRef>./c:calendar</SourceRef>
</Rec>

using

query('//DataStore[translate(SourceRef,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")="./C:CALENDAR"]/.')

returns ZERO matches.

If you change XML-Source to

<Rec>
<SourceRef>./c:calendar</SourceRef>
<SourceRef>./c:calendar2</SourceRef>
</Rec>

everything works fine
yuriscom at gmail dot com 07-Sep-2011 10:29
I hope it will be helpful for someone:

I spent some time to solve the problem when you query a string with quotes inside.

Suppose you have:
$parameter = "aaa \"bbb\"";
$domxpath->query("//path[text()=\"".$parameter."\""];

In versions > 5.3.0 there is registerPhpFunctions where you can put an addslashes. But in older version you cannot do it in simple way.

So the solution is to use a concat function. So when you have a substring with " inside, wrap it with '. And when you have a substring with ', then wrap with in ".

The code is:

<?php
$dom = new DOMDocument;
$dom->loadXML("<name>'bla' \"bla\" bla</name>");
$xpath = new DOMXPath($dom);
$nodeList = $xpath->query("//name[text()=concat(\"'bla' \" ,'\"bla\"' ,\" bla\")]");
?>

Below is the function that receives a string and returns a concat pattern for the xpath query.

<?php
    function getPattern_MQ($pattern) {
        // initiating an array of substrings
        $ar = array();
        // points to the current position in a string
        $offset = 0;
        $strlen = strlen($pattern);
        while (true) {
            // find a position of quotes
            $qPos = strpos($pattern, "\"", $offset);

            if (!$qPos) {
                // no more quotes
                $leftOver = $offset - $strlen;
                if ($leftOver < 0) {
                    $string = substr($pattern, $leftOver);
                    $ar[] = "\"" . $string . "\"";
                }
                break;
            }
            // add the whole substring before the quotes into the array
            $ar[] = "\"" . substr($pattern, $offset, ($qPos - $offset)) . "\"";
            // add the quotes wrapped with single quot
            $ar[] = "'" . substr($pattern, $qPos, 1) . "'";
            $offset = $qPos + 1;
        }
        // join the array to get: concat("aaa",'"',"bbb",'"');
        $pattern = "concat(''," . join(",", $dynamicPatternsAr) . ")";
        return $pattern;
    }
?>
chris AT cmbuckley DOT co DOT uk 14-Apr-2011 07:31
To help with the problem where the default namespace is not registered with the DOMXPath object, you can use the following replacement to update your paths accordingly:

<?php

$xml = <<<EOS
<root xmlns="urn:test">
    <foo>bar</foo>
</root>
EOS;

$expression = '//foo';
$prefix = 'fakeprefix';

$doc = new DOMDocument();
$doc->loadXML($xml);

$context = $doc->documentElement; // or whichever element you choose
$xpath = new DOMXPath($doc);

// register namespace as below, and apply a regex to the expression
if (null !== $context->namespaceURI) {
    $xpath->registerNamespace($prefix, $context->namespaceURI);
    $expression = preg_replace('#(::|/\s*|\A)(?![/@].+?|[a-z\-]+::)#', '$1' . $prefix . ':$2', $expression);
    var_dump($expression); // string(16) "//fakeprefix:foo"
}

$foo = $xpath->query($expression, $context)->item(0);
var_dump($doc->saveXML($foo)); // string(14) "<foo>bar</foo>"

?>
kkez at example dot com 03-Sep-2010 07:51
If the query() function seems to ignore your $contextnode, and instead returns all the tags in the document, try to use a relative path (use a . in front of the query):

<?php
    $xml = "<?xml version='1.0' encoding='UTF-8'?>
        <test>
            <tag1>
                <uselesstag>
                    <tag2>test</tag2>
                </uselesstag>
            </tag1>
            <tag2>test2</tag2>
        </test>";

    $dom = new DomDocument();
    $dom->loadXML($xml);
    $xpath = new DomXPath($dom);

    $tag1 = $dom->getElementsByTagName("tag1")->item(0);

    echo $xpath->query("//tag2")->length; //output 2 -> correct
    echo $xpath->query("//tag2", $tag1)->length; //output 2 -> wrong, the query is not relative
    echo $xpath->query(".//tag2", $tag1)->length; //output 1 -> correct (note the dot in front of //)
?>

See that i couldn't use $xpath->query("tag2", $tag1) as per the documentation, since "tag2" is not a direct child of "tag1".
I don't know why this note was deleted, i just tested it and it's correct.
It's not a bug, it's simply not written in the documentation.
Anonymous 27-Nov-2009 12:26
I found this useful for building page templates

<?php
$xsl = new DOMDocument;
$xsl->load('layout.xsl');

// Set the <xsl:include> href attribute, the inner stylesheet to include in this layout
$xpath = new DomXPath($xsl);
$res = $xpath->query('//xsl:include');
$res->item(0)->setAttribute('href','page.xsl');
$xsl->save('media/xsl/layout.xsl');
?>
Niklas 27-Aug-2008 02:36
For XPath escaping use the following method (of course it could be more efficient).
<?php
public function xpathescape($string)
{
$result = 'concat(';

for($i=0, $j=strlen($string); $i<$j; ++$i)
{
if($i > 0)
$result .= ",";

if($string[$i] == '\'')
$result .= "\"".$string[$i]."\"";
else
$result .= '\''.$string[$i].'\'';
}

$result .= ')';

return $result;
}
?>

Use it this way:
<php
$xpath->query('//example[sub='.xpathescape($acomplexstring).']');

?>
adam dot prall at thinkingman dot com 19-Jul-2008 09:01
If you're wondering, like I was, why your XPath queries are not returning any of the new DOMElements you create in your (X)HTML documents, and only the ones originally loaded in with (for example) loadXML(), this is why; if you're doing things right, you have registered the nameSpace 'html' after creating your DOMXPath object thus:

<?php

class XPathQueryLength {
     private $nameSpace = '';
     function __construct(DOMDocument $doc) {
          $this->xpath = new DOMXPath($this->doc);
          $this->xpath->registerNamespace(
                 'html','http://www.w3.org/1999/xhtml' );
     }
     function queryLength($query) {
          return $this->xpath->query($query)->length;
     }
}

?>

...but don't forget that when adding new elements to the above DOMDocument $doc, to use createElementNS() instead of createElement(), otherwise you'll have this problem:

<?php

//$doc is a previously loaded XHTML document containing a normal html, head and body structure
//$body is the first selected tag using $doc->getElementsByTagName('body');

$pTag = $doc->createElement('p','This is a new paragraph!');
$body->appendChild($pTag);

$xPath = new XPathQueryLength($doc);
print $xPath->queryLength('//html:p');

output: 0

print $xPath->queryLength('//p');

output: 1

?>

So do this instead:

<?php

//$doc is a previously loaded XHTML document containing a normal html, head and body structure
//$body is the first selected tag using $doc->getElementsByTagName('body');

$pTag = $doc->createElementNS('http://www.w3.org/1999/xhtml','p','This is a new paragraph!');
$body->appendChild($pTag);

$xPath = new XPathQueryLength($doc);
print $xPath->queryLength('//html:p');

output: 2

print $xPath->queryLength('//p');

output: 0

?>

The resulting XHTML file from both example scripts looks much like this:

<html>
  <head></head>
  <body>
     <p>This is a hardcoded paragraph.</p>
     <p>This is a new paragraph!</p>
  </body>
</html>

...so you would think that a paragraph is a paragraph is a paragraph, since you never see the prefix, as in "<html:p>This is a new paragraph!</html:p>".

This may seem glaringly obvious, but I was writing a class that converts CSS queries into XPath queries, and the fact that a namespace had been registered was rather buried in the code.

We love the DOM, the DOM is good to us.
Nibinaear 03-Mar-2008 06:15
I've searched the entire web looking for a way to update / modify/ change/ alter the elements of an xml file and found NOTHING!

So here it is, the defninitive way to "Change XML elements with PHP" rather than adding / appending new ones. This uses XPATH:

<?php

// Create a DOMDocument instance
$xml = new DOMDocument;

// Ignore whitespace between nodes (default: true)
$xml->preserveWhiteSpace = false;

$file='about.xml';

// Load the XML data source
$xml->Load($file);

$xpath = new DOMXPath($xml);

$query='/regions/branch';

$entries = $xpath->query($query);

foreach ($entries as $entry)
{
  $entry->firstChild->nodeValue="like this!";
  echo $entry->firstChild->nodeValue;
}

$xml->save($file);

?>
ondrej dot fischer at 4internet dot cz 25-Oct-2007 06:46
Unfortunately PHP's DOM extension doesn't support use of:
<?xml-stylesheet type="text/xsl" ... ?>
processing instruction.
Here is an example, how to implement it using XPath query and extending DOMDocument by a method output().

<?php

// This simple function adds missing direct usage of anonymous instances
// in PHP5's reference model
function a($var) {
   return $var;
}

// Extended DOMDocument class
class MyDOMDocument extends DOMDocument
{

   public function output()
   {
      $stylesheets = array();
      $PIs = a(new DOMXPath($this))
                  ->query('/processing-instruction("xml-stylesheet")');

      foreach($PIs as $PI)
      {
         // This might be implemented cleaner by regular parsing
         // of DOMProcessingInstruction::data property
         if(ereg('type *= *"text/xsl" +href *= *"([^"]+)"', $PI->data, $mem))
         {
            // Here should be verified, that XSL file exists.
            a($stylesheets[] = new DOMDocument())->load($mem[1]);
         }
      }

      if($stylesheets)
      {
         $processor = new XSLTProcessor();
         foreach($stylesheets as $stylesheet)
            $processor->importStylesheet($stylesheet);
         return $processor->transformToDoc($this);
      }
      // If no stylesheet instructions present, return self directly
      else return $this;

   }
}

?>

Usage:

<?php

$document = new MyDOMDocument();
$document->load('my.xml');
echo $document->output()->saveXML();

?>

With following file my.xml:

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="my.xsl" ?>
<my-root />

and existing file my.xsl that code will transform the xml file using my.xsl and output the result.
jbarnett at flowershopnetwork dot com 11-Sep-2007 01:46
The order of nodes in the return value is not guaranteed.

When my code was on an old server, the returned DOMNodeList was in document order.  On the new server, the returned DOMNodeList is in a consistent order, but it is not in document order.

PHP passes this function call off to the xmlXPathEvalExpression() function in libxml.  That function in libxml only accepts two arguments - the same two this PHP function accepts.  There must have been a change in the libxml version from the old server to the new server, and that libxml behaves differently.

This would be okay if PHP had a way to compare nodes so I can resort the nodes manually, but there is not.

So, there is no guaranteed way to get an ordered list of nodes like DOM 3 XPath provides.
Hayley Watson 12-Aug-2007 05:43
Note that if your DOMDocument was loaded from HTML, where element and attribute names are case-insensitive, the DOM parser converts them all to lower-case, so your XPath queries will have to as well; '//A/@HREF' won't find anything even if the original HTML contained "<A HREF='example.com'>".
nicolas_rainardNOSPAM at yahoo dot fr 10-Jul-2007 02:04
Please note that what clochix says is valid for *any* document which has a default namespace (as it is the case for XHTML).

This document :

<?xml version="1.0" encoding="UTF-8" ?>

<root xmlns="http://www.exemple.org/namespace">

    <element id="1">
    ...
    </element>

    <element id="2">
    ...
    </element>

</element>

must be accessed this way :

$document = new DOMDocument();
$document->load('document.xml');

$xpath = new DOMXPath($document);
$xpath->registerNameSpace('fakeprefix', 'http://www.exemple.org/namespace');

$elements = $xpath->query('//fakeprefix:element');

Of course, there is no prefix in the original document, but the DOMXPath class *needs* one, whatever it is, if you use a default namespace. It *doesn't work* if you specify an empty prefix like this :

$xpath->registerNameSpace('', 'http://www.exemple.org/namespace');

Hope this help to spare some time...
clochix at clochix dot net 01-Mar-2007 04:05
If you want to perform queries on XHTML documents, you must fix a default namespace:

<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = true;
$doc->resolveExternals = true; // for character entities
$doc->load("http://www.w3.org/");
$xpath = new DOMXPath($doc);
// won't work
$entries = $xpath->query("//div");
// you should use :
$xpath->registerNamespace("html", "http://www.w3.org/1999/xhtml");
$entries = $xpath->query("//html:div");
?>
jakob dot voss at nichtich dot de 14-Nov-2005 12:33
You can transform the result nodes into new DOMDocument objects this way:

<?php
$result = $xpath->query($query);
$resultNode = $result->item(0);
$newDom = new DOMDocument;
$newDom->appendChild($newDom->importNode($resultNode,1));

print "<pre>" . htmlspecialchars($newDom->saveXML()) . "</pre>";
?>
Eric Hanson 12-Jul-2005 05:40
Two great XPath references follow.

XPath in Five Paragraphs (finally!):
http://www.rpbourret.com/xml/XPathIn5.htm

The w3c spec actually has a bunch of helpful examples:
http://www.w3.org/TR/xpath#location-paths


DOMXPath オブジェクトの名前空間を登録する

  • ≪ DOMXPath::query
  • DOMXPath::registerPhpFunctions ≫
  • PHP Manual
  • DOMXPath
  • DOMXPath オブジェクトの名前空間を登録する

DOMXPath::registerNamespace

(PHP 5, PHP 7, PHP 8)

DOMXPath::registerNamespace — DOMXPath オブジェクトの名前空間を登録する

説明

public DOMXPath::registerNamespace(string $prefix, string $namespace): bool

DOMXPath オブジェクトに、 namespace および prefix を登録します。

パラメータ

prefix

プレフィックス。

namespace

名前空間の URI。

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

igor dot pellegrini at diespam-berlinonline dot de 10-Mar-2015 07:32
The documentation is not really detailed.
Probably someone is also interested in the possibility of unregistering the namespace.

Worths to note that the original libxml function "xmlXPathRegisterNs()"

* Does NOT accept NULL or empty string for the argument "$prefix".

   and

* Unregisters the namespace if the "$namespaceURI" argument is NULL.

Here the documentation:
http://xmlsoft.org/html/libxml-xpathInternals.html#xmlXPathRegisterNs
xmedeko at gmail dot com 20-Sep-2011 04:58
A general way to register the root default namespace:

<?php
$xml = new DomDocument();
$xml->load('data.xml');
$xpath = new DOMXPath($xml);
$rootNamespace = $xml->lookupNamespaceUri($xml->namespaceURI);
$xpath->registerNamespace('x', $rootNamespace);
?>

And then just query:

<?php $elementList = $xpath->query('//x:items/x:name'); ?>
dulao5 at gmail dot com 16-Jun-2009 12:01
The following code can work for XML default namespace.
<?php
$xml = <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:other="http://other.w3.org/other" >
        <id>uYG7-sPwjFg</id>
        <published>2009-05-17T18:29:31.000Z</published>
</entry>
EOT;

$doc = new DOMDocument;
$doc->loadXML($xml);
$xpath =  DOMXPath($doc);

$xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom");

$xpath_str = '//atom:entry/atom:published/text()';

$entries = $xpath->evaluate($xpath_str);

print $entries->item(0)->nodeValue ."\n";

?>
agent009 31-Mar-2009 04:55
Ok, here's a function that extends XPath syntax with the following special characters:

~ inserts default namespace prefix if defined

# shorthand for text()

% shorthand for comment()

$ shorthand for node()

?* shorthand for processing-instruction()

?foo shorthand for processing-instruction("foo")

? shorthand for processing-instruction("")

^ escapes following character (with literal or SGML entity as needed)

All of the above except ^ are ignored within quoted strings

<?php
function extendXPath($str, $defns = NULL) {
   $quote = false;
   $map = array(
      '~' => isset($defns) ? "$defns:" : '',
      '#' => 'text()',
      '%' => 'comment()',
      '$' => 'node()'
   );
   $out = '';

   for ($i = 0, $len = strlen($str); $i < $len; $i++) {
      $c = $str[$i];
      if (!$quote && array_key_exists($c, $map)) {
         $out .= $map[$c];
      } else switch ($c) {
         case '^':
            $out .= htmlspecialchars($str[++$i], ENT_QUOTES);
            break;
         case '?':
            if ($quote) {
               $out .= $c;
            } elseif ($str[$i + 1] == '*') {
               $out .= 'processing-instruction()';
               $i++;
            } else {
               preg_match('/^\w+/', substr($str, $i + 1), $matches);
               $out .= 'processing-instruction("'.$matches[0].'")';
               $i += strlen($matches[0]);
            };
            break;
         case '"':
            $quote = !$quote;
         default:
            $out .= $c;
      };
   };

   return $out;
}
?>
cameron kellough 14-Apr-2007 10:33
This is called prefix mapping and it is necessary to use xpath to handle documents which have default namespaces. //root/item will search for items with no namespace, not items with the namespace described as the default in the xmlns declaration.  This problem is maddening as it just looks on the surface like xpath isn't working.
spam at spam dot spam 31-Mar-2005 12:46
It is mentioned in a few places on the web, but it wasn't mentioned here. You need to use this function to set up a prefix for the default namespace of a document.

For instance, if you are trying to parse a Microsoft Spreadsheet XML file, which has the default namespace of "urn:schemas-microsoft-com:office:spreadsheet":

$doc = DOMDocument::load("my_spreadsheet.xml);
$xpath = new DOMXPath($doc);
$xpath->registerNamespace("m",
        "urn:schemas-microsoft-com:office:spreadsheet");
$query = '/m:Workbook/m:Worksheet[1]/m:Table';
$result = $xpath->query($query, $doc);

You can use anything in place of the 'm', but you have to specify something! Just asking for "/Workbook/Worksheet/Table" doesn't work.


PHP の関数を XPath 関数として登録する

  • ≪ DOMXPath::registerNamespace
  • DOM 関数 ≫
  • PHP Manual
  • DOMXPath
  • PHP の関数を XPath 関数として登録する

DOMXPath::registerPhpFunctions

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DOMXPath::registerPhpFunctions — PHP の関数を XPath 関数として登録する

説明

public DOMXPath::registerPhpFunctions(string|array|null $restrict = null): void

このメソッドは、PHP の関数を XPath 式の中で使えるようにします。

パラメータ

restrict

このパラメータを使って、特定の関数のみを XPath からコールできるように制限することができます。

このパラメータには、文字列 (関数名) あるいは関数名の配列を指定します。

戻り値

値を返しません。

例

次の例では、以下のような内容の book.xml を使います。

例1 book.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <title>PHP Basics</title>
  <author>Jim Smith</author>
  <author>Jane Smith</author>
 </book>
 <book>
  <title>PHP Secrets</title>
  <author>Jenny Smythe</author>
 </book>
 <book>
  <title>XML basics</title>
  <author>Joe Black</author>
 </book>
</books>

例2 DOMXPath::registerPHPFunctions() と php:functionString の例

<?php
$doc = new DOMDocument;
$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// 名前空間 php: を登録します (必須)
$xpath->registerNamespace("php", "http://php.net/xpath");

// PHP の関数を登録します (無制限)
$xpath->registerPHPFunctions();

// substr 関数を book の title に適用します
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');

echo "Found {$nodes->length} books starting with 'PHP':\n";
foreach ($nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo "$title by $author\n";
}

?>

上の例の出力は、 たとえば以下のようになります。

Found 2 books starting with 'PHP':
PHP Basics by Jim Smith
PHP Secrets by Jenny Smythe

例3 DOMXPath::registerPHPFunctions() と php:function の例

<?php
$doc = new DOMDocument;
$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// 名前空間 php: を登録します (必須)
$xpath->registerNamespace("php", "http://php.net/xpath");

// PHP の関数を登録します (has_multiple 限定)
$xpath->registerPHPFunctions("has_multiple");

function has_multiple($nodes) {
// author が複数ある場合に true を返します
return count($nodes) > 1;
}
// 複数の author がいる book のみを取り出します
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo "Books with multiple authors:\n";
foreach ($books as $book) {
echo $book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

上の例の出力は、 たとえば以下のようになります。

Books with multiple authors:
PHP Basics

参考

  • DOMXPath::registerNamespace() - DOMXPath オブジェクトの名前空間を登録する
  • DOMXPath::query() - 与えられた XPath 式を評価する
  • DOMXPath::evaluate() - 与えられた XPath 式を評価し、可能であれば結果を返す

User Contributed Notes

There are no user contributed notes for this page.


DOM 関数

目次

  • dom_import_simplexml — SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する

User Contributed Notes

There are no user contributed notes for this page.


SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する

  • ≪ DOM 関数
  • libxml ≫
  • PHP Manual
  • DOM 関数
  • SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する

dom_import_simplexml

(PHP 5, PHP 7, PHP 8)

dom_import_simplexml — SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する

説明

dom_import_simplexml(object $node): DOMElement

この関数は、SimpleXML クラスの ノード node を受け取り、それを DOMElement ノードに変換します。新しいオブジェクトは、 DOMElement ノードとして使用可能です。

パラメータ

node

SimpleXMLElement ノード。

戻り値

追加された DOMElement ノードを返します。

変更履歴

バージョン | 説明
8.0.0 | この関数は、失敗時に null を返さなくなりました。

例

例1 dom_import_simplexml() を用いて SimpleXML を DOM にインポートする

<?php

$sxe = simplexml_load_string('<books><book><title>blah</title></book></books>');

if ($sxe === false) {
echo 'ドキュメントのパース中にエラー';
exit;
}

$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
echo 'XML の変換中にエラー';
exit;
}

$dom = new DOMDocument('1.0');
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);

echo $dom->saveXML();

?>

参考

  • simplexml_import_dom() - DOM ノードから SimpleXMLElement オブジェクトを取得する

User Contributed Notes

h4ss4n3 at hyj4z1 dot me 08-Sep-2020 08:08
//No need to initiate, import and append on example#1

(...)
$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
    echo 'Erreur lors de la conversion du XML';
    exit;
}

//$dom = new DOMDocument('1.0');
//$dom_sxe = $dom->importNode($dom_sxe, true);
//$dom_sxe = $dom->appendChild($dom_sxe);

//use ownerDocument propertie
echo $dom->ownerDocument->saveXML();

?>
biniou at yopmail dot com 20-May-2016 09:58
Very useful to add a CDATA node with SimpleXMLElement (use it like addChild) :

<?php
class My_SimpleXMLElement extends SimpleXMLElement {

    public function addChildWithCData($name, $value = NULL) {
        $new_child = $this->addChild($name);

        $node = dom_import_simplexml($new_child);
        $no = $node->ownerDocument;
        $node->appendChild($no->createCDATASection($value));

        return $new_child;
    }
}
Jeff M 06-Mar-2009 01:09
SimpleXML is an 'Object Mapping XML API'. It is not DOM, per se. SimpleXML converts the XML elements into PHP's native data types.

The dom_import_simplexml and simplexml_import_dom functions do *not* create separate copies of the original object. You are free to use the methods of either or both interchangeably, since the underlying instance is the same.

<?php
    // initialize a simplexml object
    $sxe = simplexml_load_string('<root/>');

    // get a dom interface on the simplexml object
    $dom = dom_import_simplexml($sxe);

    // dom adds a new element under the root
    $element = $dom->appendChild(new DOMElement('dom_element'));

    // dom adds an attribute on the new element
    $element->setAttribute('creator', 'dom');

    // simplexml adds an attribute on the dom element
    $sxe->dom_element['sxe_attribute'] = 'added by simplexml';

    // simplexml adds a new element under the root
    $element = $sxe->addChild('sxe_element');

    // simplexml adds an attribute on the new element
    $element['creator'] = 'simplexml';

    // dom finds the simplexml element (via DOMNodeList->index)
    $element = $dom->getElementsByTagName('sxe_element')->item(0);

    // dom adds an attribute on the simplexml element
    $element->setAttribute('dom_attribute', 'added by dom');

    echo ('<pre>');
    print_r($sxe);
    echo ('</pre>');
?>

Outputs:

SimpleXMLElement Object
(
    [dom_element] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [creator] => dom
                    [sxe_attribute] => added by simplexml
                )

        )

    [sxe_element] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [creator] => simplexml
                    [dom_attribute] => added by dom
                )

        )

)

What this illustrates is that both interfaces are operating on the same underlying object instance. Also, when you dom_import_simplexml, you can create and add new elements without reference to an ownerDocument (or documentElement).

So passing a SimpleXMLElement to another method does not mean the recipient is limited to using SimpleXML methods.

Hey Presto! Your telescope has become a pair of binoculars!
crescentfreshpot at yahoo dot com 12-Dec-2007 12:22
justinpatrin at php dot net:
> To get a proper DOM document (which you need to do most things) you need...

No you don't. Just do:
<?php
$dom = dom_import_simplexml($xml)->ownerDocument;
?>
justinpatrin at php dot net 01-Jun-2006 09:44
I've found that newer versions of PHP5 require some special syntax in order to properly convert between SimpleXML and DOM. It's not as easy as calling dom_import_simplexml() with a SimpleXML node. To get a proper DOM document (which you need to do most things) you need:
<?php
//$xml is a SimpleXML instance
$domnode = dom_import_simplexml($xml);
$dom = new DOMDocument();
$domnode = $dom->importNode($domnode, true);
$dom->appendChild($domnode);
?>

Switching back, though, is, well...simple.

<?php
//$dom is a DOMDocument instance
$xml = simplexml_import_dom($dom);
?>


libxml

  • はじめに
  • インストール/設定
    • 要件
    • PHP >= 7.4 におけるインストール手順
    • PHP < 7.4 におけるインストール手順
  • 定義済み定数
  • LibXMLError — LibXMLError クラス
  • libxml 関数
    • libxml_clear_errors — libxmlエラーハンドラをクリアする
    • libxml_disable_entity_loader — 外部エンティティの読み込み機能を無効にする
    • libxml_get_errors — エラー配列を取得する
    • libxml_get_external_entity_loader — 現在の外部エンティティローダーを取得する
    • libxml_get_last_error — libxmlから直近のエラーを取得する
    • libxml_set_external_entity_loader — デフォルトの外部エンティティローダーを変更する
    • libxml_set_streams_context — 次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する
    • libxml_use_internal_errors — libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする

User Contributed Notes

There are no user contributed notes for this page.


はじめに

これらの関数/定数は PHP 5.1.0 以降で使用可能です。 また、以下にあげるコア拡張モジュールは、この libxml 拡張モジュールに依存しています。 DOM, libxml, SimpleXML, SOAP, WDDX, XSL, XML, XMLReader, XMLRPC そして XMLWriter

User Contributed Notes

There are no user contributed notes for this page.


インストール/設定

目次

  • 要件
  • PHP >= 7.4 におけるインストール手順
  • PHP < 7.4 におけるインストール手順

User Contributed Notes

There are no user contributed notes for this page.


要件

この拡張モジュールは、PHP 8.0 以降では » libxml >= 2.9.0 が必要です。PHP 8.0 より前のバージョンでは、libxml >= 2.6.0 が必要です。

User Contributed Notes

There are no user contributed notes for this page.


PHP >= 7.4 におけるインストール手順

libxml 拡張モジュールはデフォルトで有効となりますが、 --without-libxml で無効になっている可能性もあります。

PHP は libxml2 向けの正しいライブラリファイルやヘッダファイル、 コンパイルフラグを選ぶために pkg-config を使います。 configure スクリプトを実行する前に、 望ましいバージョンの libxml2 が選ばれるようにするために、 pkg-config の検索パスを制御する目的で 以下のようにして環境変数 PKG_CONFIG_PATH が使えます:

PKG_CONFIG_PATH="/path/to/libxml2/prefix/lib/pkgconfig:/lib/pkgconfig"

User Contributed Notes

mansourjabin at gmail dot com 06-Nov-2023 05:35
Critical Note: In PHP 7.4, an issue presents itself when interfacing with libxml version 2.10.2. If you're deploying PHP 7.4 and wish to maintain operational stability, ensure that libxml is aligned to version 2.9.10. This version has been verified to work seamlessly with PHP 7.4, thereby preventing potential conflicts.
KiralyCraft 19-Sep-2022 05:51
Please note that this option does not seem to work for PHP 8.1.10 anymore.


PHP < 7.4 におけるインストール手順

libxml 拡張モジュールはデフォルトで有効となりますが、 --disable-libxml で無効になっている可能性もあります。

オプションの --with-libxml-dir ディレクティブを使って、PHP をコンパイルするシステム上での libxml の位置を指定することができます。 指定しなければ、デフォルトの場所のみを探します。configure の際に libxml (具体的には xml2-config) を探す順序は次のとおりです。

  1. --with-libxml-dir で指定した ([DIR]) 場所 ([DIR]=/bin/xml2-config)

  2. /usr/local/bin/xml2-config

  3. /usr/bin/xml2-config

configure 時に --with-libxml-dir で指定したディレクトリで xml2-config が見つからない場合は、デフォルトの場所を探します。

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

LIBXML_BIGLINES (int)
行数が 65535 を超えても正しく報告する

注意:

PHP 7.0.0 以降で Libxml >= 2.9.0 の場合のみ有効

LIBXML_COMPACT (int)
小さなノードを割り当てるように最適化する。アプリケーションの コードを変更することなしにスピードアップさせることができる

注意:

Libxml >= 2.6.21 でのみ有効

LIBXML_DTDATTR (int)
デフォルトのDTD属性
LIBXML_DTDLOAD (int)
外部サブセットをロードする
LIBXML_DTDVALID (int)
DTDで検証する
警告

DTD の検証を有効にすると、XML外部エンティティ参照攻撃(XXE) を容易にしてしまうかもしれません。

LIBXML_HTML_NOIMPLIED (int)
HTML_PARSE_NOIMPLIED フラグを設定する。 これは、暗黙の html/body... 要素の自動追加を無効にする。

注意:

Libxml >= 2.7.7 (PHP >= 5.4.0) でのみ有効

LIBXML_HTML_NODEFDTD (int)
HTML_PARSE_NODEFDTD フラグを設定する。 これは、doctype が見つからないときにデフォルトの doctype を追加しないようにする。

注意:

Libxml >= 2.7.8 (PHP >= 5.4.0) でのみ有効

LIBXML_LOADED_VERSION (string)
libxml のコアパーサのバージョン
LIBXML_NOBLANKS (int)
空白のノードを削除
LIBXML_NOCDATA (int)
CDATA をテキストノードとしてマージ
LIBXML_NOEMPTYTAG (int)
空タグを拡張する（例 <br/> を <br></br> にする）

注意:

このオプションは、現在 DOMDocument::save および DOMDocument::saveXML 関数でのみ有効です。

LIBXML_NOENT (int)
エンティティを置換
警告

エンティティの置換を有効にすると、XML外部エンティティ参照攻撃(XXE) を容易にしてしまうかもしれません。

LIBXML_NOERROR (int)
エラー出力を抑制
LIBXML_NONET (int)
ドキュメントロード時にネットワークアクセスを無効にする
LIBXML_NOWARNING (int)
警告出力を抑制する
LIBXML_NOXMLDECL (int)
ドキュメントの保存時に XML 宣言を削除する

注意:

Libxml >= 2.6.21 でのみ有効

LIBXML_NSCLEAN (int)
冗長な名前空間宣言を削除する
LIBXML_PARSEHUGE (int)
パーサでハードコーディングされたすべての制限を緩和するための XML_PARSE_HUGE フラグを設定する。 これは、ドキュメントやエンティティの再帰の最大数や テキストノードのサイズなどの制限に影響する。

注意:

Libxml >= 2.7.0 (PHP >= 5.3.2 あるいは PHP >= 5.2.12) でのみ有効

LIBXML_PEDANTIC (int)
XML_PARSE_PEDANTIC フラグを設定する。これは、より細かいエラー報告を出す。

注意:

PHP >= 5.4.0 でのみ有効

LIBXML_XINCLUDE (int)
XInclude 置換を実装する
LIBXML_ERR_ERROR (int)
復帰可能なエラー
LIBXML_ERR_FATAL (int)
致命的なエラー
LIBXML_ERR_NONE (int)
エラーなし
LIBXML_ERR_WARNING (int)
単純な警告
LIBXML_VERSION (int)
20605 や 20617 のような libxml のバージョン
LIBXML_DOTTED_VERSION (string)
2.6.5または2.6.17のようなlibxmlのバージョン
LIBXML_SCHEMA_CREATE (int)
XSD スキーマの検証時にデフォルト/固定の値ノードを作る

注意:

Libxml >= 2.6.14 (PHP >= 5.5.2) 以降で利用可能

User Contributed Notes

Ismael Miguel 07-Jul-2023 10:53
If you want to save without the XML declaration, and LIBXML_NOXMLDECL doesn't work for you, you can just do this:

<?php
$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->loadXML($xml, LIBXML_*);

echo $doc->saveXML($doc->firstElementChild);
?>

This will output the XML without the XML declaration and without using the flag.
You also don't need to do fiddly replacements and pray that it works.
siraic at gmail dot com 24-Mar-2021 12:10
The name of the constant LIBXML_NOENT is very misleading. Adding this flag actually causes the parser to load and insert the external entities. Omitting it leaves the tags untouched, which is probably what you want.
vetalstar at mail dot ru 16-Nov-2017 12:26
LIBXML_DOTTED_VERSION option doesn't work.
libxml version: 2.9.4

<?php

echo LIBXML_DOTTED_VERSION;
$xml = new SimpleXMLElement('<fasa_request id="1234567"/>', LIBXML_NOXMLDECL);

?>
@oneseventeen 05-Feb-2011 11:51
When inserting XML DOM Elements inside existing XML DOM Elements that I loaded from an XML file using the following code, none of my new elements were formatted correctly, they just showed up on one line:

<?php
$dom = DOMDocument::load('file.xml');
$dom->formatOutput = true;
//$dom->add some new elements with child nodes somewhere inside the loaded XML using insertBefore();
$dom->saveXML();
//output: everything looks normal but the new nodes are all on one line.
?>

I found I could pass LIBXML_NOBLANKS to the load method and it would reformat the whole document, including my added stuff:
<?php
$dom = DOMDocument::load('file.xml', LIBXML_NOBLANKS);
$dom->formatOutput = true;
//$dom->add some new elements with child nodes somewhere inside the loaded XML using insertBefore();
$dom->saveXML();
//output: everything looks newly formatted, including new nodes
?>

Hope this helps, took me hours of trial and error to figure this out!
zachatwork at gmail dot com 09-Feb-2010 11:30
Note: The LIBXML_NOXMLDECL constant is defined in this library but is not supported by DOMDocument (yet).

See also: http://bugs.php.net/bug.php?id=47137

<?php

print "PHP_VERSION:      ".PHP_VERSION."\n";
print "LIBXML_VERSION:   ".LIBXML_VERSION."\n";
print "LIBXML_NOXMLDECL: ".LIBXML_NOXMLDECL."\n";

$dom = new DomDocument();
$dom->loadXML("<foo />");

# This should work but doesn't.

print "DOMDocument doesn't honor LIBXML_NOXMLDECL:\n";
print $dom->saveXML(null,LIBXML_NOXMLDECL);

# This works, and will still work after the above is fixed.

print "Forwards compatible workaround:\n";
$lines = explode("\n", $dom->saveXML(null, LIBXML_NOXMLDECL), 2);
if(!preg_match('/^\<\?xml/', $lines[0]))
    print $lines[0];
print $lines[1];

?>

PHP_VERSION:      5.3.1-0.dotdeb.1
LIBXML_VERSION:   20632
LIBXML_NOXMLDECL: 2
DOMDocument doesn't honor LIBXML_NOXMLDECL:
<?xml version="1.0"?>
<foo/>
Forwards compatible workaround:
<foo/>


LibXMLError クラス

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

はじめに

libxml がスローするエラーについてのさまざまな情報を含みます。エラーコードについての説明は、公式の » xmlError API ドキュメント をごらんください。

クラス概要

class LibXMLError {
/* プロパティ */
public int $level;
public int $code;
public int $column;
public string $message;
public string $file;
public int $line;
}

プロパティ

level

エラーの深刻度 (次の定数 LIBXML_ERR_WARNING、 LIBXML_ERR_ERROR あるいは LIBXML_ERR_FATAL のいずれか)。

code

エラーコード。

column

エラーが発生した列。

注意:

このプロパティは libxml で完全には実装されておらず、しばしば 0 が返されることがあります。

message

エラーメッセージ (存在する場合)。

file

ファイル名。XML を文字列から読み込んだ場合は空文字列。

line

エラーが発生した行。

User Contributed Notes

There are no user contributed notes for this page.


libxml 関数

目次

  • libxml_clear_errors — libxmlエラーハンドラをクリアする
  • libxml_disable_entity_loader — 外部エンティティの読み込み機能を無効にする
  • libxml_get_errors — エラー配列を取得する
  • libxml_get_external_entity_loader — 現在の外部エンティティローダーを取得する
  • libxml_get_last_error — libxmlから直近のエラーを取得する
  • libxml_set_external_entity_loader — デフォルトの外部エンティティローダーを変更する
  • libxml_set_streams_context — 次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する
  • libxml_use_internal_errors — libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする

User Contributed Notes

There are no user contributed notes for this page.


libxmlエラーハンドラをクリアする

  • ≪ libxml 関数
  • libxml_disable_entity_loader ≫
  • PHP Manual
  • libxml 関数
  • libxmlエラーハンドラをクリアする

libxml_clear_errors

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

libxml_clear_errors — libxmlエラーハンドラをクリアする

説明

libxml_clear_errors(): void

libxml_clear_errors()は、libxmlエラーバッファをクリアします。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

参考

  • libxml_get_errors() - エラー配列を取得する
  • libxml_get_last_error() - libxmlから直近のエラーを取得する

User Contributed Notes

There are no user contributed notes for this page.


外部エンティティの読み込み機能を無効にする

  • ≪ libxml_clear_errors
  • libxml_get_errors ≫
  • PHP Manual
  • libxml 関数
  • 外部エンティティの読み込み機能を無効にする

libxml_disable_entity_loader

(PHP 5 >= 5.2.11, PHP 7, PHP 8)

libxml_disable_entity_loader — 外部エンティティの読み込み機能を無効にする

警告

この関数は PHP 8.0.0 で 非推奨になります。この関数に頼らないことを強く推奨します。

説明

libxml_disable_entity_loader(bool $disable = true): bool

外部エンティティ読み込み機能の有効/無効を切り替えます。 外部エンティティの読み込みを無効にすると、 XML文書を読み込む際に問題が起こる可能性があることに注意して下さい。 しかし、libxml 2.9.0 以降では、エンティティの置換はデフォルトで無効になっているため、 LIBXML_NOENT を使って内部エンティティの参照を解決する必要がない限り、 外部エンティティの読み込みを無効にする必要はありません。 一般的には、外部エンティティの読み込みを抑制するのであれば、 libxml_set_external_entity_loader() を使うことが望ましいです。

パラメータ

disable

libxml を使用する拡張モジュール (DOM、XMLWriter および XMLReader) で、外部エンティティの読み込み機能を 無効 (true) あるいは有効 (false) にします。

戻り値

変更前の値を返します。

参考

  • libxml_use_internal_errors() - libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする
  • libxml_set_external_entity_loader() - デフォルトの外部エンティティローダーを変更する
  • LIBXML_NOENT 定数

User Contributed Notes

editor at geekkb.com 27-Apr-2023 02:46
There is an extra \ should be deleted before PHP_VERSION_ID in the code which suconghou posted 2 years ago.

if (PHP_VERSION_ID < 80000) {
    libxml_disable_entity_loader(true);
}
suconghou at gmail dot com 07-Jan-2021 10:27
In PHP 8.0 and later, PHP uses libxml versions from 2.9.0, libxml_disable_entity_loader is deprecated.
so it is now safe to remove all `libxml_disable_entity_loader` calls on php8

if you want Backwards Compatibility

use this snippet

if (\PHP_VERSION_ID < 80000) {
    libxml_disable_entity_loader(true);
}
vavra at 602 dot cz 04-Jan-2018 09:48
If is called
libxml_disable_entity_loader(true);

, it causes that new SoapClient(.) fails with

SOAP-ERROR: Parsing WSDL: Couldn't load from 'D:\path/dm_operations.wsdl' : failed to load external entity "D:\path/dm_operations.wsdl

because this wsdl imports a xsd as an another external file.
Tested on php 7.1.12, win x64.
brendan at bloodbone dot ws 25-Mar-2014 10:23
This also seems to have an impact on <xsl:import /> statements if this is applied when loading XSLT for the XSLTProcessor class.
phofstetter at sensational dot ch 27-Jan-2014 04:36
Be mindful that this also disables url loading in simplexml_load_file() and likely other libxml based functions that deal with URLs
daschtour at me dot com 25-Dec-2013 11:56
This function was reported to be not thread safe. So this might affect php-scripts on the same server.
simonsimcity 29-Feb-2012 06:23
Using this function you can prevent a vulnerable to Local and Remote File Inclusion attacks.

You'll see it in an example where I load and validate the following string:

<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>

One way to prevent that the file in given back is to set this value to 0.
Please take a closer look at the release of symfony 2.0.11


エラー配列を取得する

  • ≪ libxml_disable_entity_loader
  • libxml_get_external_entity_loader ≫
  • PHP Manual
  • libxml 関数
  • エラー配列を取得する

libxml_get_errors

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

libxml_get_errors — エラー配列を取得する

説明

libxml_get_errors(): array

エラー配列を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

エラーがバッファにある場合に LibXMLError オブジェクトの配列、 それ以外の場合に空の配列を返します。

例

例1 libxml_get_errors() の例

この例は、簡単な libxml エラーハンドラを構築する方法を示すものです。

<?php

libxml_use_internal_errors(true);

$xmlstr = <<< XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<titles>PHP: Behind the Parser</title>
</movie>
</movies>
XML;

$doc = simplexml_load_string($xmlstr);
$xml = explode("\n", $xmlstr);

if ($doc === false) {
$errors = libxml_get_errors();

foreach ($errors as $error) {
echo display_xml_error($error, $xml);
}

libxml_clear_errors();
}

function display_xml_error($error, $xml)
{
$return = $xml[$error->line - 1] . "\n";
$return .= str_repeat('-', $error->column) . "^\n";

switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return .= "Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return .= "Fatal Error $error->code: ";
break;
}

$return .= trim($error->message) .
"\n Line: $error->line" .
"\n Column: $error->column";

if ($error->file) {
$return .= "\n File: $error->file";
}

return "$return\n\n--------------------------------------------\n\n";
}

?>

上の例の出力は以下となります。

<titles>PHP: Behind the Parser</title>
----------------------------------------------^
Fatal Error 76: Opening and ending tag mismatch: titles line 4 and title
  Line: 4
  Column: 46

--------------------------------------------

参考

  • libxml_get_last_error() - libxmlから直近のエラーを取得する
  • libxml_clear_errors() - libxmlエラーハンドラをクリアする

User Contributed Notes

lech 29-Jul-2017 12:12
Please beware that the column property seems almost always to be invalid. I thought it only occurred when the line in question was long (and I was just about to submit a bug report with an example), however, at the time of posting, you can even see the problem in the example provided on this page: line 4 does not even have 46 characters. Where the XML line is long, the difference can be very large.

This property comes from the libxml extension, so in any case I don't think this is a PHP bug, however it is worth knowing that the value might be totally unreliable to save some confusion.

The PHP documentation page for the libXMLError class gives some indication, stating:

"This property isn't entirely implemented in libxml and therefore 0 is often returned."

(My libxml version: 2.9.1)


現在の外部エンティティローダーを取得する

  • ≪ libxml_get_errors
  • libxml_get_last_error ≫
  • PHP Manual
  • libxml 関数
  • 現在の外部エンティティローダーを取得する

libxml_get_external_entity_loader

(PHP 8 >= 8.2.0)

libxml_get_external_entity_loader — 現在の外部エンティティローダーを取得する

説明

libxml_get_external_entity_loader(): ?callable

直前に libxml_set_external_entity_loader() を使って設定した、外部エンティティローダーを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

直前に libxml_set_external_entity_loader() を使って設定した、外部エンティティローダーを返します。 libxml_set_external_entity_loader() をコールしたことがないか、null を渡して呼び出した場合は null を返します。

参考

  • libxml_set_external_entity_loader() - デフォルトの外部エンティティローダーを変更する

User Contributed Notes

There are no user contributed notes for this page.


libxmlから直近のエラーを取得する

  • ≪ libxml_get_external_entity_loader
  • libxml_set_external_entity_loader ≫
  • PHP Manual
  • libxml 関数
  • libxmlから直近のエラーを取得する

libxml_get_last_error

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

libxml_get_last_error — libxmlから直近のエラーを取得する

説明

libxml_get_last_error(): LibXMLError|false

libxmlから直近のエラーを取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

エラーがバッファにある場合にLibXMLErrorオブジェクト、 それ以外の場合に false を返します。

参考

  • libxml_get_errors() - エラー配列を取得する
  • libxml_clear_errors() - libxmlエラーハンドラをクリアする

User Contributed Notes

There are no user contributed notes for this page.


デフォルトの外部エンティティローダーを変更する

  • ≪ libxml_get_last_error
  • libxml_set_streams_context ≫
  • PHP Manual
  • libxml 関数
  • デフォルトの外部エンティティローダーを変更する

libxml_set_external_entity_loader

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

libxml_set_external_entity_loader — デフォルトの外部エンティティローダーを変更する

説明

libxml_set_external_entity_loader(?callable $resolver_function): bool

デフォルトの外部エンティティローダーを変更します。 たとえ LIBXML_NOENT が個別のXMLの操作に設定されている場合でも、 XXE攻撃を避けるために、任意の外部エンティティの展開を抑制するために使うことができます。 また、 libxml_disable_entity_loader() を呼び出すことよりも、この関数を呼び出すほうが通常は好ましいです。

パラメータ

resolver_function

次のシグネチャを持つ callable を指定します。:

resolver(?string $public_id, string $system_id, array $context): resource|string|null
public_id
パブリック ID
system_id
システムID
context
4つのキーを持つ配列。 キーは "directory", "intSubName", "extSubURI", "extSubSystem" です。
この callable は、 リソースまたはリソースをオープンできる文字列あるいは null でなければなりません。null を返す場合、エンティティ参照の解決は失敗します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 libxml_set_external_entity_loader() の例

<?php
$xml = <<<XML
<!DOCTYPE foo PUBLIC "-//FOO/BAR" "http://example.com/foobar">
<foo>bar</foo>
XML;

$dtd = <<<DTD
<!ELEMENT foo (#PCDATA)>
DTD;

libxml_set_external_entity_loader(
function ($public, $system, $context) use($dtd) {
var_dump($public);
var_dump($system);
var_dump($context);
$f = fopen("php://temp", "r+");
fwrite($f, $dtd);
rewind($f);
return $f;
}
);

$dd = new DOMDocument;
$r = $dd->loadXML($xml);

var_dump($dd->validate());
?>

上の例の出力は以下となります。

string(10) "-//FOO/BAR"
string(25) "http://example.com/foobar"
array(4) {
    ["directory"]    => NULL
    ["intSubName"]   => NULL
    ["extSubURI"]    => NULL
    ["extSubSystem"] => NULL
}
bool(true)

参考

  • libxml_disable_entity_loader() - 外部エンティティの読み込み機能を無効にする
  • libxml_get_external_entity_loader() - 現在の外部エンティティローダーを取得する

User Contributed Notes

There are no user contributed notes for this page.


次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する

  • ≪ libxml_set_external_entity_loader
  • libxml_use_internal_errors ≫
  • PHP Manual
  • libxml 関数
  • 次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する

libxml_set_streams_context

(PHP 5, PHP 7, PHP 8)

libxml_set_streams_context — 次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する

説明

libxml_set_streams_context(resource $context): void

次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定します。

パラメータ

context

ストリームコンテキストリソース( stream_context_create()で作成)

戻り値

値を返しません。

例

例1 libxml_set_streams_context() の例

<?php

$opts = array(
'http' => array(
'user_agent' => 'PHP libxml agent',
)
);

$context = stream_context_create($opts);
libxml_set_streams_context($context);

// HTTPによりファイルをリクエスト
$doc = DOMDocument::load('http://www.example.com/file.xml');

?>

参考

  • stream_context_create() - ストリームコンテキストを作成する

User Contributed Notes

There are no user contributed notes for this page.


libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする

  • ≪ libxml_set_streams_context
  • SimpleXML ≫
  • PHP Manual
  • libxml 関数
  • libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする

libxml_use_internal_errors

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

libxml_use_internal_errors — libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする

説明

libxml_use_internal_errors(?bool $use_errors = null): bool

libxml_use_internal_errors() により、 標準のlibxmlエラーを無効にし、ユーザーによるエラー処理を有効にすることができます。

パラメータ

use_errors

ユーザーによるエラー処理を有効 (true) または無効 (false) にする。 無効にすると、既に存在する libxml のエラーもすべてクリアします。

戻り値

この関数は、 use_errorsの前の値を返します。

変更履歴

バージョン | 説明
8.0.0 | use_errors は、nullable になりました。 これより前のバージョンでは、デフォルトは false でした。

例

例1 libxml_use_internal_errors()の例

この例では、libxml関数のエラー処理とこの関数の戻り値の 基本的な使い方を示しています。

<?php

// ユーザーによるエラー処理を有効にします
var_dump(libxml_use_internal_errors(true));

// ドキュメントを読み込みます
$doc = new DOMDocument;

if (!$doc->load('file.xml')) {
foreach (libxml_get_errors() as $error) {
// ここでエラー処理をします
}

libxml_clear_errors();
}

?>

上の例の出力は以下となります。

bool(false)

参考

  • libxml_clear_errors() - libxmlエラーハンドラをクリアする
  • libxml_get_errors() - エラー配列を取得する

User Contributed Notes

marcovtwout 07-May-2013 01:05
When using libxml_use_internal_errors(true), and perform a possibly memory intensive operation like simplexml_load_string() next, you might end up with a blank screen and no php error logged because the error message been suppressed.
james at dunmore dot me dot uk 21-Aug-2008 03:03
We use a custom error handler using  set_error_handler()  I found that after I call

libxml_use_internal_errors(false);

It resets my error_handler - not sure if this is a bug or not, I will report it as a bug - however, I needed to repeat my call to set_error_handler

(did confuse me for a while)
B Crawford 03-Oct-2007 06:22
When using this funtion, be sure to clear your internal error buffer. If you dn't and you are using this in a long running process, you may find that all your memory is used up.


SimpleXML

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
  • 例
    • 基本的な SimpleXML の使用法
    • XML エラーの対応
  • SimpleXMLElement — SimpleXMLElement クラス
    • SimpleXMLElement::addAttribute — SimpleXML 要素に属性を追加する
    • SimpleXMLElement::addChild — XML ノードに子要素を追加する
    • SimpleXMLElement::asXML — SimpleXML 要素に基づき整形式の XML 文字列を返す
    • SimpleXMLElement::attributes — 要素の属性を定義する
    • SimpleXMLElement::children — 指定したノードの子ノードを見付ける
    • SimpleXMLElement::__construct — 新しい SimpleXMLElement オブジェクトを作成する
    • SimpleXMLElement::count — 子要素を数える
    • SimpleXMLElement::current — 現在の要素を返す
    • SimpleXMLElement::getDocNamespaces — ドキュメントで宣言されている名前空間を返す
    • SimpleXMLElement::getName — XML 要素の名前を取得する
    • SimpleXMLElement::getNamespaces — ドキュメントで使用している名前空間を返す
    • SimpleXMLElement::getChildren — 現在の要素の子要素を返す
    • SimpleXMLElement::hasChildren — 現在の要素が子要素を持つかどうかを調べる
    • SimpleXMLElement::key — 現在のキーを返す
    • SimpleXMLElement::next — 次の要素に移動する
    • SimpleXMLElement::registerXPathNamespace — 次の XPath クエリ用の prefix/ns コンテキストを作成する
    • SimpleXMLElement::rewind — 最初の要素に巻き戻す
    • SimpleXMLElement::saveXML — SimpleXMLElement::asXML のエイリアス
    • SimpleXMLElement::__toString — 文字列で要素の内容を返す
    • SimpleXMLElement::valid — 現在の要素が有効かどうかを調べる
    • SimpleXMLElement::xpath — XML データに Xpath クエリを実行する
  • SimpleXMLIterator — SimpleXMLIterator クラス
  • SimpleXML 関数
    • simplexml_import_dom — DOM ノードから SimpleXMLElement オブジェクトを取得する
    • simplexml_load_file — XMLファイルをパースし、オブジェクトに代入する
    • simplexml_load_string — XML 文字列をオブジェクトに代入する

User Contributed Notes

oleg at mastak dot fi 30-Mar-2016 09:57
Two lines xml2array:

<?php

$xml = simplexml_load_string($xmlstring);
$array = (array) $xml;

?>
dkrnl at yandex dot ru 30-Sep-2013 02:57
Wrapper XMLReader class, for simple SAX-reading huge xml:
https://github.com/dkrnl/SimpleXMLReader

Usage example: http://github.com/dkrnl/SimpleXMLReader/blob/master/examples/example1.php

<?php

/**
 * Simple XML Reader
 *
 * @license Public Domain
 * @author Dmitry Pyatkov(aka dkrnl) <dkrnl@yandex.ru>
 * @url http://github.com/dkrnl/SimpleXMLReader
 */
class SimpleXMLReader extends XMLReader
{

    /**
     * Callbacks
     *
     * @var array
     */
    protected $callback = array();

    /**
     * Add node callback
     *
     * @param  string   $name
     * @param  callback $callback
     * @param  integer  $nodeType
     * @return SimpleXMLReader
     */
    public function registerCallback($name, $callback, $nodeType = XMLREADER::ELEMENT)
    {
        if (isset($this->callback[$nodeType][$name])) {
            throw new Exception("Already exists callback $name($nodeType).");
        }
        if (!is_callable($callback)) {
            throw new Exception("Already exists parser callback $name($nodeType).");
        }
        $this->callback[$nodeType][$name] = $callback;
        return $this;
    }

    /**
     * Remove node callback
     *
     * @param  string  $name
     * @param  integer $nodeType
     * @return SimpleXMLReader
     */
    public function unRegisterCallback($name, $nodeType = XMLREADER::ELEMENT)
    {
        if (!isset($this->callback[$nodeType][$name])) {
            throw new Exception("Unknow parser callback $name($nodeType).");
        }
        unset($this->callback[$nodeType][$name]);
        return $this;
    }

    /**
     * Run parser
     *
     * @return void
     */
    public function parse()
    {
        if (empty($this->callback)) {
            throw new Exception("Empty parser callback.");
        }
        $continue = true;
        while ($continue && $this->read()) {
            if (isset($this->callback[$this->nodeType][$this->name])) {
                $continue = call_user_func($this->callback[$this->nodeType][$this->name], $this);
            }
        }
    }

    /**
     * Run XPath query on current node
     *
     * @param  string $path
     * @param  string $version
     * @param  string $encoding
     * @return array(SimpleXMLElement)
     */
    public function expandXpath($path, $version = "1.0", $encoding = "UTF-8")
    {
        return $this->expandSimpleXml($version, $encoding)->xpath($path);
    }

    /**
     * Expand current node to string
     *
     * @param  string $version
     * @param  string $encoding
     * @return SimpleXMLElement
     */
    public function expandString($version = "1.0", $encoding = "UTF-8")
    {
        return $this->expandSimpleXml($version, $encoding)->asXML();
    }

    /**
     * Expand current node to SimpleXMLElement
     *
     * @param  string $version
     * @param  string $encoding
     * @param  string $className
     * @return SimpleXMLElement
     */
    public function expandSimpleXml($version = "1.0", $encoding = "UTF-8", $className = null)
    {
        $element = $this->expand();
        $document = new DomDocument($version, $encoding);
        $node = $document->importNode($element, true);
        $document->appendChild($node);
        return simplexml_import_dom($node, $className);
    }

    /**
     * Expand current node to DomDocument
     *
     * @param  string $version
     * @param  string $encoding
     * @return DomDocument
     */
    public function expandDomDocument($version = "1.0", $encoding = "UTF-8")
    {
        $element = $this->expand();
        $document = new DomDocument($version, $encoding);
        $node = $document->importNode($element, true);
        $document->appendChild($node);
        return $document;
    }

}
?>
whyme 28-Dec-2012 09:55
Simple means simple.  If you know the structure and just want the value of a tag:

<?php
$xml = simplexml_load_file($xmlfile);
print $xml->City->Street->Address->HouseColor;
?>

Warning, numbers can come out as strings, empty elements like <HouseColor></HouseColor> come out as array(0)
xaviered at gmail dot com 17-May-2012 07:00
Here is a recursive function that will convert a given SimpleXMLElement object into an array, preserving namespaces and attributes.

<?php
function xmlObjToArr($obj) {
        $namespace = $obj->getDocNamespaces(true);
        $namespace[NULL] = NULL;

        $children = array();
        $attributes = array();
        $name = strtolower((string)$obj->getName());

        $text = trim((string)$obj);
        if( strlen($text) <= 0 ) {
            $text = NULL;
        }

        // get info for all namespaces
        if(is_object($obj)) {
            foreach( $namespace as $ns=>$nsUrl ) {
                // atributes
                $objAttributes = $obj->attributes($ns, true);
                foreach( $objAttributes as $attributeName => $attributeValue ) {
                    $attribName = strtolower(trim((string)$attributeName));
                    $attribVal = trim((string)$attributeValue);
                    if (!empty($ns)) {
                        $attribName = $ns . ':' . $attribName;
                    }
                    $attributes[$attribName] = $attribVal;
                }

                // children
                $objChildren = $obj->children($ns, true);
                foreach( $objChildren as $childName=>$child ) {
                    $childName = strtolower((string)$childName);
                    if( !empty($ns) ) {
                        $childName = $ns.':'.$childName;
                    }
                    $children[$childName][] = xmlObjToArr($child);
                }
            }
        }

        return array(
            'name'=>$name,
            'text'=>$text,
            'attributes'=>$attributes,
            'children'=>$children
        );
    }
?>
soloman at textgrid dot com 09-Aug-2011 05:06
Three line xml2array:

<?php

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

?>

Ta da!
streaver91 at gmail dot com 04-May-2011 08:49
The BIGGEST differece between an XML and a PHP array is that in an XML file, the name of elements can be the same even if they are siblings, eg. "<pa><ch /><ch /><ch /></pa>", while in an PHP array, the key of which must be different.

I think the array structure developed by svdmeer can fit for XML, and fits well.

here is an example array converted from an xml file:
array(
"@tag"=>"name",
"@attr"=>array(
    "id"=>"1","class"=>"2")
"@text"=>"some text",
)

or if it has childrens, that can be:

array(
"@tag"=>"name",
"@attr"=>array(
    "id"=>"1","class"=>"2")
"@items"=>array(
    0=>array(
        "@tag"=>"name","@text"=>"some text"
    )
)

Also, I wrote a function that can change that array back to XML.

<?php
function array2XML($arr,$root) {
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><{$root}></{$root}>");
$f = create_function('$f,$c,$a','
        foreach($a as $v) {
            if(isset($v["@text"])) {
                $ch = $c->addChild($v["@tag"],$v["@text"]);
            } else {
                $ch = $c->addChild($v["@tag"]);
                if(isset($v["@items"])) {
                    $f($f,$ch,$v["@items"]);
                }
            }
            if(isset($v["@attr"])) {
                foreach($v["@attr"] as $attr => $val) {
                    $ch->addAttribute($attr,$val);
                }
            }
        }');
$f($f,$xml,$arr);
return $xml->asXML();
}
?>
phil at dier dot us 19-Jan-2011 11:37
Here's a function I came up with to convert an associative array to XML.  Works for multidimensional arrays as well.

<?php
function assocArrayToXML($root_element_name,$ar)
{
    $xml = new SimpleXMLElement("<?xml version=\"1.0\"?><{$root_element_name}></{$root_element_name}>");
    $f = create_function('$f,$c,$a','
            foreach($a as $k=>$v) {
                if(is_array($v)) {
                    $ch=$c->addChild($k);
                    $f($f,$ch,$v);
                } else {
                    $c->addChild($k,$v);
                }
            }');
    $f($f,$xml,$ar);
    return $xml->asXML();
}
?>
philipp at strazny dot com 23-Nov-2010 05:33
Here's a quick way to dump the nodeValues from SimpleXML into an array using the path to each nodeValue as key. The paths are compatible with e.g. DOMXPath. I use this when I need to update values externally (i.e. in code that doesn't know about the underlying xml). Then I use DOMXPath to find the node containing the original value and update it.

<?php
function XMLToArrayFlat($xml, &$return, $path='', $root=false)
{
    $children = array();
    if ($xml instanceof SimpleXMLElement) {
        $children = $xml->children();
        if ($root){ // we're at root
            $path .= '/'.$xml->getName();
        }
    }
    if ( count($children) == 0 ){
        $return[$path] = (string)$xml;
        return;
    }
    $seen=array();
    foreach ($children as $child => $value) {
        $childname = ($child instanceof SimpleXMLElement)?$child->getName():$child;
        if ( !isset($seen[$childname])){
            $seen[$childname]=0;
        }
        $seen[$childname]++;
        XMLToArrayFlat($value, $return, $path.'/'.$child.'['.$seen[$childname].']');
    }
}
?>

Use like this:

<?php
$xml = simplexml_load_string(...some xml string...);
$xmlarray = array(); // this will hold the flattened data
XMLToArrayFlat($xml, $xmlarray, '', true);
?>

You can also pull multiple files in one array:

<?php
foreach($files as $file){
    $xml = simplexml_load_file($file);
    XMLToArrayFlat($xml, $xmlarray, $file.':', true);
}
?>
The respective filename/path is thus prefixed to each key.
kristof at viewranger dot com 18-Nov-2010 05:14
If you tried to load an XML file with this, but the CDATA parts were not loaded for some reason, is because you should do it this way:

$xml = simplexml_load_file($this->filename, 'SimpleXMLElement', LIBXML_NOCDATA);

This converts CDATA to String in the returning object.
emmanuel 17-Feb-2010 10:21
dynamic sql in php using xml:

test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<sql>
    <statement>
        SELECT * FROM USERS
        <call criteria="byId">WHERE id = %d</call>
        <call criteria="byUsername">WHERE username = "%s"</call>;
    </statement>
</sql>

index.php:
<?php
function callMe($param) {
    $search = array('byUsername' => 'dynsql');

    if (isset($search[$param[1]])) {
        return sprintf($param[2], $search[$param[1]]);
    }

    return "";
}

$xml = simplexml_load_file("test.xml");
$string = $xml->statement->asXML();
$string = preg_replace_callback('/<call criteria="(\w+)">(.*?)<\/call>/', 'callMe', $string);
$node = simplexml_load_string($string);
echo $node;
?>

obviously, this example can be improved [in your own code.]
mahmutta at gmail dot com 20-Jan-2010 12:58
while using simple xml and get double or float int value from xml object for using math operations (+ * - / ) some errors happens on the operation, this is because of simple xml returns everythings to objects.
exmple;

<?php

$name = "somestring";
$size = 11.45;
$xml = '
<xml>
 <name>somestring</name>
 <size>11.45</size>
</xml>';

$xmlget = simplexml_load_string($xml)

echo $xml->size*2;    // 20  its false
// ($xml->size is an object (int)11 and  (45) )

// this is true
echo $size*2;            // 22.90
echo (float)$size*2;   // 22.90
?>
mail at kleineedv dot de 28-Apr-2009 12:37
I had a problem with simplexml reading nodes from an xml file. It always return an SimpleXML-Object but not the text inside the node.

Example:
<?xml version="1.0" encoding="UTF-8"?>
<Test>
    <Id>123</Id>
</Test>

Reading this xml into a variable called $xml and then doing the following
<?php
$myId = $xml->Id;
?>
Did not return 123 in $myId, but instead I got a SimpleXMLElement Object.

The solution is simple, when you know it. Use explicit string conversion.
<?php
$myId = (string)$xml->Id;
?>
oscargodson at gmail dot com 25-Jan-2009 03:05
To add to what others have said, you can't directly put a $_GET or $_POST value into a variable then into an attribute using SimpleXML. You must first convert it to an integer.

This will NOT work

<?php
      $page_id = $_GET['id'];
      echo $xml->page[$page_id]
?>

You will get something like:
Notice: Trying to get property of non-object in /Applications/MAMP/htdocs/mysite/index.php on line 10

However, this WILL work and is much simpler then using (string) or other methods.
<?php
   $page_id = intval($_GET['id']);
   echo $xml->page[$page_id]
?>
QLeap 18-Nov-2008 02:27
Storing SimpleXMLElement values in $_SESSION does not work. Saving the results as an object or individual elements of the object will result in the dreaded "Warning: session_start() [function.session-start]: Node no longer exists" error.

For example, this does not work:

    $xml  = new SimpleXMLElement($page);
    $country  = $xml->Response->Placemark->AddressDetails->Country->CountryNameCode;
    $_SESSION['country'] = $country;

This will work:

    $_SESSION['country'] = (string) $country;
aalaap at gmail dot com 30-Jun-2008 06:58
Here are two quick and dirty functions that use SimpleXML to detect if a feed xml is RSS or ATOM:

<?php
function is_rss($feedxml) {
    @$feed = new SimpleXMLElement($feedxml);

    if ($feed->channel->item) {
        return true;
    } else {
        return false;
    }
}

function is_atom($feedxml) {
    @$feed = new SimpleXMLElement($feedxml);

    if ($feed->entry) {
        return true;
    } else {
        return false;
    }
}
?>

The functions take in the full text feed (retrieved via cURL, for example) and return a true or a false based on the result.


はじめに

SimpleXML拡張モジュールは、 XMLをオブジェクトにとても簡単かつ容易に変換するための機能を 提供します。変換後のオブジェクトでは、 通常のプロパティセレクタや配列反復子を用いて処理を行うことが 可能です。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

この拡張モジュールはデフォルトで有効になっています。無効にしたい場合は、次のオプションを指定してコンパイルします。 --disable-simplexml

User Contributed Notes

Rapitharian at hotmail dot com 24-Apr-2019 08:39
To install on CentOS and Redhat, run: sudo yum -y install php-xml
ottakar at freezed dot me 19-Dec-2017 09:31
This XML module is not provided on a default php (v7) install on Debian GNU/Linux stretch (9.3)
Add it with: sudo apt-get install php-xml
shashank at shankee dot com 31-May-2017 09:44
Installing simpleXml using composer:

"composer require ext-simplexml"

The extension is enabled by default in most distros. You can check the list of php modules using:

"php -m"
morel dot josh at hotmail dot com 17-Dec-2016 12:09
For Linux Ubuntu using PHP 7:
sudo apt-get install php7.0-xml


例

目次

  • 基本的な SimpleXML の使用法
  • XML エラーの対応

User Contributed Notes

Juan Herrera 19-Dec-2009 12:49
When using simplexml to access a element the returned object may be a SimpleXMLElement instead of a string.

Example:

<?php
$string = <<<XML
<?xml version='1.0'?>
<document>
    <cmd>login</cmd>
    <login>Richard</login>
</document>
XML;

$xml = simplexml_load_string($string);
print_r($xml);
$login = $xml->login;
print_r($login);
$login = (string) $xml->login;
print_r($login);
?>

Expected result:
----------------
SimpleXMLElement Object
(
    [cmd] => login
    [login] => Richard
)
Richard
Richard

Actual result:
--------------
SimpleXMLElement Object
(
    [cmd] => login
    [login] => Richard
)
SimpleXMLElement Object
(
    [0] => Richard
)
Richard

But this is an intended behavior. See http://bugs.php.net/bug.php?id=29500
info at accountr dot eu 05-May-2009 08:35
Instead of using  <?php eval($code) ?>

you can use this method,

<?php

$node = "node";

$XML = simplexml_load_file($file);

$text = (string)$XML->nodes->{$node}; // works
// or
$text2 = (string)$XML->{$node}->child; // also works fine

?>

I think it is much more easier instead of eval().
Kari P. 15-Aug-2008 02:17
To take care of proper error checking, one must use try-catch blocks:

<?php
try {
  $sxe = new SimpleXMLElement($xmlstring);
} catch (Exception $e) {
  echo "bad xml";
}
?>

To get rid of warnings, use @ in front of new:

<?php
try {
  $sxe = @new SimpleXMLElement($xmlstring);
} catch (Exception $e) {
  echo "bad xml";
}
?>
mike at mike-griffiths dot co dot uk 18-Apr-2008 09:11
It is important that you select the correct method of loading the XML in depending on the format of your XML file.

If you use the wrong function to load it in you will get some strange errors.


基本的な SimpleXML の使用法

このリファレンスの多くの例では XML 文字列が必要です。それぞれの例で この文字列をくり返す代わりに、あるファイルにこの文字列を保存して、 例ごとに読みこむことにします。この読みこまれるファイルは、以下の例 に関するセクションで使います。 もしくは、XMLドキュメントを作成し、 simplexml_load_file() により読みこむことも 可能です。

例1 XML 文字列を設定するインクルードファイル example.php

<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El Act&#211;r</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
</plot>
<great-lines>
<line>PHP solves all my web problems</line>
</great-lines>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;
?>

SimpleXML の容易さが最も明確に現われるのは、 簡単な XML ドキュメントから文字列または数字を展開する時です。

例2 <plot> を取得する

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie[0]->plot;
?>

上の例の出力は以下となります。

   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.

XML ドキュメント内の要素のうち、PHP の命名規約で許可されていない文字 (たとえばハイフンなど) を含む名前のものにアクセスするには、 要素名を括弧とアポストロフィで囲みます。

例3 <line> を取得する

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

echo $movies->movie->{'great-lines'}->line;
?>

上の例の出力は以下となります。

PHP solves all my web problems

例4 SimpleXML でユニークでない要素にアクセスする

単一の親要素の子要素としてある要素のインスタンスが複数存在する時、 通常の反復処理を適用することができます。

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

/* 個々の <character> ノードに対して、<name> を分割して表示します */
foreach ($movies->movie->characters->character as $character) {
echo $character->name, ' played by ', $character->actor, PHP_EOL;
}

?>

上の例の出力は以下となります。

Ms. Coder played by Onlivia Actora
Mr. Coder played by El ActOr

注意:

プロパティ (先ほどの例の $movies->movie) は配列ではありません。反復処理 と 配列形式でのアクセス ができるオブジェクトです。

例5 属性を使用する

ここまでは、要素の名前と値を読む方法のみを扱って来ました。 SimpleXML は要素の属性にアクセスすることも可能です。 要素の属性にアクセスする方法は、配列 の要素に アクセスするのと全く同じです。

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

/* 最初の映画の <rating> ノードにアクセスします。
* また、その評価も出力します。*/
foreach ($movies->movie[0]->rating as $rating) {
switch((string) $rating['type']) { // 要素のインデックスとして、属性を取得します
case 'thumbs':
echo $rating, ' thumbs up';
break;
case 'stars':
echo $rating, ' stars';
break;
}
}
?>

上の例の出力は以下となります。

7 thumbs up5 stars

例6 要素および属性をテキストと比較する

要素または属性を文字列と比較する、もしくは、文字列を引数とする関数に 渡すには、(string) により文字列にキャストする 必要があります。さもないと、PHP はこの要素をオブジェクトとして扱います。

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

if ((string) $movies->movie->title == 'PHP: Behind the Parser') {
print 'My favorite movie.';
}

echo htmlentities((string) $movies->movie->title);
?>

上の例の出力は以下となります。

My favorite movie.PHP: Behind the Parser

例7 ふたつの要素の比較

たとえ同一の要素を指していたとしても 2 つの SimpleXMLElements は異なるものと見なされます。

<?php
include 'example.php';

$movies1 = new SimpleXMLElement($xmlstr);
$movies2 = new SimpleXMLElement($xmlstr);
var_dump($movies1 == $movies2);
?>

上の例の出力は以下となります。

bool(false)

例8 XPath の使用

SimpleXML は、XPath を標準でサポートしています。 <character> 要素をすべて見つけるには、 以下のようにします。

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

foreach ($movies->xpath('//character') as $character) {
echo $character->name, ' played by ', $character->actor, PHP_EOL;
}
?>

'//' はワイルドカードとして動作します。絶対パスを指定するには、 スラッシュを一つだけにします。

上の例の出力は以下となります。

Ms. Coder played by Onlivia Actora
Mr. Coder played by El ActOr

例9 値を設定する

SimpleXMLの中のデータは、定数とすることができません。 オブジェクトは、その全ての要素について変更が可能です。

<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);

$movies->movie[0]->characters->character[0]->name = 'Miss Coder';

echo $movies->asXML();
?>

上の例の出力は以下となります。

<?xml version="1.0" standalone="yes"?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Miss Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#xD3;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
</movies>

例10 要素と属性を追加する

SimpleXML を使用して簡単に子要素および属性を追加することができます。

<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);

$character = $movies->movie[0]->characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movies->movie[0]->addChild('rating', 'PG');
$rating->addAttribute('type', 'mpaa');

echo $movies->asXML();
?>

上の例の出力は以下となります。

<?xml version="1.0" standalone="yes"?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#xD3;r</actor>
   </character>
  <character><name>Mr. Parser</name><actor>John Doe</actor></character></characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 <rating type="mpaa">PG</rating></movie>
</movies>

例11 DOM との相互運用性

PHP は、SimpleXML 形式と DOM 形式の間で XML ノードを変換する機構を有しています。 この例では、DOM 要素を SimpleXML に変換することができます。

<?php
$dom = new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Error while parsing the document';
exit;
}

$books = simplexml_import_dom($dom);

echo $books->book[0]->title;
?>

上の例の出力は以下となります。

blah

User Contributed Notes

Josef 01-Sep-2021 06:54
How to find out if a Node exists:

<?xml version='1.0' standalone='yes'?>
<book>
  <author>Josef</author>
  <isbn></isbn>
</book>

empty($xml->isbn) will be true
isset($xml->isbn) will be true

empty($xml->title) will be true
isset($xml->title) will be false
Anonymous 22-Aug-2017 12:35
If your xml string contains booleans encoded with "0" and "1", you will run into problems when you cast the element directly to bool:

$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<values>
    <truevalue>1</truevalue>
    <falsevalue>0</falsevalue>
</values>
XML;
$values = new SimpleXMLElement($xmlstr);
$truevalue = (bool)$values->truevalue; // true
$falsevalue = (bool)$values->falsevalue; // also true!!!

Instead you need to cast to string or int first:

$truevalue = (bool)(int)$values->truevalue; // true
$falsevalue = (bool)(int)$values->falsevalue; // false
rowan dot collins at gmail dot com 04-Jun-2015 06:58
There is a common "trick" often proposed to convert a SimpleXML object to an array, by running it through json_encode() and then json_decode(). I'd like to explain why this is a bad idea.

Most simply, because the whole point of SimpleXML is to be easier to use and more powerful than a plain array. For instance, you can write <?php $foo->bar->baz['bing'] ?> and it means the same thing as <?php $foo->bar[0]->baz[0]['bing'] ?>, regardless of how many bar or baz elements there are in the XML; and if you write <?php (string)$foo->bar[0]->baz[0] ?> you get all the string content of that node - including CDATA sections - regardless of whether it also has child elements or attributes. You also have access to namespace information, the ability to make simple edits to the XML, and even the ability to "import" into a DOM object, for much more powerful manipulation. All of this is lost by turning the object into an array rather than reading understanding the examples on this page.

Additionally, because it is not designed for this purpose, the conversion to JSON and back will actually lose information in some situations. For instance, any elements or attributes in a namespace will simply be discarded, and any text content will be discarded if an element also has children or attributes. Sometimes, this won't matter, but if you get in the habit of converting everything to arrays, it's going to sting you eventually.

Of course, you could write a smarter conversion, which didn't have these limitations, but at that point, you are getting no value out of SimpleXML at all, and should just use the lower level XML Parser functions, or the XMLReader class, to create your structure. You still won't have the extra convenience functionality of SimpleXML, but that's your loss.
jishcem at gmail dot com 12-Mar-2013 07:31
For me it was easier to use arrays than objects,

So, I used this code,

$xml = simplexml_load_file('xml_file.xml');

$json_string = json_encode($xml);

$result_array = json_decode($json_string, TRUE);

Hope it would help someone
gkokmdam at zonnet dot nl 23-Feb-2011 01:54
A quick tip on xpath queries and default namespaces. It looks like the XML-system behind SimpleXML has the same workings as I believe the XML-system .NET uses: when one needs to address something in the default namespace, one will have to declare the namespace using registerXPathNamespace and then use its prefix to address the otherwise in the default namespace living element.

<?php
$string = <<<XML
<?xml version='1.0'?>
<document xmlns="http://www.w3.org/2005/Atom">
 <title>Forty What?</title>
 <from>Joe</from>
 <to>Jane</to>
 <body>
  I know that's the answer -- but what's the question?
 </body>
</document>
XML;

$xml = simplexml_load_string($string);
$xml->registerXPathNamespace("def", "http://www.w3.org/2005/Atom");

$nodes = $xml->xpath("//def:document/def:title");

?>
kdos 31-Jan-2011 05:32
Using stuff like: is_object($xml->module->admin) to check if there actually is a node called "admin", doesn't seem to work as expected, since simplexml always returns an object- in that case an empty one  - even if a particular node does not exist.
For me good old empty() function seems to work just fine in such cases.

Cheers
Max K. 20-Jun-2010 02:38
From the README file:

SimpleXML is meant to be an easy way to access XML data.

SimpleXML objects follow four basic rules:

1) properties denote element iterators
2) numeric indices denote elements
3) non numeric indices denote attributes
4) string conversion allows to access TEXT data

When iterating properties then the extension always iterates over
all nodes with that element name. Thus method children() must be
called to iterate over subnodes. But also doing the following:
foreach ($obj->node_name as $elem) {
  // do something with $elem
}
always results in iteration of 'node_name' elements. So no further
check is needed to distinguish the number of nodes of that type.

When an elements TEXT data is being accessed through a property
then the result does not include the TEXT data of subelements.

Known issues
============

Due to engine problems it is currently not possible to access
a subelement by index 0: $object->property[0].
ie dot raymond at gmail dot com 01-Apr-2010 03:07
If you need to output valid xml in your response, don't forget to set your header content type to xml in addition to echoing out the result of asXML():

<?php

$xml=simplexml_load_file('...');
...
...xml stuff
...

//output xml in your response:
header('Content-Type: text/xml');
echo $xml->asXML();
?>
php at keith tyler dot com 23-Dec-2009 12:57
[Editor's Note: The SimpleXMLIterator class, however, does implement these methods.]

While SimpleXMLElement claims to be iterable, it does not seem to implement the standard Iterator interface functions like ::next and ::reset properly. Therefore while foreach() works, functions like next(), current(), or each() don't seem to work as you would expect -- the pointer never seems to move or keeps getting reset.
radams at circlepix com 24-Apr-2009 10:52
To test whether an element exists:

<?php

    $xml = <<<EOT
<?xml version='1.0' standalone='yes'?>
<root>
    <test1></test1>
    <test2 />
    <test4> </test4>
</root>
EOT;

    $xmlDoc = new SimpleXMLElement($xml);

echo "Test1: \n";
var_dump($xmlDoc->test1);
echo "\n(" . (bool)$xmlDoc->test1 . ")";
echo "\n\n";

echo "Test2: \n";
var_dump($xmlDoc->test2);
echo "\n(" . (bool)$xmlDoc->test2 . ")";
echo "\n\n";

echo "Test3: \n";
var_dump($xmlDoc->test3);
echo "\n(" . (bool)$xmlDoc->test3 . ")";
echo "\n\n";

echo "Test4: \n";
var_dump($xmlDoc->test4);
echo "\n(" . (bool)$xmlDoc->test4 . ")";
echo "\n\n";

?>

The var_dumps for test1, test2, and test3 are identical, but the (bool) test gives a '1' for test1 and test2, and a '' for test3.


XML エラーの対応

ドキュメント読み込み時の XML エラーに対処するのは非常にシンプルな作業です。 libxml の機能を使うと、 ドキュメント読み込み時のすべての XML エラーを抑制して後からそれを処理することができます。

libxml_get_errors() が返す libXMLError オブジェクトには、エラーについての message や line、 column (場所) といったプロパティが含まれます。

例1 壊れた XML 文字列の読み込み

<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
if ($sxe === false) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>

上の例の出力は以下となります。

Failed loading XML
    Blank needed here
    parsing XML declaration: '?>' expected
    Opening and ending tag mismatch: xml line 1 and broken
    Premature end of data in tag broken line 1

参考

  • libxml_use_internal_errors()
  • libxml_get_errors()
  • LibXMLError

User Contributed Notes

1337 at netapp dot com 04-Sep-2015 02:21
If you need to process the content of your broken XML-doc you might find this interesting. It has blown past a few simple corruptions for me.
http://php.net/manual/en/class.domdocument.php#domdocument.props.recover
tuxedobob 11-Sep-2014 09:29
Now that the /e modifier is considered deprecated in preg_replace, you can use a negative lookahead to replace unescaped ampersands with &amp; without throwing warnings:

$str = preg_replace('/&(?!;{6})/', '&amp;', $str);

You probably should have been doing this before /e was deprecated, actually.
openbip at gmail dot com 25-Feb-2010 08:20
Note that "if (! $sxe) {" may give you a false-negative if the XML document was empty (e.g. "<root />").  In that case, $sxe will be:

object(SimpleXMLElement)#1 (0) {
}

which will evaluate to false, even though nothing technically went wrong.

Consider instead: "if ($sxe === false) {"
Jacob Tabak 15-Feb-2010 01:17
If you are trying to load an XML string with some escaped and some unescaped ampersands, you can pre-parse the string to ecsape the unescaped ampersands without modifying the already escaped ones:
<?php
$s = preg_replace('/&[^; ]{0,6}.?/e', "((substr('\\0',-1) == ';') ? '\\0' : '&amp;'.substr('\\0',1))", $s);
?>


SimpleXMLElement クラス

(PHP 5, PHP 7, PHP 8)

はじめに

XML ドキュメントの要素をあらわします。

クラス概要

class SimpleXMLElement implements Stringable, Countable, RecursiveIterator {
/* メソッド */
public __construct(
string $data,
int $options = 0,
bool $dataIsURL = false,
string $namespaceOrPrefix = "",
bool $isPrefix = false
)
public addAttribute(string $qualifiedName, string $value, ?string $namespace = null): void
public addChild(string $qualifiedName, ?string $value = null, ?string $namespace = null): ?SimpleXMLElement
public asXML(?string $filename = null): string|bool
public attributes(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement
public children(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement
public count(): int
public current(): SimpleXMLElement
public getDocNamespaces(bool $recursive = false, bool $fromRoot = true): array|false
public getName(): string
public getNamespaces(bool $recursive = false): array
public getChildren(): ?SimpleXMLElement
public hasChildren(): bool
public key(): string
public next(): void
public registerXPathNamespace(string $prefix, string $namespace): bool
public rewind(): void
public __toString(): string
public valid(): bool
public xpath(string $expression): array|null|false
}

変更履歴

バージョン | 説明
8.0.0 | SimpleXMLElement は、 Stringable, Countable, RecursiveIterator を新たに実装しました。

目次

  • SimpleXMLElement::addAttribute — SimpleXML 要素に属性を追加する
  • SimpleXMLElement::addChild — XML ノードに子要素を追加する
  • SimpleXMLElement::asXML — SimpleXML 要素に基づき整形式の XML 文字列を返す
  • SimpleXMLElement::attributes — 要素の属性を定義する
  • SimpleXMLElement::children — 指定したノードの子ノードを見付ける
  • SimpleXMLElement::__construct — 新しい SimpleXMLElement オブジェクトを作成する
  • SimpleXMLElement::count — 子要素を数える
  • SimpleXMLElement::current — 現在の要素を返す
  • SimpleXMLElement::getDocNamespaces — ドキュメントで宣言されている名前空間を返す
  • SimpleXMLElement::getName — XML 要素の名前を取得する
  • SimpleXMLElement::getNamespaces — ドキュメントで使用している名前空間を返す
  • SimpleXMLElement::getChildren — 現在の要素の子要素を返す
  • SimpleXMLElement::hasChildren — 現在の要素が子要素を持つかどうかを調べる
  • SimpleXMLElement::key — 現在のキーを返す
  • SimpleXMLElement::next — 次の要素に移動する
  • SimpleXMLElement::registerXPathNamespace — 次の XPath クエリ用の prefix/ns コンテキストを作成する
  • SimpleXMLElement::rewind — 最初の要素に巻き戻す
  • SimpleXMLElement::saveXML — SimpleXMLElement::asXML のエイリアス
  • SimpleXMLElement::__toString — 文字列で要素の内容を返す
  • SimpleXMLElement::valid — 現在の要素が有効かどうかを調べる
  • SimpleXMLElement::xpath — XML データに Xpath クエリを実行する

User Contributed Notes

ohcc at 163 dot com 12-Jun-2023 03:28
You can remove SimpleXMLElement nodes using php's unset() language construct.

<?php
    $xml = <<<'EOT'
<users>
    <user>
        <name>orange</name>
        <sex>male</sex>
        <homepage>wuxiancheng.cn</homepage>
    </user>
    <user>
        <name>tangerine</name>
        <sex>male</sex>
        <homepage>51-n.com</homepage>
    </user>
</users>
EOT;
    $sxe = new SimpleXMLElement($xml);
    // This will remove the first user node
    unset($sxe->user[0]);
    // This will remove all user nodes
    unset($sxe->user);
    echo $sxe->asXML();
?>
Patanjali 15-Oct-2020 02:20
Further to rmirabelle's comment, to compare two SimpleXML elements, do the comparison between the objects returned by the dom_import_simplexml function, as per:

<?php
if(dom_import_simplexml($simplexml_element_1)===dom_import_simplexml($simplexml_element_2)){
  ...
 }
?>

You must ensure that both are SimpleXML elements before conversion to DOM objects.
guilhermeasn at yahoo dot com dot br 15-Jan-2020 08:09
Class with a method to transform array or object to XML:

class MakeXML {

    public static function array_obj_to_xml($data, \SimpleXMLElement &$xmlObj) {
        foreach((array) $data as $key => $value) {
            if(is_numeric($key)) {
                $key = "n" . $key;
            }
            if(is_array($value) or is_object($value)) {
                $subnode = $xmlObj->addChild($key);
                self::array_obj_to_xml($value, $subnode);
            } else {
                $xmlObj->addChild($key, htmlspecialchars($value));
            }
        }
    }

}

Example:

$object = new \stdClass();
$object->example = "Try this class";

$objxml = new \SimpleXMLElement('<API/>');
MakeXML::array_obj_to_xml($objxml, $objxml);
echo $objxml->asXML();
Budu 13-May-2018 07:17
public function crearXml(){
        $pruebaXml = <<<XML
<?xml version="1.0" encoding="UTF-8" ?>
<Root></Root>
XML;
$example = new SimpleXMLElement($pruebaXml); //Crea un nuevo objeto SimpleXMLElement
        $example->addAttribute('id', '1');//Anade un elemento hijo al nodo XML

        while( $nodo = $this->iteraciones->iterate()){
            $nodos = $example->addChild('Nodo');
            $nodos->addAttribute('id',$nodo->getId());
            $acierto = $nodos->addChild('nuevoHijo', $nodo->getX());
        }
        $miFichero = $example->asXML();//Retorna un string XML correcto basado en un elemento SimpleXML
        $miArchivo = fopen("xml/example.xml", "w+");//Abre un fichero o un URL
        fwrite($miArchivo, $miFichero);//Escritura archivo
    }
CameronXie 11-Dec-2017 10:48
Map xml to array (with attributes)

<?php declare(strict_types=1);

/**
 * @param SimpleXMLElement $xml
 * @return array
 */
function xmlToArray(SimpleXMLElement $xml): array
{
    $parser = function (SimpleXMLElement $xml, array $collection = []) use (&$parser) {
        $nodes = $xml->children();
        $attributes = $xml->attributes();

        if (0 !== count($attributes)) {
            foreach ($attributes as $attrName => $attrValue) {
                $collection['attributes'][$attrName] = strval($attrValue);
            }
        }

        if (0 === $nodes->count()) {
            $collection['value'] = strval($xml);
            return $collection;
        }

        foreach ($nodes as $nodeName => $nodeValue) {
            if (count($nodeValue->xpath('../' . $nodeName)) < 2) {
                $collection[$nodeName] = $parser($nodeValue);
                continue;
            }

            $collection[$nodeName][] = $parser($nodeValue);
        }

        return $collection;
    };

    return [
        $xml->getName() => $parser($xml)
    ];
}
kurtbr at gmail dot com 31-May-2017 02:58
Here is a helper class to convert a PHP array to XML
You would call it doing the following:

<?php
$xml = new Xml();
$xml-> generateXmlFromArray($array, 'entities', 'entity');
?>

<?php
class Xml
{
    public function getXmlFromArray($value, \SimpleXMLElement &$xmlElement, $entity, $starting = null)
    {

        $handleValue = function($value){
            if(is_string($value)){
                $value = htmlspecialchars($value);
            }
            return $value;
        };
        $addChild = function($name, $value, &$subNode = null)use(&$xmlElement, $handleValue, $entity){
            if(is_array($value)){
                if(!$subNode instanceof \SimpleXMLElement){
                    $currentKey = key($value);
                    $initialValue = null;
                    if(is_numeric($currentKey)){
                        if(!is_array($value[$currentKey])){
                            $initialValue = $value[$currentKey];
                            unset($value[$currentKey]);
                        }
                    }
                    $subNode = $xmlElement->addChild($name, $initialValue);
                }
                $this->getXmlFromArray($handleValue($value), $subNode, $name);
            } else {
                $xmlElement->addChild($name, $handleValue($value));
            }
        };

        if(is_array($value))
        {
            if(is_numeric(key($value))){
                $setSubNodePrimitiveValue = function($value)use(&$xmlElement, $entity, $handleValue){
                    $value = $handleValue($value);
                    $children = $xmlElement->children();
                    $children[] = $value;
                };
                foreach ($value as $item)
                {
                    if(!is_array($item)){
                        $setSubNodePrimitiveValue($item);
                    } else {
                        if($starting === true){
                            $addChild($entity, $item);
                        } else {
                            $addChild($entity, $item, $xmlElement);
                        }
                    }
                }
            } else {
                foreach ($value as $subEntity => $subEntityItem)
                {
                    $addChild($subEntity, $subEntityItem);
                }
            }
        } else {
            $xmlElement->addChild($entity, $handleValue($value));
        }
    }

    /**
     * @param array $array
     * @param string $openingTag
     * @param string $entity
     * @param string $nameSpace
     * @param bool $isPrefixed
     * @return \SimpleXMLElement
     */
    public function generateXmlFromArray(array $array, string $openingTag, string $entity, $nameSpace = '', $isPrefixed = false)
    {
        $xmlString = '<'.$openingTag.'></'.$openingTag.'>';
        $xml = new \SimpleXMLElement($xmlString, LIBXML_NOERROR, false, $nameSpace, $isPrefixed);
        $this->getXmlFromArray($array, $xml, $entity, true);
        return $xml;
    }

    /**
     * @param string $xml
     * @return bool
     */
    public function validateXml(string $xml)
    {
        $dom = new \DOMDocument();
        $dom->loadXML($xml);
        return $dom->validate();
    }

    public function loadXmlPathAsArray(string $xmlPath)
    {
        $xml   = simplexml_load_file($xmlPath);
        $array = json_decode(json_encode($xml), TRUE);
        return (array)$array;
    }

    /**
     * @param string $xmlString
     * @return array
     */
    public function loadXmlStringAsArray(string $xmlString)
    {
        $array = (array) @simplexml_load_string($xmlString);
        if(!$array){
            $array = (array) @json_decode($xmlString, true);
        } else{
            $array = (array)@json_decode(json_encode($array), true);
        }
        return $array;
    }

    /**
     * @param string $xmlString
     * @return \SimpleXMLElement
     */
    public function loadXmlString(string $xmlString)
    {
        return @simplexml_load_string($xmlString);
    }
}
?>
xxxargonxxx at gmail dot com 12-Jan-2017 06:54
See previous two parts to get better understanding of how these tricks works. Example shown here refers to part two. (Sorry, length limitation)

3. Tricks
<?php
        // The real profit is in combination of property and array accesses and unset($someNode->{0}) trick -
        // it allows you to remove whatever node you want:
        unset($rootNode->{'div'}[2]);   // remove node with * mark (text*)

        // Another trick is removing child node using child node object
        $newChildNode = $rootNode->addChild('div','text**');    // Create
        unset($newChildNode->{0});      // Remove, node removed from parent object too!

        echo "--2--\n".$rootNode->asXML();
        /*
        <xml_root>complex node
                <type_one>renewed node 1</type_one>
                <type_two>node 3</type_two>
                <type_one>node 2</type_one>
                <div>text</div>
                <div>text</div>
                <div>text</div>
        </xml_root>
        */
?>
xxxargonxxx at gmail dot com 12-Jan-2017 06:48
How to view, edit and remove elements.
Speaking in terms of CRUD style, there is no methods to read, edit and remove nodes. But it is possible.

2. How child nodes works (understanding)
<?php
        echo "Exercise 2 \n";

        $rootNode = new SimpleXMLElement('<xml_root>complex node</xml_root>');  // Create root node
        $childNode1 = $rootNode->addChild('type_one','node 1');                 // Create child node 1 with name 'type_one'
        $childNode2 = new SimpleXMLElement('<type_one>node 2</type_one>');      // Create child node 2 with name 'type_one'
        $childNode3 = new SimpleXMLElement('<type_two>node 3</type_two>');      // Create child node 3 with name 'type_two' (different!)
        // Now $rootNode has only one children because other child nodes was created separately
        // Lets paste child node to root node
        echo $childNode1;

        $rootNode->{'type_one'} = $childNode2;      // Note that the property name is 'type_one'
        $rootNode->{'type_two'} = $childNode3;      // Note that the property name is 'type_two'
        var_dump($rootNode);
        /*
        object(SimpleXMLElement)#68 (2) {
            ["type_one"]=>
            string(6) "node 2"
            ["type_two"]=>
            string(6) "node 3"
        }
        */
        // We see that "node 1" disappeared, that's because assigning one node to some property of another in not a magic.
        // To be clear, the real calls looks like:
        $rootNode->{'type_one'}[0] = (string) $childNode2;
        $rootNode->{'type_two'}[0] = (string) $childNode3;
        // Explanation:
        // A: (string)
        // It means that you can't assign node itself, only its string representation because assigned node will be casted to string anyway.
        // It also means that tag name of assigned node doesn't matter - its name will be whatever name you specified in {} braces.
        // B: [0]
        // The array access operator ([0]) means that each tag name (type_one and type_two) has its own collection with integer indexes.
        // If you want to add another tag with same name, you should increment index:
        $rootNode->{'type_one'}[1] = $childNode2;
        var_dump($rootNode);
        /*
        object(SimpleXMLElement)#68 (2) {
            ["type_one"]=>
            array(2) {
                [0]=>
                string(6) "node 2"
                [1]=>
                string(6) "node 2"
            }
            ["type_two"]=>
            string(6) "node 3"
        }
        */

        // Note 1. The value of $childNode1 has been changed to "node 1" - that's because the child node, returned from addChild() method
        // is referenced with parent node. If you change its content in one side - it changes in other side too:
        $childNode1->{0} = 'renewed node 1';
        // But it won't happen with $childNode2 - it is single and has no reference with parent node:
        $childNode2->{0} = 'renewed node 2';
        var_dump($rootNode);
        /*
        object(SimpleXMLElement)#68 (2) {
            ["type_one"]=>
            array(2) {
                [0]=>
                string(14) "renewed node 1"
                [1]=>
                string(6) "node 2"
            }
            ["type_two"]=>
            string(6) "node 3"
        }
        */

        // Note 2. When you added child nodes, the parent node's string content is still alive, var_dump doesn't show it,
        // but you can see through echoing XML:
        echo "--1--\n".$rootNode->asXML();
        /*
        <xml_root>complex node <--------- here!
                <type_one>renewed node 1</type_one>
                <type_two>node 3</type_two>
                <type_one>node 2</type_one>
        </xml_root>
        */
        // See 'complex node'? Bad news that you can't change string content anymore, if we try to call `$rootNode->{0} = 'something'` -
        // it overrides all content - both string and child nodes! I don't know how to write to string content only in that case.
        // But still you can read string content and remove entire node as described above.

        // So the following statements gives same result, except $result variable value:
        $someNode = new SimpleXMLElement('<div>text</div>');
        $result = $rootNode->addChild('div','text');                    // $result is SimpleXMLElement
        $result = $rootNode->addChild($someNode->getName(),$someNode);  // $result is SimpleXMLElement
        $result = $rootNode->{'div'}[] = 'text*';                       // $result is string 'text*'
        $result = $rootNode->{$someNode->getName()}[] = $someNode;      // $result is string 'text'
?>
xxxargonxxx at gmail dot com 12-Jan-2017 06:45
How to view, edit and remove elements.
Speaking in terms of CRUD style, there is no methods to read, edit and remove nodes. But it is possible.

1. How to work with single node and its value (basics)
<?php
        echo "Exercise 1 \n";
        // Create
        $someNode = new SimpleXMLElement('<xml_root>simple node</xml_root>');
        // Read
        echo $someNode->{0} ."\n";      // Echoes "simple node"
        echo $someNode ."\n";           // Echoes "simple node", might be used for read case too
        // Edit
        $someNode->{0} = 'new value';
        echo $someNode->{0} ."\n";      // Echoes "new value", value is changed!
        // Remove
        unset($someNode->{0});

        // Don't touch this node anymore otherwise it will throw a warning:
        // "Warning:  SimpleXMLElement::asXML(): Node no longer exists in <...> on line <...>"
        // echo $someNode ."\n";      // Throws the warning

        // Recap: property access to zero property ($someNode->{0}) is the way to read and edit string content of the node AND
        // to remove the node itself
?>
frame at dynamiccreated dot de 14-Jun-2013 01:36
Important note I miss here in the documentation:

SimpleXML supports Array/Iteration-Methods. Therefore it is possible to

add attributes
edit attributes
remove attributes

add nodes
edit nodes
remove nodes

This is the reason why SimpleXML provides only add-methods not deleting- or editing-methods. We also need this methods because SimpleXML acts as a normal class and
new member will not converted to a new node.

Deleting a node seems not to be possible within a foreach-loop. The reason is simple. To do that we need a valid key, but the Iterator only gives us a "understandable feedback" on which node we are working on: the tag name.

So this will not work:

<?php
foreach($doc->seg as $key => $seg)
{
    if((string)$seg['id'] === 'whatever')
    {
        unset($seg); // only clears local copy
        unset($seg[$key]); // wrong index "seg"
    }
}
?>

But this, eg. will work:
<?php
unset($doc->seg[2]);
?>

In case of doubt always do a print_r/var_dump(). It nicely shows the real linked indexes.
Yukull 15-Feb-2013 01:59
xml to object conversion function :
<?php
/**
    @param:
        $xml: SimpleXMLElement
        $force: set to true to always create 'text', 'attribute', and 'children' even if empty
    @return
        object with attributs:
            (string) name: XML tag name
            (string) text: text content of the attribut name
            (array) attributes: array witch keys are attribute key and values are attribute value
            (array) children: array of objects made with xml2obj() on each child
**/
function xml2obj($xml,$force = false){

    $obj = new StdClass();

    $obj->name = $xml->getName();

    $text = trim((string)$xml);
    $attributes = array();
    $children = array();

    foreach($xml->attributes() as $k => $v){
        $attributes[$k]  = (string)$v;
    }

    foreach($xml->children() as $k => $v){
        $children[] = xml2obj($v,$force);
    }

    if($force or $text !== '')
        $obj->text = $text;

    if($force or count($attributes) > 0)
        $obj->attributes = $attributes;

    if($force or count($children) > 0)
        $obj->children = $children;

    return $obj;
}
?>
heaver 31-May-2012 07:33
XML to JSON conversion without '@attributes'
<?php
function XML2JSON($xml) {

        function normalizeSimpleXML($obj, &$result) {
            $data = $obj;
            if (is_object($data)) {
                $data = get_object_vars($data);
            }
            if (is_array($data)) {
                foreach ($data as $key => $value) {
                    $res = null;
                    normalizeSimpleXML($value, $res);
                    if (($key == '@attributes') && ($key)) {
                        $result = $res;
                    } else {
                        $result[$key] = $res;
                    }
                }
            } else {
                $result = $data;
            }
        }
        normalizeSimpleXML(simplexml_load_string($xml), $result);
        return json_encode($result);
    }
?>
demian dot katz at villanova dot edu 29-Mar-2012 05:50
Here is a more namespace-aware version of the earlier function for attaching one SimpleXMLElement to another.  I'm sure it could still be further improved (right now it generates some redundant xmlns definitions), but it seems to be working well enough for my purposes so far.

function SimpleXMLElement_append($parent, $child)
{
    // get all namespaces for document
    $namespaces = $child->getNamespaces(true);

    // check if there is a default namespace for the current node
    $currentNs = $child->getNamespaces();
    $defaultNs = count($currentNs) > 0 ? current($currentNs) : null;
    $prefix = (count($currentNs) > 0) ? current(array_keys($currentNs)) : '';
    $childName = strlen($prefix) > 1
        ? $prefix . ':' . $child->getName() : $child->getName();

    // check if the value is string value / data
    if (trim((string) $child) == '') {
        $element = $parent->addChild($childName, null, $defaultNs);
    } else {
        $element = $parent->addChild(
            $childName, htmlspecialchars((string)$child), $defaultNs
        );
    }

    foreach ($child->attributes() as $attKey => $attValue) {
        $element->addAttribute($attKey, $attValue);
    }
    foreach ($namespaces as $nskey => $nsurl) {
        foreach ($child->attributes($nsurl) as $attKey => $attValue) {
            $element->addAttribute($nskey . ':' . $attKey, $attValue, $nsurl);
        }
    }

    // add children -- try with namespaces first, but default to all children
    // if no namespaced children are found.
    $children = 0;
    foreach ($namespaces as $nskey => $nsurl) {
        foreach ($child->children($nsurl) as $currChild) {
            SimpleXMLElement_append($element, $currChild);
            $children++;
        }
    }
    if ($children == 0) {
        foreach ($child->children() as $currChild) {
            SimpleXMLElement_append($element, $currChild);
        }
    }
}
saganmarketing.com 12-Mar-2012 12:27
Parsing an invalid XML string through SimpleXML causes the script to crash completely (usually) therefore it is best to make sure the XML is valid before parsing with something like this:

// Must be tested with ===, as in if(isXML($xml) === true){}
// Returns the error message on improper XML
function isXML($xml){
    libxml_use_internal_errors(true);

    $doc = new DOMDocument('1.0', 'utf-8');
    $doc->loadXML($xml);

    $errors = libxml_get_errors();

    if(empty($errors)){
        return true;
    }

    $error = $errors[0];
    if($error->level < 3){
        return true;
    }

    $explodedxml = explode("r", $xml);
    $badxml = $explodedxml[($error->line)-1];

    $message = $error->message . ' at line ' . $error->line . '. Bad XML: ' . htmlentities($badxml);
    return $message;
}
Anonymous 14-Nov-2011 12:34
Warning to anyone trying to parse XML with a key name that includes a hyphen ie.)
<subscribe>
    <callback-url>example url</callback-url>
</subscribe>

In order to access the callback-url you will need to do something like the following:
<?php
$xml = simplexml_load_string($input);
$callback = $xml->{"callback-url"};
?>
If you attempt to do it without the curly braces and quotes you will find out that you are returned a 0 instead of what you want.
juanfhj at gmail dot spam dot me dot not dot com 13-Aug-2011 11:01
To access the underlying element as a string, it's necessary to make the cast $x = (string)$my_xml_element.
dans at dansheps dot com 22-Apr-2011 12:06
I created a little function to parse the simple XML into a structure which is easier to iterate(I believe anyways) than the simpleXML node structure.

<?php
function parseSimpleXML($xmldata)
    {
        $childNames = array();
        $children = array();

        if( $xmldata->count() !== 0 )
        {
            foreach( $xmldata->children() AS $child )
            {
                $name = $child->getName();

                if( !isset($childNames[$name]) )
                {
                    $childNames[$name] = 0;
                }

                $childNames[$name]++;
                $children[$name][] = $this->parseSimpleXML($child);
            }
        }

        $returndata = new XMLNode();
        if( $xmldata->attributes()->count() > 0 )
        {
            $returndata->{'@attributes'} = new XMLAttribute();
            foreach( $xmldata->attributes() AS $name => $attrib )
            {
                $returndata->{'@attributes'}->{$name} = (string)$attrib;
            }
        }

        if( count($childNames) > 0 )
        {
            foreach( $childNames AS $name => $count )
            {
                if( $count === 1 )
                {
                    $returndata->{$name} = $children[$name][0];
                }
                else
                {
                    $returndata->{$name} = new XMLMultiNode();
                    $counter = 0;
                    foreach( $children[$name] AS $data )
                    {
                        $returndata->{$name}->{$counter} = $data;
                        $counter++;
                    }
                }
            }
        }
        else
        {
            if( (string)$xmldata !== '' )
            {
                $returndata->{'@innerXML'} = (string)$xmldata;
            }
        }
        return $returndata;
    }
?>
ms dot n at 163 dot com 11-Feb-2011 10:50
Adds a new function for SimpleXMLElement class, in order to output HTML code.

<?php
class CeiXML extends SimpleXMLElement{
public function asHTML(){
$ele=dom_import_simplexml($this);
$dom = new DOMDocument('1.0', 'utf-8');
$element=$dom->importNode($ele,true);
$dom->appendChild($element);
return $dom->saveHTML();
}
}
?>
Pavel Musil pavel dot musil at gmail dot com 10-Feb-2011 03:18
Simple recursive function to append XML object into SimpleXMLElement node:

<?php
// root: parent element - SimpleXMLElement instance
// append: XML object from simplexml_load_string

function xml_join($root, $append) {
    if ($append) {
        if (strlen(trim((string) $append))==0) {
            $xml = $root->addChild($append->getName());
            foreach($append->children() as $child) {
                xml_join($xml, $child);
            }
        } else {
            $xml = $root->addChild($append->getName(), (string) $append);
        }
        foreach($append->attributes() as $n => $v) {
            $xml->addAttribute($n, $v);
        }
    }
}

$xml_append = simplexml_load_string('<data><items><item id="1">value</item></items></data>');
$xml_root = new SimpleXMLElement('<result></result>');

$cxml = $xml_root->addChild('clone');
xml_join($cxml, $xml_append->items->item[0]);

print $xml_root->asXML();
?>

Result:
<?xml version="1.0"?>
<result>
    <clone>
        <item id="1">
            value
        </item>
    </clone>
</result>
rmirabelle 08-Nov-2010 09:42
To further previous comments and drive the point home:

What makes SimpleXMLElement tricky to work with is that it feels and behaves like an object, but is actually a system RESOURCE,  (specifically a libxml resource).

That's why you can't store a SimpleXMLElement to $_SESSION or perform straight comparison operations on node values without first casting them to some type of object.  $_SESSION expects to store 'an object' and comparison operators expect to compare 2 'objects' and SimpleXMLElements are not objects.

When you echo or print a node's value, PHP converts the value (a resource) into a string object for you.  It's a time saver for sure, but can fool you into thinking that your SimpleXMLElement is an object.

Hope this helps clarify
joshduck at gmail dot com 28-Sep-2010 05:00
You should cast elements to a float (or even string) if you plan on using them in addition, multiplication, etc. If you don't then PHP will incorrectly treat the node values as an integer.

<?php
$obj = new SimpleXMLElement('<root>
    <a>1.9</a>
    <b>1.9</b>
</root>');

var_dump($obj->a + $obj->b);
var_dump((float)$obj->a + (float)$obj->b);
var_dump((string)$obj->a + (string)$obj->b);
?>

The first line gives: int(2)
The second and third give the expected result: float(3.8)
francs at seznam dot cz 23-Sep-2010 05:28
Be aware when you trying to cast some attribute to boolean.

(boolean)$xml->attributes()->someAtt;

returns TRUE if attribute is array([0] => 0);

use (boolean)(int) instead.
kweij at lsg dot nl 26-Jul-2010 04:47
I'm using SimpleXML for, ofcourse, it's simplicity, however I did wanted to manipulate the xml and combining one SimpleXMLElement with any other, so I wrote this function to add a SimpleXMLElement-child.

<?php
function SimpleXMLElement_append($key, $value) {
    // check class
    if ((get_class($key) == 'SimpleXMLElement') && (get_class($value) == 'SimpleXMLElement')) {
        // check if the value is string value / data
        if (trim((string) $value) == '') {
            // add element and attributes
            $element = $key->addChild($value->getName());
            foreach ($value->attributes() as $attKey => $attValue) {
                $element->addAttribute($attKey, $attValue);
            }
            // add children
            foreach ($value->children() as $child) {
                SimpleXMLElement_append($element, $child);
            }
        } else {
            // set the value of this item
            $element = $key->addChild($value->getName(), trim((string) $value));
        }
    } else {
        // throw an error
        throw new Exception('Wrong type of input parameters, expected SimpleXMLElement');
    }
}
?>

I'd recommend SimpleXMLElement to extend it's addChild() function with the functionalitity above.
cherubangel at gmail dot com 02-Jul-2010 04:28
Note that changing attributes from within a foreach loop, especially namespaced attributes, can be very tricky.

For example, when trying to change the value of an existing xlink:href attribute:
<?php
foreach($xmlelement -> attributes('xlink', true) as $attribute => $attribvalue){
    $attribvalue[0] = 'value'; // Throws an error
    $attribvalue = 'value'; // Does not change your XML
    $xmlelement -> addAttribute($attribute, 'value', 'http://www.w3.org/1999/xlink'); // Adds an attribute, does not change existing one.
    $xmlelement[$attribute] = 'value'; // Adds an attribute, does not change existing one.
}
?>

Instead, you should access the array returned by the attributes() function directly, like this:
<?php
    $xmlelement -> attributes('xlink', true) -> href = 'value'; // Works!
?>
php at keith tyler dot com 19-Feb-2010 06:23
The root node element of your input XML string is not retrievable as a property.

<?php
$xml="<foo>bar</foo>";
$sxe=new SimpleXMLElement($xml);
print $sxe->foo;
?>

prints nothing. You can only get to the root element via the array index method ($sxe[0]).

Also, you may not have two (or more) root elements -- that is apparently not well-formed XML.

<?php
$xml="<foo/><bar/>";
$sxe=new SimpleXMLElement($xml);
?>

throws an exception. A Q&D is to append an arbitraty root node structure to both ends of the input:

<?php
$xml="<foo/><bar/>";
$sxe=new SimpleXMLElement("<z>".$xml."</z>");
?>

Doing this also solves the above problem of root node property accessibility. (It may not work if your XML string includes a declaration.)
triplepoint at gmail dot com 19-Dec-2009 04:19
It's occasionally useful to add an XML processing instruction to a SimpleXMLElement (treating it as if it were a full document).
<?php
class SimpleXMLElement_Plus extends SimpleXMLElement {

    public function addProcessingInstruction( $name, $value )
    {
        // Create a DomElement from this simpleXML object
        $dom_sxe = dom_import_simplexml($this);

        // Create a handle to the owner doc of this xml
        $dom_parent = $dom_sxe->ownerDocument;

        // Find the topmost element of the domDocument
        $xpath = new DOMXPath($dom_parent);
        $first_element = $xpath->evaluate('/*[1]')->item(0);

        // Add the processing instruction before the topmost element
        $pi = $dom_parent->createProcessingInstruction($name, $value);
        $dom_parent->insertBefore($pi, $first_element);
    }
}
?>

For example, if you had a simpleXMLElement_Plus object made out of the xml fragment:
<xml><content /></xml>

And you needed the output to be:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="xsl/xsl.xsl"?>
<xml><content/></xml>

you could do (using the class above):
<?php
$xml = new SimpleXMLElement_Plus('<xml><content /></xml>');
$xml->addProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="xsl/xsl.xsl"');
echo $xml->asXML();
?>
ivandosreisandrade at gmail dot com 19-Nov-2009 06:55
Hello,

here goes my contribution for those whom are struggling to understand how SimpleXMLElement works.

After some time trying to figure out how this works, I've came up to this small example:

<?php
    $xmlstr = "<?xml version='1.0' ?>\n".
              // optionally you can specify a xml-stylesheet for presenting the results. just uncoment the following line and change the stylesheet name.
              /* "<?xml-stylesheet type='text/xsl' href='xml_style.xsl' ?>\n". */
              "<book></book>";

    // create the SimpleXMLElement object with an empty <book> element
    $xml = new SimpleXMLElement($xmlstr);

    // add some child nodes
    $xml->addChild("title", "Title of my book");
    $xml->addChild("abstract", "My book is about learning to work with SimpleXMLElement");

    // add some more child nodes
    $chapter1 = $xml->addChild("chapter_1");
    // add an attribute to child chapter_1
    $chapter1->addAttribute("chapter_title", "Introduction to my book");

    $chapter2 = $xml->addChild("chapter_2");
    $chapter2->addAttribute("chapter_title", "Development of my book");

    $chapter3 = $xml->addChild("chapter_3");
    $chapter3->addAttribute("chapter_title", "Another chapter of my book");

    $conclusion = $xml->addChild("conclusion", "The ending of my book");

    // insert the header to tell the browser how to read the document
    header("Content-type: text/xml");
    // print the SimpleXMLElement as a XML well-formed string
    echo $xml->asXML();
?>

With this script you can just copy-paste and try to understand how it works.
I hope it can help somebody :)
brett at brettbrewer dot com 27-Oct-2009 04:53
Figuring out how to access the properties of a SimpleXmlElement object was a little tricky for me. In particular, it took a while to discover that I needed to cast my SimpleXmlElement properties to be of type "string" to print them or do comparisons on them. For instance, assuming you already have a string of xml in $xmlstr...

<?php
$sxml= new SimpleXmlElement($xmlstr);

if ((string) $sxml->property== "somevalue") {
    echo (string) $sxml->property;
}
?>
The properties of a SimpleXmlElement object are objects themselves, so you need to put "(string)" before them, which casts their values to a string instead of an object. I assume if you were doing a numeric comparison you'd want to cast to an (int) or something numeric instead.


SimpleXML 要素に属性を追加する

  • ≪ SimpleXMLElement
  • SimpleXMLElement::addChild ≫
  • PHP Manual
  • SimpleXMLElement
  • SimpleXML 要素に属性を追加する

SimpleXMLElement::addAttribute

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

SimpleXMLElement::addAttribute — SimpleXML 要素に属性を追加する

説明

public SimpleXMLElement::addAttribute(string $qualifiedName, string $value, ?string $namespace = null): void

SimpleXML 要素に属性を追加します。

パラメータ

qualifiedName

追加する属性の名前。

value

属性の値。

namespace

指定されている場合は、その属性が所属する名前空間。

戻り値

値を返しません。

例

注意:

この例では example.php をインクルードしていますが、これは 基本的な使用法 の最初のサンプルにある XML 文字列を参照しています。

例1 SimpleXML 要素への属性と子要素の追加

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');

$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');

$characters = $movie->addChild('characters');
$character = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');

echo $sxe->asXML();

?>

上の例の出力は、 たとえば以下のようになります。

<?xml version="1.0" standalone="yes"?>
<movies type="documentary">
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#xD3;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
 <movie>
  <title>PHP2: More Parser Stories</title>
  <plot>This is all about the people who make it work.</plot>
  <characters>
   <character>
    <name>Mr. Parser</name>
    <actor>John Doe</actor>
   </character>
  </characters>
  <rating type="stars">5</rating>
 </movie>
</movies>

参考

  • SimpleXMLElement::addChild() - XML ノードに子要素を追加する
  • 基本的な SimpleXML の使用法

User Contributed Notes

caffeinatedbits 09-Dec-2022 10:50
Just found another gem. Need to remove an attribute? That's simple too!

<?php

$xml = <<<EOF
<?xml version="1.0" encoding="utf-8" ?>
<Animals>
    <Dog breed="chihuahua"/>
</Animals>
EOF;

$animals = new SimpleXMLElement($xml);

echo $animals->Dog->asXML();
// <Dog breed="chihuahua"/>

unset($animals->Dog['breed']);

echo $animals->Dog->asXML();
// <Dog/>

?>
caffeinatedbits 09-Dec-2022 10:26
I needed a way to update an attribute, but I could not find any documented way to do this.

After much experimentation, here's my findings of what works - the answer was so simple it took me 8 tries to figure it out :-)

Given the following example:

<?php

$xml = <<<EOF
<?xml version="1.0" encoding="utf-8" ?>
<Animals>
    <Dog/>
</Animals>
EOF;

$animals = new SimpleXMLElement($xml);

echo $animals->Dog->asXML();
// <Dog/>

?>

Test #6 - maybe directly modifying the attributes() Iterator like an array will secretly call __set() magic method?

TL;DR: yep

<?php

...

$animals->Dog->addAttribute('breed', "chihuahua");

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

$dogAttrs = $animals->Dog->attributes();
// object(SimpleXMLElement)#4 (1) {
// ["@attributes"]=>
//   array(1) {
//     ["breed"]=>
//     string(9) "chihuahua"
//   }
// }

$dogAttrs['breed'] = "poodle";
// works!

echo $animals->Dog->asXML();
// <Dog breed="poodle">

?>

Test #7 - maybe I don't even need to call attributes() at all?

TL;DR: I sure don't!

<?php

...

$animals->Dog->addAttribute('breed', "chihuahua");

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

$animals->Dog['breed'] = "poodle";
// works!

echo $animals->Dog->asXML();
// <Dog breed="poodle">

?>

Test #8 - Maybe I never needed to call addAttribute() in the first place?

TL;DR: nope, I can skip that altogether!

<?php

...

$animals->Dog['breed'] = "chihuahua";
// works!

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

$animals->Dog['breed'] = "poodle";
// works!

echo $animals->Dog->asXML();
// <Dog breed="poodle">

?>

FYI: I also submitted another separate note with what does NOT work just in case you, like me, are curious and tempted to try another way.
caffeinatedbits 09-Dec-2022 10:25
I needed a way to update an attribute, but I could not find any documented way to do this.

TL;DR: It's not only possible, but unbelievably simple. See the other note I submitted for what actually works (sorry, I could not fit it all in a single note due to the 4095 character limit).

After much experimentation, here's my findings of what does NOT work; hopefully, it saves you the time and frustration it cost me.

Given the following example:

<?php

$xml = <<<EOF
<?xml version="1.0" encoding="utf-8" ?>
<Animals>
    <Dog/>
</Animals>
EOF;

$animals = new SimpleXMLElement($xml);

echo $animals->Dog->asXML();
// <Dog/>

?>

Test #1 - attempt to call addAttribute() twice

TL;DR: PHP Warning: SimpleXMLElement::addAttribute(): Attribute already exists

<?php

...

$animals->Dog->addAttribute('breed', "chihuahua");

echo $animals->Dog->asXML();
// <Dog breed="chihuahua"/>

$animals->Dog->addAttribute('breed', "poodle");
// PHP Warning: SimpleXMLElement::addAttribute(): Attribute already exists

echo $animals->Dog->asXML();
// <Dog breed="chihuahua"/>

?>

Test #2 - attempt to iterate attributes() (an Iterator) by reference

TL;DR: An iterator cannot be used with foreach by reference

<?php

...

$animals->Dog->addAttribute('breed', "chihuahua");

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

try {
    foreach ($animals->Dog->attributes() as $attr => &$value) {
        if ("breed" === $attr) {
            $value = "poodle";
        }
    }
} catch (Throwable $e) {
    echo $e->getMessage();
    // An iterator cannot be used with foreach by reference
}

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

?>

Test #3 - attempt to re-parse child element and then call addAttribute() on the newly parsed element, as suggested in a note I found here

TL;DR: PHP Warning: SimpleXMLElement::addAttribute(): Attribute already exists

<?php

...

$animals->Dog->addAttribute('breed', "chihuahua");

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

$animals->Dog = new SimpleXMLElement($animals->asXML());

$animals->Dog->addAttribute('breed', "poodle");
// PHP Warning: SimpleXMLElement::addAttribute(): Attribute already exists

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

?>

Test #4 - attempt to modify @attributes array element

TL;DR: PHP Notice:  Indirect modification of overloaded element of SimpleXMLElement has no effect

<?php

...

$animals->Dog->addAttribute('breed', "chihuahua");

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

$dogAttrs = $animals->Dog->attributes();
// object(SimpleXMLElement)#4 (1) {
// ["@attributes"]=>
//   array(1) {
//     ["breed"]=>
//     string(9) "chihuahua"
//   }
// }

$dogAttrs['@attributes']['breed'] = "poodle";
// PHP Notice:  Indirect modification of overloaded element of SimpleXMLElement has no effect

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

?>

Test #5 - cast attributes() to array and set value of 'breed' element

TL;DR: does not update value in original object

<?php

...

$animals->Dog->addAttribute('breed', "chihuahua");

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

$dogAttrs = (array) $animals->Dog->attributes();
// array(1) {
//     ["@attributes"]=>
//   array(1) {
//         ["breed"]=>
//     string(9) "chihuahua"
//   }
// }

$dogAttrs['@attributes']['breed'] = "poodle";

echo $animals->Dog->asXML();
// <Dog breed="chihuahua">

?>
Patanjali 10-Apr-2016 10:37
You cannot use this to update an existing attribute's value.

Instead, get a DOM version of the SimpleXMLElement and use setAttribute, as per:

$XML = '<element a="aa">Text</element>';
$snode = new simple_xml_element($XML);

$dnode = dom_import_simplexml($snode);
$dnode->setAttribute('a', 'bb');

Resulting XML for the node is:
<element a="bb">Text</element>
p.servus 18-Nov-2011 05:42
If you need an Namespace, you must write a Prefix of the Namespace + the Name of the Attribute ("prefix:name") as the first parameter AND the uri as the third one. (I don't know why?!)

Example code:
<?php
$xml = new SimpleXMLElement("<packagedElement></packagedElement>");
$xml->addAttribute("xmi:type", "uml:Class", "http://schema.omg.org/spec/XMI/2.1");
echo $xml->asXml();
?>

Output:
<packagedElement xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmi:type="uml:Class"></packagedElement>
sarlak 07-May-2011 07:49
You can access a node child with his name this way :

<?php
$root = new SimpleXMLElement($filePath);
echo $root->nodeName->attributes;

// It works recursivly so this will work too
echo $root->nodeName->subNodeName->attributes();
?>

But if you want to ADD an attribute to a children you MUST use the children() method to access and modfiy it or it will modify the parent's attributes.

<?php
// Add a subnode
$element->nodeName->addChild('subNodeName', "whatever you want");

// Get the pos in the childrens of the parent node
$lastNodePos = $element->nodeName->count()-1;

// Get the parents node childrens
$nodeChildrens = $element->nodeName->children();

// Add an attribute to the last created
$nodeChildrens[$lastNodePos]->addAttribute('attributeName', "The attribute value);
?>
booleer at yahoo dot it 16-Dec-2010 09:44
If the attribute already exists, addAttribute does nothing.

example:
<?php
$xml_string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <item id="foo">
<root>
XML;

$xml = simplexml_load_string($xml_string);
$xml->item->addAttribute('id', 'bar');
echo $xml->asXML();
?>

The above examples will output:
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <item id="foo">
<root>


XML ノードに子要素を追加する

  • ≪ SimpleXMLElement::addAttribute
  • SimpleXMLElement::asXML ≫
  • PHP Manual
  • SimpleXMLElement
  • XML ノードに子要素を追加する

SimpleXMLElement::addChild

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

SimpleXMLElement::addChild — XML ノードに子要素を追加する

説明

public SimpleXMLElement::addChild(string $qualifiedName, ?string $value = null, ?string $namespace = null): ?SimpleXMLElement

ノードに子要素を追加し、子要素の SimpleXMLElement を返します。

パラメータ

qualifiedName

追加する子要素の名前。

value

指定されている場合は、子要素の値。

namespace

指定されている場合は、その子要素が所属する名前空間。

戻り値

addChild メソッドは、 XML ノードに追加した子要素を表す SimpleXMLElement オブジェクトを返します。 失敗時に null を返します。

例

注意:

この例では example.php をインクルードしていますが、これは 基本的な使用法 の最初のサンプルにある XML 文字列を参照しています。

例1 SimpleXML 要素への属性と子要素の追加

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');

$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');

$characters = $movie->addChild('characters');
$character = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');

echo $sxe->asXML();

?>

上の例の出力は、 たとえば以下のようになります。

<?xml version="1.0" standalone="yes"?>
<movies type="documentary">
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#xD3;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
 <movie>
  <title>PHP2: More Parser Stories</title>
  <plot>This is all about the people who make it work.</plot>
  <characters>
   <character>
    <name>Mr. Parser</name>
    <actor>John Doe</actor>
   </character>
  </characters>
  <rating type="stars">5</rating>
 </movie>
</movies>

参考

  • SimpleXMLElement::addAttribute() - SimpleXML 要素に属性を追加する
  • 基本的な SimpleXML の使用法

User Contributed Notes

fluxlicious at gmail dot com 23-Jan-2023 11:18
The class below allows you to write CDATA and to add additional attributes.

<?php
class SimpleXMLElementExtended extends \SimpleXMLElement
{
    public function addChildWithCData($name, $value)
    {
        $child = parent::addChild($name);
        $element = dom_import_simplexml($child);
        $docOwner = $element->ownerDocument;
        $element->appendChild($docOwner->createCDATASection($value));
        return $child;
    }
}
?>

Example:
<?php
        $xml = new SimpleXMLElementExtended('<xml></xml>');
        $content = $xml->addChildWithCData('content', 'Title of the page');
        $content->addAttribute('id', 1);
        $content->addAttribute('enabled', 'true');

        // Output:
        // <xml>
        //   <content id="1" enabled="true"><![CDATA[Title of the page]]></content>
        // </xml>
?>
caffeinatedbits 09-Dec-2022 11:31
Just in case anyone else, like me, was trying to figure out a way to remove child elements...

<?php

$xml = <<<EOF
<?xml version="1.0" encoding="utf-8" ?>
<Animals>
    <Dog breed="chihuahua"/>
    <Dog breed="poodle"/>
    <Dog breed="invalid"/>
</Animals>
EOF;

$animals = new SimpleXMLElement($xml);

unset($animals->Dog[2]);

echo $animals->asXML();

// <?xml version="1.0" encoding="utf-8"?>
// <Animals>
//         <Dog breed="chihuahua"/>
//         <Dog breed="poodle"/>
//
// </Animals>

?>

Note: you cannot remove elements while iterating children, otherwise it will break the Iterator. Example:

<?php

$xml = <<<EOF
<?xml version="1.0" encoding="utf-8" ?>
<Animals>
    <Dog breed="chihuahua"/>
    <Dog breed="poodle"/>
    <Dog breed="invalid"/>
</Animals>
EOF;

$animals = new SimpleXMLElement($xml);

$allowed_breeds = [
    'chihuahua',
    'poodle'
];

try {
    $index = 0;
    foreach ($animals->Dog as $dog) {
        if (!in_array($dog['breed'], $allowed_breeds)) {
            unset($animals->Dog[$index]);
        }
        $index++;
    }
} catch (Throwable $e) {
    echo $e->getMessage();
    // SimpleXMLElement is not properly initialized
}

?>
carlos dot eduardo dot debiasi at gmail dot com 22-Apr-2021 01:23
I create this function so you can through and array build the XML, this allows multiple keys with the same value.
The structure must follow

[
    'key' => 'nameOfTheKey',
    'attributes' => ['id' => '1'],
    'fields' => [
        ['key' => 'fieldSamName', 'value' => '1'],
        ['key' => 'fieldSamName', 'value' => '1'],
        ['key' => 'fieldSamName', 'value' => '2'],
        ['key' => 'fieldWithChild', 'fields' => [
            ['key' => 'car', 'value' => '2'],
            ['key' => 'human', 'value' => '3'],
        ]],
    ]
];

Function:
 function toXml(\SimpleXMLElement $node, array $data)
    {
        foreach ($data as $key => $value) {
            $key = $value['key'];
            if (isset($value['value'])) {
                    $newNode = $node->addChild($key, $value['value']);
                if (isset($value['attributes'])) {
                    foreach ($value['attributes'] as $keyAttr => $valueAttr) {
                        $newNode->addAttribute($keyAttr, $valueAttr);
                    }
                }
            } else {
                $newNode = $node->addChild($key);
                if (isset($value['attributes'])) {
                    foreach ($value['attributes'] as $keyAttr => $valueAttr) {
                        $newNode->addAttribute($keyAttr, $valueAttr);
                    }
                }
            }
            if (isset($value['fields'])) {
                foreach ($value['fields'] as $keyField => $valueField) {
                    $this->toXml($newNode, [$keyField => $valueField]);
                }
            }
        }
    }
nwarap 07-Nov-2017 02:46
Want to continue the ampersand (&) chain problem.

Sometimes, you would want to assign  (=) addChild.
This trick will helps you to do this.

<?php
$webOrders = new SimpleXMLElement('<?xml version="1.0"?><WebOrders></WebOrders>');
$webOrder = $webOrders->addChild('WebOrder');
$product = $webOrder->addChild('Product');
$product[0] = 'T&M';
$product->addAttribute('price', 19.99);
$product->addAttribute('qty', 2);
var_dump($webOrders->asXML());
?>

OUTPUT would be:

<?xml version="1.0" encoding="UTF-8"?>
<WebOrders>
    <WebOrder>
        <Product price="19.99" qty="2">T&amp;M</Product>
    </WebOrder>
</WebOrders>
johninen at gmail dot com 14-Sep-2015 01:27
In the docs for google sitemaps it is required an element for mobile sitemaps that looks like this: <mobile:mobile/>

I used some time to figure out how to make it, but it is quite simple when understood.

$mobile_schema = 'http://www.google.com/schemas/sitemap-mobile/1.0';

//Create root element
$xml_mobile = new SimpleXMLElement('
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="'.$mobile_schema.'"></urlset>
');

//Add required children
$url_mobile = $xml_b_list_mobile->addChild('url');
$url_mobile->addChild('loc', 'your-mobile-site-url');
$url_mobile->addChild('mobile:mobile', null, $mobile_schema);

For this to work properly the attribute xmlns:mobile must be set in the root node, and then used as namespace(third argument) when creating the mobile:mobile child with null as value.
thallisphp at gmail dot com 07-May-2014 07:35
<?php
class MySimpleXMLElement extends SimpleXMLElement
{
    /**
     * Add SimpleXMLElement code into a SimpleXMLElement
     *
     * @param SimpleXMLElement $append
     */
    public function appendXML($append)
    {
        if ($append) {
            if (strlen(trim((string)$append)) == 0) {
                $xml = $this->addChild($append->getName());
            } else {
                $xml = $this->addChild($append->getName(), (string)$append);
            }

            foreach ($append->children() as $child) {
                $xml->appendXML($child);
            }

            foreach ($append->attributes() as $n => $v) {
                $xml->addAttribute($n, $v);
            }
        }
    }
}
?>
frosty dot z at freesbee dot fr 16-May-2013 02:31
To complete Volker Grabsch's comment, stating :
"Note that although addChild() escapes "<" and ">", it does not escape the ampersand "&"."

To work around that problem, you can use direct property assignment such as :

<?php
$xmlelement->value = 'my value < > &';
// results in <value>my value &lt; &gt; &amp;</value>
?>

instead of doing :

<?php
$xmlelement->addChild('value', 'my value < > &');
// results in <value>my value &lt; &gt; &</value> (invalid XML)
?>

See also: http://stackoverflow.com/questions/552957 (Rationale behind SimpleXMLElement's handling of text values in addChild and addAttribute)

HTH
passerbyxp at gmail dot com 27-Mar-2013 03:59
Be aware that simply because you can <?php $dom->addChild();?> doesn't mean your XML is valid under simple XML itself:

<?php
$dom=simplexml_load_string("<test></test>");
$dom->addChild("3D","1,2,3");
$xml=$dom->asXML();
echo $xml;
/* echos:
<?xml version="1.0"?>
<test><3D>1,2,3</3D></test>
*/

$dom=simplexml_load_string($xml);
/*
generates a whole lots of warnings,
and refuses to create an object.
*/
?>

Same in PHP 5.3 and 5.4
ivan dot kakurov at gmail dot com 13-Jan-2013 04:09
Here's my solution for creating XML from Multidimensional Array.
<?php
//DATA
        $xmlDAta = array(
            array(
                "name"  => "nameVal",
                "value" => "valVal",
                "css"   => "cssVal"
            ),
            array(
                "name"  => "name1Val",
                "value" => "val1Val",
                "css"   => "css1Val"
            ),
            "tname" => array(
                array(
                    "iTname"   => "iTname",
                    "iTname2"  => "iTname1",
                    "iTname2"  => "iTname2",
                    "iTbname3" => array(
                        "iiTbname"  => "tbName",
                        "iiTbname1" => "tbName1",
                    ),
                ),
            ),
            "tdata" => "otheerDAta"
        );

   /**
     * Create XML using string or array
     *
     * @param mixed $data input data
     * @param SimpleXMLElement $xml
     * @param string $child name of first level child
     *
     * @return adding Xml formated data into SimpleXmlElement
     */

function data2XML(array $data, SimpleXMLElement $xml, $child = "items")
    {

        foreach($data as $key => $val) {
            if(is_array($val)) {

                if(is_numeric($key)) {
                    $node  = $xml->addChild($child);
                    $nodes = $node->getName($child);
                } else {

                    $node  = $xml->addChild($key);
                    $nodes = $node->getName($key);
                }

                $node->addChild($nodes, self::data2Xml($val, $node));
            } else {
                $xml->addChild($key, $val);
            }
        }

    }

//Use

        $xml    = new SimpleXMLElement("<root/>");
        Util::data2XML($xmlDAta, $xml, "Items");

?>
jerikojerk 31-Jul-2011 07:32
If you're looking for a way to append children you may be interested in this:

<?php
$x = new SimpleXMLElement('<root name="toplevel"></root>');
$f1 = new SimpleXMLElement('<child pos="1">alpha</child>');
$f2 = new SimpleXMLElement('<child pos="2">beta</child>');
$f3 = new SimpleXMLElement('<child pos="3">gamma</child>');

$x->{$f1->getName()} = $f1;
$x->{$f2->getName()}[] = $f2;
$x->{$f3->getName()}[] = $f3;

echo 'count child=',$x->count(),"\n";
echo $x->asXML();

foreach ( $x->children() as $foo )
{
    var_dump($foo);
}

?>
alex dot feraud at gmail dot com 16-Jun-2011 02:52
Here is a class with more functions for SimpleXMLElement :

<?php
/**
 *
 * Extension for SimpleXMLElement
 * @author Alexandre FERAUD
 *
 */
class ExSimpleXMLElement extends SimpleXMLElement
{
    /**
     * Add CDATA text in a node
     * @param string $cdata_text The CDATA value  to add
     */
  private function addCData($cdata_text)
  {
   $node= dom_import_simplexml($this);
   $no = $node->ownerDocument;
   $node->appendChild($no->createCDATASection($cdata_text));
  }

  /**
   * Create a child with CDATA value
   * @param string $name The name of the child element to add.
   * @param string $cdata_text The CDATA value of the child element.
   */
    public function addChildCData($name,$cdata_text)
    {
        $child = $this->addChild($name);
        $child->addCData($cdata_text);
    }

    /**
     * Add SimpleXMLElement code into a SimpleXMLElement
     * @param SimpleXMLElement $append
     */
    public function appendXML($append)
    {
        if ($append) {
            if (strlen(trim((string) $append))==0) {
                $xml = $this->addChild($append->getName());
                foreach($append->children() as $child) {
                    $xml->appendXML($child);
                }
            } else {
                $xml = $this->addChild($append->getName(), (string) $append);
            }
            foreach($append->attributes() as $n => $v) {
                $xml->addAttribute($n, $v);
            }
        }
    }
}
?>
Volker Grabsch 21-Apr-2011 06:17
Note that although addChild() escapes "<" and ">", it does not escape the ampersand "&".

So addChild() is unsuited to handle user-defined input!

Instead, you will have to replace all "&" with "&amp;" before calling addChild().

Or, use htmlspecialchars() which also replaces other characters, but won't do any harm as addChild() won't replace those again.
felipenmoura at gmail dot com 11-Apr-2011 06:06
This method returns a reference to the specific SimpleXMLElement.
If you use:
<?php
    $xml= new SimpleXMLElement('<root></root>');
    $xml->father['name']= 'Fathers name'; // creates automatically a father tag with attribute name
    $son= $xml->father->addChild('son'); // uses the first father tag
    $son['name']= 'first son';
    $otherSon= $xml->father->addChild('son'); // uses the first father tag but now, in a second son tag
    $otherSon['name']= 'second son';

    echo htmlentities($xml->asXML());
?>

The result will be
<root>
    <father>
        <son name='first son' />
        <son name='second son' />
    </father>
</root>

So, once you change something to the just added child, you are actually accessing the element inside the SimpleXMLElement as a reference.


SimpleXML 要素に基づき整形式の XML 文字列を返す

  • ≪ SimpleXMLElement::addChild
  • SimpleXMLElement::attributes ≫
  • PHP Manual
  • SimpleXMLElement
  • SimpleXML 要素に基づき整形式の XML 文字列を返す

SimpleXMLElement::asXML

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::asXML — SimpleXML 要素に基づき整形式の XML 文字列を返す

説明

public SimpleXMLElement::asXML(?string $filename = null): string|bool

asXML メソッドは、親オブジェクトのデータを XML version 1.0 形式にフォーマットします。

パラメータ

filename

文字列を指定した場合、データを返すかわりにファイルにデータを書き込みます。

戻り値

filename が指定されていない場合、この関数は 成功時に string 、エラー時に false を返します。 パラメータが指定されていた場合は、ファイルが正常に書き込めたときに true 、そうでないときに false を返します。

変更履歴

バージョン | 説明
8.0.0 | filename は、nullable になりました。

例

例1 XML を取得する

<?php
$string = <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
</d>
</a>
XML;

$xml = new SimpleXMLElement($string);

echo $xml->asXML();

?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <d>
  <c>code</c>
 </d>
</a>

asXML は Xpath の結果にも適用できます:

例2 SimpleXMLElement::xpath() の結果に asXML() を使用する

<?php
// 上の XML の例から続く

/* <a><b><c>を探す */
$result = $xml->xpath('/a/b/c');

foreach ($result as $node) {
echo $node->asXML();
}
?>

上の例の出力は以下となります。

<c>text</c><c>stuff</c>

参考

  • SimpleXMLElement::__toString() - 文字列で要素の内容を返す
  • 基本的な SimpleXML の使用法

User Contributed Notes

andreas dot theissen at t-online dot de 27-Oct-2012 12:37
To prevent asXML from encoding vowels unwantedly, simply use an approriate XML header with encoding in advance.

If you do so, asXML will happily leave your vowels (and the header) entirely untouched.

<?php

$xmlstr =
'<?xml version="1.0" encoding="UTF-8"?>
<keys>
  <key lang="en">&lt;Insert&gt;</key>
  <key lang="de">&lt;Einfugen&gt;</key>
</keys>';

$sxe = new SimpleXMLElement($xmlstr);

$output = $sxe->asXML();

?>

$xmlstr and $output are identical now.

The subsequent use of html_entity_decode() (as proposed in the very beginning in another post) has several drawbacks:

1. It is slow
2. It is expensive
3. If there are already encoded arrow brackets or double quotes in your source for instance (as shown in the above example), markup will be broken.
oleg dot pavlin at gmail dot com 10-Jan-2012 04:17
Function asXML decodes special chars like o, a and others to &#xE6;, &#xF8;

To get normal output use without quoting:

$xml = html_entity_decode($xml, ENT_NOQUOTES, 'UTF-8');


要素の属性を定義する

  • ≪ SimpleXMLElement::asXML
  • SimpleXMLElement::children ≫
  • PHP Manual
  • SimpleXMLElement
  • 要素の属性を定義する

SimpleXMLElement::attributes

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::attributes — 要素の属性を定義する

説明

public SimpleXMLElement::attributes(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement

この関数は、XMLタグの中で定義された属性とその値を取得します。

注意: SimpleXML では、ほとんどのメソッドに反復処理を追加するための手順が定義されています。 これらは、var_dump() やオブジェクトを評価する他の手段で 見ることはできません。

パラメータ

namespaceOrPrefix

オプションで指定する、取得した属性の名前空間。

isPrefix

デフォルトは false。

戻り値

SimpleXMLElement オブジェクトを返します。 これを反復処理すれば、そのタグの属性を順に処理することができます。

タグではなく属性を指している SimpleXMLElement に対してコールした場合は null を返します。

例

例1 XML文字列を解釈する

<?php
$string = <<<XML
<a>
<foo name="one" game="lonely">1</foo>
</a>
XML;

$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
echo $a,'="',$b,"\"\n";
}
?>

上の例の出力は以下となります。

name="one"
game="lonely"

参考

  • 基本的な SimpleXML の使用法

User Contributed Notes

jurchiks101 at gmail dot com 23-May-2018 12:38
An undocumented way - and, IMO, a hack - of getting an element's value OR attributes
(but not both) without type-casting is to use the function `current()`:

<?php
$xml = new SimpleXMLElement(<<<'XML'
<foo>
    <bar>1</bar>
    <baz name="baz" />
    <qux name="qux">3</qux>
</foo>
XML
);

var_dump([
    'bar' => [
        $xml->bar,
        current($xml->bar),
    ],
    'baz' => [
        $xml->baz->attributes(),
        current($xml->baz->attributes()),
    ],
    'qux' => [
        // won't work here correctly
        $xml->qux,
        current($xml->qux),
        $xml->qux->attributes(),
        current($xml->qux->attributes()),
    ],
]);
?>

Results in the following output (re-formatted to shorten it):
```
array(3) {
  'bar' => array(2) {
    [0] => class SimpleXMLElement#2 (1) {
      public ${0} => string(1) "1"
    }
    [1] => string(1) "1"
  }
  'baz' => array(2) {
    [0] => class SimpleXMLElement#5 (1) {
      public $@attributes => array(1) {
        ...
      }
    }
    [1] => array(1) {
      'name' => string(3) "baz"
    }
  }
  'qux' => array(4) {
    [0] => class SimpleXMLElement#6 (2) {
      public $@attributes => array(1) {
        ...
      }
      public ${0} => string(1) "3"
    }
    [1] => array(1) {
      'name' => string(3) "qux"
    }
    [2] => class SimpleXMLElement#7 (1) {
      public $@attributes => array(1) {
        ...
      }
    }
    [3] => array(1) {
      'name' => string(3) "qux"
    }
  }
}
```

This apparently reads the element as an array and just returns the value of the first property, whether it be the attributes or the value. As seen in the third example, this is unreliable, especially if you're parsing XML from an outside source that may or may not have attributes on an element that you want the value of.

I certainly do NOT advise anyone to use this since it is undocumented and it is just a coincidence that it works, so it might break in the future without prior notice.
andy dot locologic+101 at gmail dot com 14-Aug-2015 10:00
Easiest and safest way to get attributes as an array is to use the iterator_to_array function (see http://php.net/manual/en/function.iterator-to-array.php):

<?php
      $x = new SimpleXMLElement('<div class="myclass" id="myid"/>');
      $attributes = iterator_to_array($x->attributes());
?>
zevnikrok 18-Dec-2014 11:01
If you wish to get attributes as an associative array of key value pairs, you don't need to iterate through them, you can get it with this one liner:

  reset($element->attributes())
webfelipemaia at gmail dot com 07-Sep-2013 05:11
Use attributes to display when it meets certain condition defined attribute / value in xml tags.

Use atributos para exibir quando atende determinada condicao definida atributo / valor em tags XML.

Consider the following example:
Considere o seguinte exemplo:

(file.xml)

<?xml version="1.0" encoding="UTF-8"?>

<list>
    <item type="Language">
        <name>PHP</name>
        <link>www.php.net</link>
    </item>
    <item type="Database">
        <name>Java</name>
        <link>www.oracle.com/br/technologies/java/?</link>
    </item>
</list>

Checks if the attribute value equals "Language", if equal prints everything that is related to "Language".

Verifica se o valor do atributo e igual a "Language", se for, imprime tudo o que for relativo ao mesmo.

<?php

$xml = simplexml_load_file("file.xml");

foreach($xml->children() as $child) {

        $role = $child->attributes();

        foreach($child as $key => $value) {

            if($role == "Language")
            echo("[".$key ."] ".$value . "<br />");

        }
}
?>

output:
saida:

[name] PHP
[link] www.php.net
adrian at foeder dot de 14-Jun-2013 10:15
in order to get a possibly present xml:space attribute, use the following construct:

<?php
$simpleXmlElement->element->attributes('http://www.w3.org/XML/1998/namespace')->space;
?>

This will, for example, return 'preserve' if set.

Just passing by 'xml' as namespace argument of the attribute() method didn't work out for me. Passing by the complete namespace URI works also if it is not explicitly defined in the underlying XML document.

Also, $simpleXmlElement->getNamespaces() does not return anything of use.
totalwipeout at gmail dot com 08-Nov-2012 05:21
Tip to get a real array of all attributes of a node (not SimpleXML's object acting like an array)

<?php
//- $node is a SimpleXMLElement object

$atts_object = $node->attributes(); //- get all attributes, this is not a real array
$atts_array = (array) $atts_object; //- typecast to an array

//- grab the value of '@attributes' key, which contains the array your after
$atts_array = $atts_array['@attributes'];

var_dump($atts_object); //- outputs object(SimpleXMLElement)[19]
                        //-             public '@attributes' => ...

var_dump($atts_array); //- outputs array (size=11) ...

?>
Hope this helps!
chris at chlab dot ch 23-Mar-2012 10:16
Note that you must provide the namespace if you want to access an attribute of a non-default namespace:

Consider the following example:

<?php
$xml = <<<XML
<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
 <Table Foo="Bar" ss:ExpandedColumnCount="7">
 </Table>
</Workbook>
XML;

$sxml = new SimpleXMLElement($xml);

/**
 * Access attribute of default namespace
 */
var_dump((string) $sxml->Table[0]['Foo']);
// outputs: 'Bar'

/**
 * Access attribute of non-default namespace
 */
var_dump((int) $sxml->Table[0]['ExpandedColumnCount']);
// outputs: 0

var_dump((int) $sxml->Table[0]->attributes('ss', TRUE)->ExpandedColumnCount);
// outputs: '7'
?>
Andrei 16-May-2011 04:46
Reading the attributes of the root element with name space prefixes as in an Atom feed

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;Ck4EQXYzeCp7ImA9WhZWFE4.&quot;">

<?php
$xml =  @simplexml_load_file($feed);
$att_gd = $xml->attributes("gd",1);
$Etag = $att_gd["etag"];
?>
sarlak 27-Apr-2011 01:12
<?php
$att = 'attribueName';

// You can access an element's attribute just like this :
$attribute = $element->attributes()->$att;

// This will save the value of the attribute, and not the objet
$attribute = (string)$element->attributes()->$att;

// You also can edit it this way :
$element->attributes()->$att = 'New value of the attribute';
?>
leap 02-Apr-2011 09:07
If you want to save the value of an attribute into an array, typecast it to a string.

<?php
// stores an xml-element-object
$dataStore['value'] = $attributes->myValue

// stores the value of the attribute
$dataStore['value'] = (string)$attributes->myValue
?>
alan at performantsystems dot com 23-May-2010 10:26
So lets say you have database type data in an XML string called $xmlstring with the key or item ID as an XML Attribute and all content data as regular XML Elements, as above. SimpleXML processes the Attributes as an array, so we can play along and push the Attributes into an array. Then we can get the value of any specific Attribute we want by addressing it by name, such as "ID".

Considering this data:

<?xml version="1.0" encoding="utf-8"?>
<data>
   <item ID="30001">
      <Company>Navarro Corp.</Company>
   </item>
   <item ID="30002">
      <Company>Performant Systems</Company>
   </item>
   <item ID="30003">
      <Company>Digital Showcase</Company>
   </item>
</data>

Example of listing both the ID Attribute and Company Element values:

<?php
$xmlObject = new SimpleXMLElement($xmlstring);
foreach ($xmlObject->children() as $node) {
        $arr = $node->attributes();   // returns an array
        print ("ID=".$arr["ID"]);     // get the value of this attribute
        print ("  Company=".$node->Company);
        print ("<p><hr>");
}
?>
Xeoncross 10-Apr-2010 07:46
It is really simple to access attributes using array form. However, you must convert them to strings or ints if you plan on passing the values to functions.

<?php
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 55555
        )

    [text] => "hello world"
)
?>

Then using a function

<?php
function xml_attribute($object, $attribute)
{
    if(isset($object[$attribute]))
        return (string) $object[$attribute];
}
?>

I can get the "id" like this

<?php
print xml_attribute($xml, 'id'); //prints "55555"
?>
gillllberg at gmail dot com 04-Nov-2009 02:21
To get an attribute in the node, use node->attributes()->attributeName
skerr at mojavi dot org 09-Dec-2004 10:55
You can also access the node as an array to get attributes:

<?php

$xml = simplexml_load_file('file.xml');

echo 'Attribute: ' . $xml['attribute'];

?>
inge at elektronaut dot no 26-May-2004 10:53
here's a simple function to get an attribute by name, based on the example

<?php
function findAttribute($object, $attribute) {
  foreach($object->attributes() as $a => $b) {
    if ($a == $attribute) {
      $return = $b;
    }
  }
  if($return) {
    return $return;
  }
}
?>


指定したノードの子ノードを見付ける

  • ≪ SimpleXMLElement::attributes
  • SimpleXMLElement::__construct ≫
  • PHP Manual
  • SimpleXMLElement
  • 指定したノードの子ノードを見付ける

SimpleXMLElement::children

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::children — 指定したノードの子ノードを見付ける

説明

public SimpleXMLElement::children(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement

このメソッドは、指定した要素の子を見つけます。 結果は、通常の反復子により取得できます。

注意: SimpleXML では、ほとんどのメソッドに反復処理を追加するための手順が定義されています。 これらは、var_dump() やオブジェクトを評価する他の手段で 見ることはできません。

パラメータ

namespaceOrPrefix

XML 名前空間。

isPrefix

isPrefix が true の場合は namespaceOrPrefix をプレフィックスとして扱います。false の場合は namespaceOrPrefix を名前空間 URL として扱います。

戻り値

ノードが子を持つかどうかにかかわらず SimpleXMLElement 要素を返します。 ノードが属性である場合は、null を返します。

例

例1 children() 疑似配列を走査する

<?php
$xml = new SimpleXMLElement(
'<person>
<child role="son">
<child role="daughter"/>
</child>
<child role="daughter">
<child role="son">
<child role="son"/>
</child>
</child>
</person>');

foreach ($xml->children() as $second_gen) {
echo ' The person begot a ' . $second_gen['role'];

foreach ($second_gen->children() as $third_gen) {
echo ' who begot a ' . $third_gen['role'] . ';';

foreach ($third_gen->children() as $fourth_gen) {
echo ' and that ' . $third_gen['role'] .
' begot a ' . $fourth_gen['role'];
}
}
}
?>

上の例の出力は以下となります。

The person begot a son who begot a daughter; The person
begot a daughter who begot a son; and that son begot a son

例2 名前空間の使用

<?php
$xml = '<example xmlns:foo="my.foo.urn">
<foo:a>Apple</foo:a>
<foo:b>Banana</foo:b>
<c>Cherry</c>
</example>';

$sxe = new SimpleXMLElement($xml);

$kids = $sxe->children('foo');
var_dump(count($kids));

$kids = $sxe->children('foo', TRUE);
var_dump(count($kids));

$kids = $sxe->children('my.foo.urn');
var_dump(count($kids));

$kids = $sxe->children('my.foo.urn', TRUE);
var_dump(count($kids));

$kids = $sxe->children();
var_dump(count($kids));
?>
int(0)
int(2)
int(2)
int(0)
int(1)

参考

  • SimpleXMLElement::count() - 子要素を数える
  • count() - 配列または Countable オブジェクトに含まれるすべての要素の数を数える

User Contributed Notes

boan dot web at outlook dot com 15-Mar-2019 07:09
SimpleXMLElement::children can return null in this case:

<?php
$xml = '
<root attr="Hello"/>
';

$sxe = new SimpleXMLElement($xml);

$sxe_xpath = $sxe->xpath('/root/@attr')[0];

$children = $sxe_xpath->children();

var_export($children); // Is null
?>
thetazzbot at gmail dot com 08-Sep-2011 06:56
Ok so say you have this xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE nitf
PUBLIC "-//IPTC-NAA//DTD NITF 3.1//EN"
       "http://www.nitf.org/site/nitf-documentation/nitf-3-1.dtd">
<nitf>
  <head>
    <docdata management-status="embargoed">
      <!--data/2011/08/23/parties/doc4e53aa5783cca930694817.txt-->
      <doc-id id-string="doc4e53aa5783cca930694817"/>
      <date.release norm="20110823T000000"/>
      <key-list/>
    </docdata>
    <pubdata type="web" position.section="parties" position.sequence="0"/>
  </head>

-- snip --

If you need to access the nodes named "like.this" such as the date.release above, here is how I did it:

$xml = new SimpleXMLElement($xhtml);
 echo (string)$xml->head->docdata->{"date.release"}["norm"];

Took me a while to figure that one out ;)
coldshine1 at rambler dot ru 10-Dec-2010 02:37
This is my recursive simple function to parse XML with attributes.

<?php
function ParseXML($node, &$parent=array(), $only_child=true) {

        //Current node name
        $node_name = $node->getName();

        //Let's count children
        $only_child = true;
        if($node->count() > 1 ) $only_child = false;

        //If there is no child, then there may be text data
        if($only_child){
            $content="$node";
            if (strlen($content)>0) $parent['content']=$content;
        }

        //Get attributes of current node
        foreach ($node->attributes() as $k=>$v) {
            $parent['@attributes'][$k]="$v";
        }

        //Get children
        $count = 0;
        foreach ($node->children() as $child_name=>$child_node) {
            if(!$only_child) //If there are siblings then we'll add node to the end of the array
                LGServerPVR::ParseXML($child_node, $parent[$node_name][$child_name][$count], $only_child);
            else
                LGServerPVR::ParseXML($child_node, $parent[$node_name][$child_name], $only_child);
            $count++;
        }

        return $parent;
        //(c) c01d[s]h!nE 10.12.2010
    }

?>
Anonymous 26-Oct-2010 05:19
Here's my xml-to-array routine. Unlike many of the other comments here, this one takes namespaces into account.

<?php

class XmlArray {

  public function load_dom ($xml) {
    $node=simplexml_import_dom($xml);
    return $this->add_node($node);
  }

  public function load_string ($s) {
    $node=simplexml_load_string($s);
    return $this->add_node($node);
  }

  private function add_node ($node, &$parent=null, $namespace='', $recursive=false) {

    $namespaces = $node->getNameSpaces(true);
    $content="$node";

    $r['name']=$node->getName();
    if (!$recursive) {
      $tmp=array_keys($node->getNameSpaces(false));
      $r['namespace']=$tmp[0];
      $r['namespaces']=$namespaces;
    }
    if ($namespace) $r['namespace']=$namespace;
    if ($content) $r['content']=$content;

    foreach ($namespaces as $pre=>$ns) {
      foreach ($node->children($ns) as $k=>$v) {
        $this->add_node($v, $r['children'], $pre, true);
      }
      foreach ($node->attributes($ns) as $k=>$v) {
        $r['attributes'][$k]="$pre:$v";
      }
    }
    foreach ($node->children() as $k=>$v) {
      $this->add_node($v, $r['children'], '', true);
    }
    foreach ($node->attributes() as $k=>$v) {
      $r['attributes'][$k]="$v";
    }

    $parent[]=&$r;
    return $parent[0];

  }

}

?>
mrdaniellee at live dot com 10-Jan-2010 09:11
use this If you want to view the HTML as well as data.

normal dumps display the parsed versions of HTML.
This code displays the HTML as Text in a Text Area, and also display all other a data along side as an array

perfect for debugging (xml with html).

Try This Code:

<?php
$xml  = simplexml_load_file($url);

function xml2array_parse($xml){
     foreach ($xml->children() as $parent => $child){
         $return["$parent"] = xml2array_parse($child)?xml2array_parse($child):"$child";
     }
     return $return;
 }

 print "<pre><textarea style=\"width:200%;height:100%;\">";
 print_r(xml2array_parse($xml));
 print "</textarea></pre>";
?>
rodmen at gmail dot com 21-May-2009 08:32
Transform xml to array php

<?php
function xml2phpArray($xml,$arr){
    $iter = 0;
        foreach($xml->children() as $b){
                $a = $b->getName();
                if(!$b->children()){
                        $arr[$a] = trim($b[0]);
                }
                else{
                        $arr[$a][$iter] = array();
                        $arr[$a][$iter] = xml2phpArray($b,$arr[$a][$iter]);
                }
        $iter++;
        }
        return $arr;
}

$Array = simplexml_load_string(file_get_contents('myfile.xml'));
print_r(xml2phpArray($Array,array()));
?>
Anonymous 06-Sep-2008 05:39
for XML namespaces such as <dc:creator> in RSS feeds use

<?php
    $xml = new SimpleXMLElement($string);
    $item = $xml->channel[0]->item[0];
    $dc = $item->children("http://purl.org/dc/elements/1.1/");
    echo $dc->creator;
?>
transglobe at gmx dot de 19-Mar-2008 02:37
I made a slightly differnt approch towards the RecurseXML function. Beeing hungry I had problems with the code, as it did just overwrite two <maincourse>s. So here is what I did:

<?php

$xml = new SimpleXMLElement(
'<meal>
   <type>Lunch</type>
   <time>12:30</time>
   <menu>
     <entree>salad</entree>
     <maincourse>
        <part>ships</part>
        <part>steak</part>
     </maincourse>
     <maincourse>
        <part>fisch</part>
        <part>rice</part>
     </maincourse>
     <maincourse>
        <part>wine</part>
        <part>cheese</part>
     </maincourse>
   </menu>
</meal>');

$vals = array();
RecurseXML($xml,$vals);

foreach($vals as $key=>$value)
  print("{$key} = {$value}<BR>\n");

function RecurseXML($xml,&$vals,$parent="") {

  $childs=0;
  $child_count=-1; # Not realy needed.
  $arr=array();
        foreach ($xml->children() as $key=>$value) {
                if (in_array($key,$arr)) {
                        $child_count++;
                } else {
                        $child_count=0;
                }
                $arr[]=$key;
                $k=($parent == "") ? "$key.$child_count" : "$parent.$key.$child_count";
                $childs=RecurseXML($value,$vals,$k);
                if ($childs==0) {
                        $vals[$k]= (string)$value;
                }
        }

  return $childs;
}

?>
Output is like this:
type.0 = Lunch
time.0 = 12:30
menu.0.entree.0 = salad
menu.0.maincourse.0.part.0 = ships
menu.0.maincourse.0.part.1 = steak
menu.0.maincourse.0 =
menu.0.maincourse.1.part.0 = fisch
menu.0.maincourse.1.part.1 = rice
menu.0.maincourse.1 =
menu.0.maincourse.2.part.0 = wine
menu.0.maincourse.2.part.1 = cheese
menu.0.maincourse.2 =
menu.0 =

(Not beautiful, but it solved my case...)
crescentfreshpot at yahoo dot com 10-Dec-2007 08:16
Just a warning that the iterable returned from children() contains the '@attributes' key, which is "invisible" during a foreach but can be seen if using a different construct, such as list()=each() or casting to an array before iterating w/ foreach.
aero 23-May-2007 08:07
Here's a simple, recursive, function to transform XML data into pseudo E4X syntax ie. root.child.value = foobar

<?php
error_reporting(E_ALL);

$xml = new SimpleXMLElement(
'<Patriarch>
   <name>Bill</name>
   <wife>
     <name>Vi</name>
   </wife>
   <son>
     <name>Bill</name>
   </son>
   <daughter>
     <name>Jeri</name>
     <husband>
       <name>Mark</name>
     </husband>
     <son>
       <name>Greg</name>
     </son>
     <son>
       <name>Tim</name>
     </son>
     <son>
       <name>Mark</name>
     </son>
     <son>
       <name>Josh</name>
         <wife>
           <name>Kristine</name>
         </wife>
         <son>
           <name>Blake</name>
         </son>
         <daughter>
           <name>Liah</name>
         </daughter>
     </son>
   </daughter>
</Patriarch>');

RecurseXML($xml);

function RecurseXML($xml,$parent="")
{
   $child_count = 0;
   foreach($xml as $key=>$value)
   {
      $child_count++;
      if(RecurseXML($value,$parent.".".$key) == 0)  // no childern, aka "leaf node"
      {
         print($parent . "." . (string)$key . " = " . (string)$value . "<BR>\n");
      }
   }
   return $child_count;
}

?>

The output....

.name = Bill
.wife.name = Vi
.son.name = Bill
.daughter.name = Jeri
.daughter.husband.name = Mark
.daughter.son.name = Greg
.daughter.son.name = Tim
.daughter.son.name = Mark
.daughter.son.name = Josh
.daughter.son.wife.name = Kristine
.daughter.son.son.name = Blake
.daughter.son.daughter.name = Liah
taylorbarstow at that google mail thingy 21-Apr-2006 07:38
Sometimes you actually want an array, not a pseudo array.   This is especially true when you aren't dealing with attributes (i.e., you just want the array of child nodes).

Do like this:

<?php
$children = $sxml->xpath('child::node()');
?>

The reason you might want this is to be able to use array functions like array_shift, array_pop, etc.  This is especially true when you are writing recursive functions.  Simplexml works really well in iterative programming, but if you try to implement recursion it gets ugly.
Sebastian 27-Oct-2005 03:45
Just a quick addition:

If you need to access a child node which contains a dash, you need to encapsulate it with {""}.

For example:
<?php
foreach ($domain->domain-listing as $product) {
}
?>

The example above doesn't work because of the dash. But instead you need to use:
<?php
foreach ($domain->{"domain-listing"} as $product) {
}
?>

At least for me the second example works perfectly fine.
no-one 31-May-2005 06:05
For anyone who hasn't read Sterling Hughe's article (http://www.zend.com/php5/articles/php5-simplexml.php):

<?php
$xml_document =<<<EOT
<?xml version="1.0"?>
<root xmlns:foo="http://example.com">
  <foo:bar>baz</foo:bar>
</root>
EOT;

$xml_document = simplexml_load_xml($xml_document);

$foo_ns_bar = $xml_document->children('http://example.com');

echo $foo_ns_bar->bar[0]; // prints 'baz'
?>
Andrew Rose (rose dot andrew at gmail dot com) 16-Mar-2005 04:48
The example below shows the basic use of depth-first recursion to span the xml tree.

This is coded for the command line, and it prints out the original sentance above and then the copy cat sentence it creates itself for comparison, which as you will see; this example is slightly off from, I'll leave it upto you to resolve this issue.

All in all I personaly think xml and recursion go hand in hand, so if you don't understand recursion but know xml and want to use php to manipulate xml you will need to learn about recursion at some point.

<?php
$xml = simplexml_load_string(
'<person>
 <child role="son">
  <child role="daughter"/>
 </child>
 <child role="daughter">
  <child role="son">
   <child role="son"/>
  </child>
 </child>
</person>');

function recurse($child)
 {
   foreach($child->children() as $children) {
     echo ' who begot a '.$children['role'];
     recurse($children);
   }
    return;
 }

foreach($xml->children() as $children) {
 echo 'The person begot a '.$children['role'];
  recurse($children, 0);
 echo '; ';
}

echo "\n";
echo 'The person begot a son who begot a daughter; The person begot a daughter who begot a son; and that son begot a son'."\n";

?>
zyxwvu at users dot sourceforge dot net 15-Feb-2004 10:32
File:

<category>
  <item>text</item>
  <bold>text</bold>
  <item>text</item>
  <item>text</item>
  <mark>text</mark>
  <bold>text</bold>
</category>

If you want to get also names of the tags, you can use this loop layout:

<?php
foreach($category -> children() as $name => $node){
  echo $name.'<br/>';
}
?>


新しい SimpleXMLElement オブジェクトを作成する

  • ≪ SimpleXMLElement::children
  • SimpleXMLElement::count ≫
  • PHP Manual
  • SimpleXMLElement
  • 新しい SimpleXMLElement オブジェクトを作成する

SimpleXMLElement::__construct

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::__construct — 新しい SimpleXMLElement オブジェクトを作成する

説明

public SimpleXMLElement::__construct(
string $data,
int $options = 0,
bool $dataIsURL = false,
string $namespaceOrPrefix = "",
bool $isPrefix = false
)

新しい SimpleXMLElement オブジェクトを作成します。

パラメータ

data

整形式 XML 文字列。 もし dataIsURL が true の場合には、XML ドキュメントへのパスあるいは URL。

options

オプションで、XML文書を読み込む場合に影響する 追加の Libxml パラメータを指定するために使います。 XML文書を出力する場合に影響するオプション(例: LIBXML_NOEMPTYTAG) は静かに無視されます。

注意:

深くネストされた XML や巨大なテキストノードを処理する際には LIBXML_PARSEHUGE を指定することになるでしょう。

dataIsURL

デフォルトでは dataIsURL は false です。 data が、文字列データではなく XML ドキュメントへのパスあるいは URL である場合に true を使用します。

namespaceOrPrefix

名前空間プレフィックスあるいは URI。

isPrefix

namespaceOrPrefix がプレフィックスの場合は true、 URI の場合は false。デフォルトは false。

エラー / 例外

XML データ内でエラーが見つかるたびに E_WARNING エラーメッセージが発生します。さらに、XML データのパースに失敗した場合は例外をスローします。

ヒント

libxml_use_internal_errors() ですべての XML エラーを抑制し、 後から libxml_get_errors() で取得することもできます。

例

注意:

この例では example.php をインクルードしていますが、これは 基本的な使用法 の最初のサンプルにある XML 文字列を参照しています。

例1 SimpleXMLElement オブジェクトの作成

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
echo $sxe->movie[0]->title;

?>

上の例の出力は以下となります。

PHP: Behind the Parser

例2 URL からの SimpleXMLElement オブジェクトの作成

<?php

$sxe = new SimpleXMLElement('http://example.org/document.xml', 0, true);
echo $sxe->asXML();

?>

参考

  • 基本的な SimpleXML の使用法
  • simplexml_load_string() - XML 文字列をオブジェクトに代入する
  • simplexml_load_file() - XMLファイルをパースし、オブジェクトに代入する
  • XML エラーの対応
  • libxml_use_internal_errors() - libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする
  • libxml_set_streams_context() - 次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する

User Contributed Notes

info at ensostudio dot ru 20-Aug-2021 04:22
Extended SimpleXMLElement:
<?php
class XmlElement extends \SimpleXMLElement
{
    public static function factory(string $root): self
    {
        return new static('<?xml version="1.0" encoding="UTF-8"?><'.$root.'/>', LIBXML_BIGLINES | LIBXML_COMPACT);
    }

    /**
      * @param iterable $attributes An array of element attributes as name/value pairs
      * @return $this
      */
    public function addAttributes(iterable $attributes)
    {
        foreach ($attributes as $name => $value) {
            $this->addAttribute($name, $value);
        }

        return $this;
    }

    /**
      * @param string $name The sub-element name
      * @param string|array|null $valueOrAttributes The sub-element value or an array of attributes
      * @param string|null $namespace The sub-element namespace
      * @return static|null
      */
    public function addChild($name, $valueOrAttributes = null, $namespace = null)
    {
        if (is_array($valueOrAttributes)) {
            $child = parent::addChild($name, null, $namespace);
            foreach ($valueOrAttributes as $name => $value) {
                $child->addAttribute($name, $value);
            }
        } else {
            $child = parent::addChild($name, $valueOrAttributes, $namespace);
        }

        return $child;
    }

    /**
      * @param iterable $childs An array of sub-elements as name/value(or attributes) pairs
      * @return $this
      */
    public function addChilds(iterable $childs)
    {
        foreach ($childs as $name => $value) {
            $this->addChild($name, $value);
        }

        return $this;
    }
}
?>
rowan dot collins at gmail dot com 22-Apr-2017 03:23
The manual doesn't really explain what the $ns argument (and the accompanying $is_prefix) are for.

What they do is similar to the ->children() method: they set the context of the returned object to that namespace, so that access via ->elementName and ['attributeName'] refer to elements and attributes in that namespace.

In particular, they do *not* change the namespaces which exist on the document.

See this example:

<?php
// This XML contains two elements called <child>
// One is in the namespace http://example.com, with local prefix 'ws'
// The other has no namespace (no prefix, and no default namespace declared)
$xml = '<ws:example xmlns:ws="http://example.com"><child>Not in namespace</child><ws:child>In example namespace</ws:child></ws:example>';

$sx0 = new SimpleXMLElement($xml, 0, false);
$sx1 = new SimpleXMLElement($xml, 0, false, 'http://example.com');
$sx2 = new SimpleXMLElement($xml, 0, false, 'ws', true);

echo "
    Without: {$sx0->child}
    By namespace: {$sx1->child}
    By prefix: {$sx2->child}
";
?>

Output:

 Without: Not in namespace
 By namespace: In example namespace
 By prefix: In example namespace
ahmad dot mayahi at gmail dot com 07-Jun-2016 09:36
You won't be able to load an XML file without root element:

//This will throw an exception
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>', null, false);

//Here is the solution
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><root></root>', null, false);
Phil Cross 01-Sep-2014 11:39
It's worth noting, that you need to typecast dynamic property names to string in order to retrieve there value, for example:

<?php
    $xml = new SimpleXMLElement('records.xml', 0, true);

    // This will work as expected because its a hard coded property value
    foreach($xml as $record){
        echo $record->id;    // Will output the ID fine
    }

    // Dynamic properties require typecasting to string
    $xml_field = 'id';
    foreach($xml as $record){

        // This will dump a SimpleXMLElement object
        var_dump($record->$xml_field);

        // This will output the value as expected
        echo (string)$record->$xml_field;
    }
?>
bertolini dot cedric at me dot com 16-Jun-2014 11:07
It's worth noting that the behavior of SimpleXmlElement::__construct is not exactly the same as simplexml_load_string, regarding libxml_use_internal_errors().

In my case,

<?php
libxml_use_internal_errors(true);
new \SimpleXmlElement($data);
?>

was still throwing error. But as soon as I switched to

<?php
libxml_use_internal_errors(true);
simplexml_load_string($data);
?>

everything worked fine and I stopped getting an error.
kumarldh at gmail dot com 22-Mar-2011 10:50
Using libxml_use_internal_errors() may suppress errors but Exception still requires decent handling. I used following code snippet.

<?php
libxml_use_internal_errors(true);
try{
    $xmlToObject = new SimpleXMLElement($notSoWellFormedXML);
} catch (Exception $e){
    echo 'Please try again later...';
    exit();
}
?>
uramihsayibok, gmail, com 16-Aug-2009 06:52
As I was filling out a bug report, I realized why (speculation here) the constructor is final: so that functions like simplexml_load_file and simplexml_load_string can work. I imagine the PHP-ized code looks something like

<?php

function simplexml_load_file($filename, $class_name = "SimpleXMLElement", $options = 0, $ns = "", $is_prefix = false) {
    return new $class_name($filename, $options, true, $ns, $is_prefix);
}

?>

If we were to use a different $class_name and change the constructor's definition these functions wouldn't work.

There's no easy, sensible solution that keeps simplexml_load_file and simplexml_load_string.
tudor at culise dot net 20-Nov-2007 03:35
This class is extendable, but it's too bad that its constructor cannot be overriden (PHP says it's a final method). Thus the class should be wrapped using the delegation principle rather that extended.


子要素を数える

  • ≪ SimpleXMLElement::__construct
  • SimpleXMLElement::current ≫
  • PHP Manual
  • SimpleXMLElement
  • 子要素を数える

SimpleXMLElement::count

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SimpleXMLElement::count — 子要素を数える

説明

public SimpleXMLElement::count(): int

このメソッドは、子要素を数えます。

パラメータ

この関数にはパラメータはありません。

戻り値

子要素の数を返します。

例

例1 子要素の数の取得

<?php
$xml = <<<EOF
<people>
<person name="Person 1">
<child/>
<child/>
<child/>
</person>
<person name="Person 2">
<child/>
<child/>
<child/>
<child/>
<child/>
</person>
</people>
EOF;

$elem = new SimpleXMLElement($xml);

foreach ($elem as $person) {
printf("%s has got %d children.\n", $person['name'], $person->count());
}
?>

上の例の出力は以下となります。

Person 1 has got 3 children.
Person 2 has got 5 children.

参考

  • SimpleXMLElement::children() - 指定したノードの子ノードを見付ける

User Contributed Notes

daniel dot erni at focusedpublishing dot com 22-Mar-2011 08:37
Alternative code for PHP < 5.3:
<?php
$count = $node->count(); // PHP > 5.3
$count = count($node->children()); // PHP < 5.3
?>


現在の要素を返す

  • ≪ SimpleXMLElement::count
  • SimpleXMLElement::getDocNamespaces ≫
  • PHP Manual
  • SimpleXMLElement
  • 現在の要素を返す

SimpleXMLElement::current

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

SimpleXMLElement::current — 現在の要素を返す

説明

public SimpleXMLElement::current(): SimpleXMLElement
警告

PHP 8.0 より前のバージョンでは、 SimpleXMLElement::current() はサブクラスの SimpleXMLIterator でのみ宣言されていました。

このメソッドは、現在の要素の SimpleXMLElement を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

このメソッドは、現在の要素の SimpleXMLElement を返します。

エラー / 例外

失敗した場合は Error をスローします。

変更履歴

バージョン | 説明
8.1.0 | SimpleXMLElement::current() に不正なイテレータを渡してコールすると、 Error をスローするようになりました。 これより前のバージョンでは、null を返していました。

例

例1 現在の要素を返す

<?php
$xmlElement = new SimpleXMLElement('<books><book>PHP basics</book><book>XML basics</book></books>');

$xmlElement->rewind(); // 最初の要素に巻き戻します。こうしないと current() は動作しません。
var_dump($xmlElement->current());
?>

上の例の出力は以下となります。

object(SimpleXMLElement)#2 (1) {
  [0]=>
  string(10) "PHP basics"
}

参考

  • SimpleXMLElement::key() - 現在のキーを返す
  • SimpleXMLElement::next() - 次の要素に移動する
  • SimpleXMLElement::rewind() - 最初の要素に巻き戻す
  • SimpleXMLElement::valid() - 現在の要素が有効かどうかを調べる
  • SimpleXMLElement

User Contributed Notes

There are no user contributed notes for this page.


ドキュメントで宣言されている名前空間を返す

  • ≪ SimpleXMLElement::current
  • SimpleXMLElement::getName ≫
  • PHP Manual
  • SimpleXMLElement
  • ドキュメントで宣言されている名前空間を返す

SimpleXMLElement::getDocNamespaces

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

SimpleXMLElement::getDocNamespaces — ドキュメントで宣言されている名前空間を返す

説明

public SimpleXMLElement::getDocNamespaces(bool $recursive = false, bool $fromRoot = true): array|false

ドキュメントで宣言されている名前空間を返します。

パラメータ

recursive

指定されている場合は、親ノードおよび子ノードで宣言されている全ての名前空間を返します。 されていない場合は、ルートノードで宣言されている名前空間のみを返します。

fromRoot

XML 文書のルートノードからでなく、子ノードの配下の名前空間を再帰的にチェックできるようにします。

戻り値

getDocNamespaces メソッドは、 名前空間名および関連付けられた URI を配列で返します。

例

例1 ドキュメントの名前空間の取得

<?php

$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<people xmlns:p="http://example.org/ns">
<p:person id="1">John Doe</p:person>
<p:person id="2">Susie Q. Public</p:person>
</people>
XML;

$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getDocNamespaces();
var_dump($namespaces);

?>

上の例の出力は以下となります。

array(1) {
   ["p"]=>
   string(21) "http://example.org/ns"
}

例2 複数の名前空間での動作

<?php

$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
<p:person t:id="1">John Doe</p:person>
<p:person t:id="2" a:addr="123 Street" xmlns:a="http://example.org/addr">
Susie Q. Public
</p:person>
</people>
XML;

$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getDocNamespaces(TRUE);
var_dump($namespaces);

?>

上の例の出力は以下となります。

array(3) {
  ["p"]=>
  string(21) "http://example.org/ns"
  ["t"]=>
  string(23) "http://example.org/test"
  ["a"]=>
  string(23) "http://example.org/addr"
}

参考

  • SimpleXMLElement::getNamespaces() - ドキュメントで使用している名前空間を返す
  • SimpleXMLElement::registerXPathNamespace() - 次の XPath クエリ用の prefix/ns コンテキストを作成する

User Contributed Notes

There are no user contributed notes for this page.


XML 要素の名前を取得する

  • ≪ SimpleXMLElement::getDocNamespaces
  • SimpleXMLElement::getNamespaces ≫
  • PHP Manual
  • SimpleXMLElement
  • XML 要素の名前を取得する

SimpleXMLElement::getName

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

SimpleXMLElement::getName — XML 要素の名前を取得する

説明

public SimpleXMLElement::getName(): string

XML 要素の名前を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

getName メソッドは、 SimpleXMLElement オブジェクトが参照している XML タグの名前を string で返します。

例

注意:

この例では example.php をインクルードしていますが、これは 基本的な使用法 の最初のサンプルにある XML 文字列を参照しています。

例1 XML 要素の名前の取得

<?php
include 'example.php';
$sxe = new SimpleXMLElement($xmlstr);

echo $sxe->getName() . "\n";

foreach ($sxe->children() as $child)
{
echo $child->getName() . "\n";
}

?>

上の例の出力は以下となります。

movies
movie

User Contributed Notes

There are no user contributed notes for this page.


ドキュメントで使用している名前空間を返す

  • ≪ SimpleXMLElement::getName
  • SimpleXMLElement::getChildren ≫
  • PHP Manual
  • SimpleXMLElement
  • ドキュメントで使用している名前空間を返す

SimpleXMLElement::getNamespaces

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

SimpleXMLElement::getNamespaces — ドキュメントで使用している名前空間を返す

説明

public SimpleXMLElement::getNamespaces(bool $recursive = false): array

ドキュメントで使用している名前空間を返します。

パラメータ

recursive

指定されている場合は、親ノードおよび子ノードで使用している全ての名前空間を返します。 されていない場合は、ルートノードで使用している名前空間のみを返します。

戻り値

getNamespaces メソッドは、 名前空間名および関連付けられた URI を配列で返します。

例

例1 ドキュメントで使用している名前空間の取得

<?php

$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
<p:person id="1">John Doe</p:person>
<p:person id="2">Susie Q. Public</p:person>
</people>
XML;

$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getNamespaces(true);
var_dump($namespaces);

?>

上の例の出力は以下となります。

array(1) {
  ["p"]=>
  string(21) "http://example.org/ns"
}

参考

  • SimpleXMLElement::getDocNamespaces() - ドキュメントで宣言されている名前空間を返す
  • SimpleXMLElement::registerXPathNamespace() - 次の XPath クエリ用の prefix/ns コンテキストを作成する

User Contributed Notes

thiago at osfeio dot com 29-Oct-2013 04:23
this article has more info : http://www.sitepoint.com/parsing-xml-with-simplexml/
harry at nospam dot thestorm dot plus dot com 17-Feb-2012 02:21
If the namespace is nested in the xml, then you will have to loop over the nodes.

<?php

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
  <people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
      <items>
            <title>This is a test of namespaces and my patience</title>
            <p:person id="1">John Doe</p:person>
            <p:person id="2">Susie Q. Public</p:person>
            <p:person id="1">Fish Man</p:person>
      </items>
  </people>
XML;

$sxe = new SimpleXMLElement($xml);

foreach ($sxe as $out_ns)
{
    $ns = $out_ns->getNamespaces(true);

    $child = $out_ns->children($ns['p']);

    foreach ($child as $out)
    {
        echo $out . "<br />";
    }
}
?>
harry at nospam dot thestorm dot plus dot com 16-Feb-2012 12:50
To read a namespace node you have to use the children method.

<?php

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
    <p:person id="1">John Doe</p:person>
    <p:person id="2">Susie Q. Public</p:person>
</people>
XML;

$sxe = new SimpleXMLElement($xml);

$ns = $sxe->getNamespaces(true);

$child = $sxe->children($ns['p']);

foreach ($child->person as $out_ns)
{
    echo $out_ns;
}

?>


現在の要素の子要素を返す

  • ≪ SimpleXMLElement::getNamespaces
  • SimpleXMLElement::hasChildren ≫
  • PHP Manual
  • SimpleXMLElement
  • 現在の要素の子要素を返す

SimpleXMLElement::getChildren

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

SimpleXMLElement::getChildren — 現在の要素の子要素を返す

説明

public SimpleXMLElement::getChildren(): ?SimpleXMLElement
警告

PHP 8.0 より前のバージョンでは、 SimpleXMLElement::getChildren() は サブクラスの SimpleXMLIterator でのみ宣言されていました。

このメソッドは、現在の SimpleXMLElement 要素の子要素を含む SimpleXMLElement オブジェクトを返します。

パラメータ

この関数にはパラメータはありません。

戻り値

現在の要素の子要素を含む SimpleXMLElement オブジェクトを返します。

例

例1 現在の要素の子要素を返す

<?php
$xml = <<<XML
<books>
<book>
<title>PHP Basics</title>
<author>Jim Smith</author>
</book>
<book>XML basics</book>
</books>
XML;

$xmlElement = new SimpleXMLElement($xml);
for ($xmlElement->rewind(); $xmlElement->valid(); $xmlElement->next()) {
foreach($xmlElement->getChildren() as $name => $data) {
echo "The $name is '$data' from the class " . get_class($data) . "\n";
}
}
?>

上の例の出力は以下となります。

The title is 'PHP Basics' from the class SimpleXMLElement
The author is 'Jim Smith' from the class SimpleXMLElement

User Contributed Notes

There are no user contributed notes for this page.


現在の要素が子要素を持つかどうかを調べる

  • ≪ SimpleXMLElement::getChildren
  • SimpleXMLElement::key ≫
  • PHP Manual
  • SimpleXMLElement
  • 現在の要素が子要素を持つかどうかを調べる

SimpleXMLElement::hasChildren

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

SimpleXMLElement::hasChildren — 現在の要素が子要素を持つかどうかを調べる

説明

public SimpleXMLElement::hasChildren(): bool
警告

PHP 8.0 より前のバージョンでは、 SimpleXMLElement::hasChildren() は サブクラスの SimpleXMLIterator でのみ宣言されていました。

このメソッドは、現在の SimpleXMLElement 要素が子要素を持つかどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

現在の要素が子要素を持つ場合に true、それ以外の場合に false を返します。

例

例1 現在の要素が子要素を持つかどうかを調べる

<?php
$xml = <<<XML
<books>
<book>
<title>PHP Basics</title>
<author>Jim Smith</author>
</book>
<book>XML basics</book>
</books>
XML;

$xmlElement = new SimpleXMLElement($xml);
for ($xmlElement->rewind(); $xmlElement->valid(); $xmlElement->next()) {
if ($xmlElement->hasChildren()) {
var_dump($xmlElement->current());
}
}
?>

上の例の出力は以下となります。

object(SimpleXMLElement)#2 (2) {
  ["title"]=>
  string(10) "PHP Basics"
  ["author"]=>
  string(9) "Jim Smith"
}

User Contributed Notes

grummfy at gmail dot com 12-Feb-2010 01:01
Hello,

just a note for people like me who encounter the problems :

<?php
foreach($xmlIterator as $x)
{
    if($x->hasChildren())
    {
        //never reach
        echo 'x : ';
        var_dump($x->current());
    }
    if($xmlIterator->hasChildren())
    {
        echo 'iterator : ';
        var_dump($x->current()); //all time null
        var_dump($xmlIterator->current());
    }
}
?>


現在のキーを返す

  • ≪ SimpleXMLElement::hasChildren
  • SimpleXMLElement::next ≫
  • PHP Manual
  • SimpleXMLElement
  • 現在のキーを返す

SimpleXMLElement::key

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

SimpleXMLElement::key — 現在のキーを返す

説明

public SimpleXMLElement::key(): string
警告

PHP 8.0 より前のバージョンでは、 SimpleXMLElement::key() はサブクラスの SimpleXMLIterator でのみ宣言されていました。

このメソッドは、現在の要素の XML タグ名を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

現在の SimpleXMLElement オブジェクトが参照する要素の XML タグ名を返します。

エラー / 例外

失敗した場合にError をスローします。

変更履歴

バージョン | 説明
8.1.0 | SimpleXMLElement::key() を不正なイテレータを渡してコールすると、 Error をスローするようになりました。 これより前のバージョンでは、false を返していました。

例

例1 現在の XML タグキーの取得

<?php
$xmlElement = new SimpleXMLElement('<books><book>PHP basics</book><book>XML basics</book></books>');

echo var_dump($xmlElement->key());
$xmlElement->rewind(); // 最初の要素に巻き戻します
echo var_dump($xmlElement->key());

?>

上の例の出力は以下となります。

bool(false)
string(4) "book"

User Contributed Notes

There are no user contributed notes for this page.


次の要素に移動する

  • ≪ SimpleXMLElement::key
  • SimpleXMLElement::registerXPathNamespace ≫
  • PHP Manual
  • SimpleXMLElement
  • 次の要素に移動する

SimpleXMLElement::next

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

SimpleXMLElement::next — 次の要素に移動する

説明

public SimpleXMLElement::next(): void

このメソッドは、SimpleXMLElement を次の要素に移動します。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

例

例1 次の要素への移動

<?php
$xmlElement = new SimpleXMLElement('<books><book>PHP Basics</book><book>XML basics</book></books>');
$xmlElement->rewind(); // 最初の要素に巻き戻します
$xmlElement->next();

var_dump($xmlElement->current());
?>

上の例の出力は以下となります。

object(SimpleXMLElement)#2 (1) {
  [0]=>
  string(10) "XML basics"
}

User Contributed Notes

There are no user contributed notes for this page.


次の XPath クエリ用の prefix/ns コンテキストを作成する

  • ≪ SimpleXMLElement::next
  • SimpleXMLElement::rewind ≫
  • PHP Manual
  • SimpleXMLElement
  • 次の XPath クエリ用の prefix/ns コンテキストを作成する

SimpleXMLElement::registerXPathNamespace

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

SimpleXMLElement::registerXPathNamespace — 次の XPath クエリ用の prefix/ns コンテキストを作成する

説明

public SimpleXMLElement::registerXPathNamespace(string $prefix, string $namespace): bool

次の XPath クエリ用の prefix/ns コンテキストを作成します。特にこれが有用なのは、 XML ドキュメントの提供者が名前空間プレフィックスを変更したような場合です。 registerXPathNamespace はプレフィックスを作成して名前空間に関連付け、 そのプレフィックスで名前空間のノードにアクセスできるようにします。 提供者側がプレフィックスを変更したとしても、コードを書き換える必要はありません。

パラメータ

prefix

ns で指定した名前空間への XPath クエリで使用する、 名前空間プレフィックス。

ns

XPath クエリで使用する名前空間。 これは XML ドキュメントで使用している名前空間と一致していなければなりません。 一致していない場合、prefix を使用した XPath クエリは何も結果を返しません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 XPath クエリで使用する名前空間プレフィックスの設定

<?php

$xml = <<<EOD
<book xmlns:chap="http://example.org/chapter-title">
<title>My Book</title>
<chapter id="1">
<chap:title>Chapter 1</chap:title>
<para>Donec velit. Nullam eget tellus vitae tortor gravida scelerisque.
In orci lorem, cursus imperdiet, ultricies non, hendrerit et, orci.
Nulla facilisi. Nullam velit nisl, laoreet id, condimentum ut,
ultricies id, mauris.</para>
</chapter>
<chapter id="2">
<chap:title>Chapter 2</chap:title>
<para>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin
gravida. Phasellus tincidunt massa vel urna. Proin adipiscing quam
vitae odio. Sed dictum. Ut tincidunt lorem ac lorem. Duis eros
tellus, pharetra id, faucibus eu, dapibus dictum, odio.</para>
</chapter>
</book>
EOD;

$sxe = new SimpleXMLElement($xml);

$sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
$result = $sxe->xpath('//c:title');

foreach ($result as $title) {
echo $title . "\n";
}

?>

上の例の出力は以下となります。

Chapter 1
Chapter 2

上の例の XML ドキュメントでは、プレフィックス chap で名前空間を指定していることを確認しておきましょう。仮に、このドキュメント (あるいはよく似た別のドキュメント) が以前に同じ名前空間に対してプレフィックス c を使用していたとしましょう。プレフィックスが変わった時点で、 これまでの XPath クエリは正しい値を返さないようになります。 そしてクエリに対して何らかの変更が必要となります。 registerXPathNamespace を使用すると、 仮に名前空間プレフィックスが変更された場合でもクエリの変更する必要がなくなります。

参考

  • SimpleXMLElement::xpath() - XML データに Xpath クエリを実行する
  • SimpleXMLElement::getDocNamespaces() - ドキュメントで宣言されている名前空間を返す
  • SimpleXMLElement::getNamespaces() - ドキュメントで使用している名前空間を返す

User Contributed Notes

Lea Hayes 12-Jan-2011 09:56
Looks like you have to use registerXPathNamespace for each node when using XPath:

<?php
$xml = simplexml_load_file($filename);

$xml->registerXPathNamespace('test', 'http://example.com');

$shopping_element = $xml->xpath('test:shopping-list');

// Breaks with out the following line:

$shopping_element->registerXPathNamespace('test', 'http://example.com');

$fruit = $shopping_element->xpath('test:fruit');
?>


最初の要素に巻き戻す

  • ≪ SimpleXMLElement::registerXPathNamespace
  • SimpleXMLElement::saveXML ≫
  • PHP Manual
  • SimpleXMLElement
  • 最初の要素に巻き戻す

SimpleXMLElement::rewind

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

SimpleXMLElement::rewind — 最初の要素に巻き戻す

説明

public SimpleXMLElement::rewind(): void

このメソッドは、SimpleXMLElement を最初の要素に巻き戻します。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

例

例1 最初の要素に巻き戻す

<?php
$xmlElement = new SimpleXMLElement('<books><book>PHP Basics</book><book>XML Basics</book></books>');
$xmlElement->rewind();

var_dump($xmlElement->current());
?>

上の例の出力は以下となります。

object(SimpleXMLElement)#2 (1) {
  [0]=>
  string(10) "PHP Basics"
}

User Contributed Notes

There are no user contributed notes for this page.


SimpleXMLElement::asXML のエイリアス

  • ≪ SimpleXMLElement::rewind
  • SimpleXMLElement::__toString ≫
  • PHP Manual
  • SimpleXMLElement
  • SimpleXMLElement::asXML のエイリアス

SimpleXMLElement::saveXML

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

SimpleXMLElement::saveXML — SimpleXMLElement::asXML() のエイリアス

説明

このメソッドは次のメソッドのエイリアスです。 SimpleXMLElement::asXML()

User Contributed Notes

There are no user contributed notes for this page.


文字列で要素の内容を返す

  • ≪ SimpleXMLElement::saveXML
  • SimpleXMLElement::valid ≫
  • PHP Manual
  • SimpleXMLElement
  • 文字列で要素の内容を返す

SimpleXMLElement::__toString

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SimpleXMLElement::__toString — 文字列で要素の内容を返す

説明

public SimpleXMLElement::__toString(): string

この要素に直接入っているテキストの内容を返します。 この要素の子要素の内部にあるテキストの内容を返してはいけません。

パラメータ

この関数にはパラメータはありません。

戻り値

成功したときは、テキストの内容を文字列で返します。 失敗したときは空文字列を返します。

例

例1 文字列で内容を取得する

<?php
$xml = new SimpleXMLElement('<a>1 <b>2 </b>3</a>');
echo $xml;
?>

上の例の出力は以下となります。

1 3

参考

  • SimpleXMLElement::asXML() - SimpleXML 要素に基づき整形式の XML 文字列を返す

User Contributed Notes

mmj at example dot net 02-Oct-2017 03:22
__toString() is not intended to be called directly.

Instead, it defines what is returned when the object is cast to string, either explicitly with:

(string)$element

Or implicitly, when used in certain contexts which would cause a conversion to string.
Patanjali 27-Mar-2016 10:55
[Someone remove that other Patanjali's note, because it has errors! :-(]

For those for whom it may not be immediately obvious from the example, the echo is what is forcing __toString() to be used.

However, to assign the text of a node (but not its children) to a variable:

$XML = new SimpleXMLElement('<p>Hello<span> world</span>.<span> Good day!</span></p>');

$Text = $XML->__toString();

is effectively:
$Text = 'Hello.'; // The <span>s are ignored.

Either of:
$Text = $XML->span->__toString();
$Text = $XML->span[0]->__toString();

is effectively:
$Text = ' world'; // Only the first <span> is used.

$Text = $XML->span[1]->__toString();

is effectively:
$Text = ' Good day!'; // Only the second <span> is used.
Patanjali 27-Mar-2016 10:36
For those for whom it may not be immediately obvious from the example, to assign the text of a node (but not its children) to a variable:

$XML = new SimpleXMLElement('<p>Hello<span> world</span>.<span> Good day!</span></p>');

Either:
$Text = $XML;
$Text = $XML->__String();

is effectively:
$Text = 'Hello.'; // The <span>s are ignored.

Either of:
$Text = $XML->span;
$Text = $XML->span[0];

is effectively:
$Text = ' world'; // Only the first <span> is used.

$Text = $XML->span[1];

is effectively:
$Text = ' Good day!'; // Only the second <span> is used.


現在の要素が有効かどうかを調べる

  • ≪ SimpleXMLElement::__toString
  • SimpleXMLElement::xpath ≫
  • PHP Manual
  • SimpleXMLElement
  • 現在の要素が有効かどうかを調べる

SimpleXMLElement::valid

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

SimpleXMLElement::valid — 現在の要素が有効かどうかを調べる

説明

public SimpleXMLElement::valid(): bool

このメソッドは、現在の要素が SimpleXMLElement::rewind() あるいは SimpleXMLElement::next() をコールした後で有効かどうかを調べます。

パラメータ

この関数にはパラメータはありません。

戻り値

現在の要素が有効な場合に true、そうでない場合に false を返します。

例

例1 現在の要素が有効かどうかを調べる

<?php
$xmlElement = new SimpleXMLElement('<books><book>SQL Basics</book></books>');
$xmlElement->rewind(); // 最初の要素に巻き戻します
echo var_dump($xmlElement->valid()); // bool(true)
$xmlElement->next(); // 次の要素に進めます
echo var_dump($xmlElement->valid()); // 要素がひとつしかないので bool(false) となります
?>

User Contributed Notes

There are no user contributed notes for this page.


XML データに Xpath クエリを実行する

  • ≪ SimpleXMLElement::valid
  • SimpleXMLIterator ≫
  • PHP Manual
  • SimpleXMLElement
  • XML データに Xpath クエリを実行する

SimpleXMLElement::xpath

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::xpath — XML データに Xpath クエリを実行する

説明

public SimpleXMLElement::xpath(string $expression): array|null|false

xpathメソッドは、 XPath expressionにマッチする SimpleXML ノードを検索します。

パラメータ

expression

XPath パス。

戻り値

SimpleXMLElement オブジェクトの配列を返します。 エラーが発生した場合は null または false を返します。

例

例1 Xpath

<?php
$string = <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
</d>
</a>
XML;

$xml = new SimpleXMLElement($string);

/* <a><b><c> を探します */
$result = $xml->xpath('/a/b/c');

foreach ($result as $node) {
echo '/a/b/c: ',$node,"\n";
}

/* 相対パスでも動作します... */
$result = $xml->xpath('b/c');

foreach ($result as $node) {
echo 'b/c: ',$node,"\n";
}
?>

上の例の出力は以下となります。

/a/b/c: text
/a/b/c: stuff
b/c: text
b/c: stuff

これら二つの結果は同じであることに注意してください。

参考

  • SimpleXMLElement::registerXPathNamespace() - 次の XPath クエリ用の prefix/ns コンテキストを作成する
  • SimpleXMLElement::getDocNamespaces() - ドキュメントで宣言されている名前空間を返す
  • SimpleXMLElement::getNamespaces() - ドキュメントで使用している名前空間を返す
  • 基本的な SimpleXML の使用法

User Contributed Notes

Filippo Vicari 28-Sep-2022 09:56
You can also search for siblings with a condition. For example immagine to need the title for a desidered language which with the two siblings tags in this XML file

<?xml version="1.0" encoding="UTF-8"?>
<IDOC BEGIN="1">
...
<PRODUCT SEGMENT="1">
    <PRODUCTCODE>005</PRODUCTCODE>
    <LANG>E</LANG>
    <TITLE>Name</TITLE>
    <LANG_ISO>EN</LANG_ISO>
</PRODUCT>
<PRODUCT SEGMENT="1">
    <PRODUCTCODE>005</PRODUCTCODE>
    <LANG>I</LANG>
    <TITLE>Name I</TITLE>
    <LANG_ISO>IT</LANG_ISO>
</PRODUCT>
...
</IDOC>

Let's break it down
<?php
"//PRODUCT" // find product tag
"//PRODUCT/LANG[.='E']" // whithin it find lang == "E"
"//PRODUCT/LANG[.='E']/../"  // go up one step
"//PRODUCT/LANG[.='E']/../TITLE" // get the title Tag content

// Combined search and find siblings ----------------------------
$xml = simplexml_load_file("fname.xml");

// Search for the TITLE field which sibling is == "E" ----------
$title_E_array = $xml->xpath("//PRODUCT/LANG[.='E']/../TITLE"); // By default gives back an array of  SimpleXmlElement
$title = (string) $xml->xpath("//PRODUCT/LANG[.='E']/../TITLE")[0]; // in this way saves only the value as a string
?>
awoerl at contentserv dot com 31-Jan-2017 12:43
I tried to use string functions in the xpath statements I'm passing, like

$oXml->xpath('substring(/foo/bar/text(), 0, 4)');

But no matter which syntax I'm trying I never the string functions to work.

Is it possible, that the xpath method does not support function calls?
Alexis Peters 11-Oct-2016 09:11
If you want this behavior for an multidimensional array you can use this:

<?php
function apath(&$a, $path, $value = NULL) {
    $pathes = explode('/',$path);

    if(count($pathes) > 1) {
        $firstPart = array_shift($pathes);
        if(!isset($a[$firstPart])) {
            $a[$firstPart] = array();
        }
        return apath($a[$firstPart], implode('/', $pathes), $value);
    } else {
        if($value){
            $a[$path] = $value;
        } else {
            return $a[$path];
        }
    }
}

apath($a, 'user/name', array('prename' => 'foo', 'lastname' => 'bar'));

$a = array();
var_dump($a);
var_dump(apath($a, 'user/name/lastname'));

?>
Gives you this:

array(1) {
  ["user"]=>
  array(1) {
    ["name"]=>
    array(2) {
      ["prename"]=>
      string(5) "foo"
      ["lastname"]=>
      string(8) "bar"
    }
  }
}
string(8) "bar"
Anonymous 30-Jan-2015 05:30
As mentioned already xpath will fail is the default namespace 'xmlns' is used like in:

<?php

$xmlstring = $string = <<<XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <fileVersion appName="xl" />
</workbook>
XML;
?>

xpath cannot search through the xml without explicitly specifying a namespace.
There are 2 options :
1. rename the 'xmlns' into something else to trick xpath into believing that no default namespace is defined.
2. register a string as the default namespace and use that string in all your queries. Unfortunatly, an empty space will not work.
No other option currently exist until XPath2.0 becomes the default library.
leonjanzen at gmail dot com 19-Oct-2014 07:48
To run an xpath query on an XML document that has a namespace, the namespace must be registered with SimpleXMLElement::registerXPathNamespace() before running the query. If the XML document namespace does not include a prefix, you must make up an arbitrary one, and then use it in your query.

<?php
$strXml= <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<mydoc xmlns="http://www.url.com/myns">
    <message>Test message</message>
</mydoc>
XML;

$xmlDoc=new \SimpleXMLElement($strXml);

foreach($xmlDoc->getDocNamespaces() as $strPrefix => $strNamespace) {
    if(strlen($strPrefix)==0) {
        $strPrefix="a"; //Assign an arbitrary namespace prefix.
    }
    $xmlDoc->registerXPathNamespace($strPrefix,$strNamespace);
}

print($xmlDoc->xpath("//a:message")[0]); //Use the arbitrary namespace prefix in the query.
?>

This will output:

Test message
BenjaminBeck at gmx dot de 13-Sep-2014 01:36
If you want to search multiple values from xml on the behalf or one value then this code can be helpfull to you.

if there is:
<Record>
  <country>Pakistan</country>
  <code>+92</code>
  <Value>100<Value>
</Record>

then try this one:
<?php
$sxe =  simplexml_load_file("countries.XML");
foreach($sxe->xpath('//RECORD') as $item) {

    $v = $row->xpath('./country[. ="Pakistan"]');
    if($v[0]){
        print $item->country;
        print $item->code;
        print $item->value;
    }

}
?>
yetihehe at yetihehe dot com 12-Jan-2011 02:21
Xpath actually knows which element is root regardless of element on which you execute it. Example:

<?php

$string = <<<XML
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <b>
  <c>code</c>
 </b>
</a>
XML;

header('content-type: text/plain');

$xml = new SimpleXMLElement($string);

//relative to root
$b0=$xml->b[0]->xpath('//c');
while(list( , $node) = each($b0)) {
    echo 'b[0]: //c: ',$node,"\n";
}

$b1=$xml->b[1]->xpath('//c');
while(list( , $node) = each($b1)) {
    echo 'b[1]: //c: ',$node,"\n";
}

echo "\n";

//relative to current element
$b0=$xml->b[0]->xpath('.//c');
while(list( , $node) = each($b0)) {
    echo 'b[0]: .//c: ',$node,"\n";
}

$b1=$xml->b[1]->xpath('.//c');
while(list( , $node) = each($b1)) {
    echo 'b[1]: .//c: ',$node,"\n";
}

?>

Will return:
b[0]: //c: text
b[0]: //c: stuff
b[0]: //c: code
b[1]: //c: text
b[1]: //c: stuff
b[1]: //c: code

b[0]: .//c: text
b[0]: .//c: stuff
b[1]: .//c: code
stefan at efectos dot nl 09-Nov-2010 02:33
Having problems selecting information through xpath when there are namespaces in the XML?

Try this quick and dirty solution, but it works:

<?php
$objImageXml = new SimpleXMLElement($objImageXml->asXML());
?>
grummfy at gmail dot com 11-Feb-2010 04:08
On a xml that have namespace you need to do this before your xpath request (or empty array will be return) :

<?php
$string = str_replace('xmlns=', 'ns=', $string); //$string is a string that contains xml...
?>
DrupalFocus at earthlink dot net 02-Dec-2009 12:27
Looks like the relative path is relative to the SimpleXMLElement object that you call the Xpath() method on.  Basically chopping off the root element.

<?php
$string = <<<XML
<foo>
  <bar>
    <a>
     <b>
      <c>text</c>
      <c>stuff</c>
     </b>
     <d>
      <c>code</c>
     </d>
    </a>
  </bar>
</foo>
XML;

$xml = new SimpleXMLElement($string);
/* Search for children using 2nds level relative <bar><a><b><c> */
$result = $xml->xpath('a/b/c');
if ($result)
foreach($result as $node) {
    drupal_set_message(t('a/b/c: @node.', array('@node' => $node)));
}
else
  drupal_set_message(t('a/b/c: failed.'));

/* it relative to the SimpleXMLElement Search for 2nds level relative <bar><a><b><c> but where is foo */
$bar = $xml->bar;
$result = $bar->xpath('a/b/c');
foreach($result as $node) {
    drupal_set_message(t('bar->a/b/c: @node.', array('@node' => $node)));
}
?>

results in :
#
# a/b/c: failed.
# bar->a/b/c: text.
# bar->a/b/c: stuff.
behnam@zwnj 24-Sep-2009 01:34
Seems like this function cannot return the result of XPath string() [1] function.  For example if you query xpath("string(a/@b)") you will get bool(false) although the node "a" may have the attribute "b" set to a non-empty string.

[1] http://www.w3.org/TR/xpath#section-String-Functions
Anti Veeranna 17-Jun-2009 03:50
Whether it returns a false or empty array for a non-existing path seems to depend on libxml version.

I tried the following code:

<?php
$data = '<foo><bar></bar></foo>';
$xml = simplexml_load_string($data);
print gettype($xml->xpath('/first/second'));
?>

On a machine with libxml 2.6.16 and PHP 5.2.8 I got back boolean. On a different machine with libxml 2.7.3 and PHP 5.2.8/5.2.9 I got back empty array.

You can check the libxml version from command line by executing: php --ri libxml

or simply look at phpinfo() output
arealzone-czernobyl at yahoo dot de 11-Jun-2009 03:23
The simplest way to count nodes in a XML doc:

<?php
$xml = new SimpleXMLElement($xmlstr);

$xmlNode = $xml->xpath('root/yourNodeName');
$nodeCount = count($xmlNode);

echo $nodeCount;
?>
anemik 02-Jul-2008 03:46
If you want to find easly all records satisfying some condition in XML data like

....
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
   </book>
...

try example below

<?php

$xmlStr = file_get_contents('data/books.xml');
$xml = new SimpleXMLElement($xmlStr);
// seach records by tag value:
// find all book records with price higher than 40$
$res = $xml->xpath("book/price[.>'40']/parent::*");
print_r($res);

?>

You will see response like:
Array (
[0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => bk101
                )

            [author] => Gambardella, Matthew
            [title] => XML Developer's Guide
            [genre] => Computer
            [price] => 44.95
            [publish_date] => 2000-10-01
            [description] => An in-depth look at creating applications
      with XML.
        )
...
paul at pmtlogic dot com 18-Jun-2008 12:17
xpath doesn't seem to be able to handle single quotes embedded in the query itself. For instance, I want to find geo coordinates in an xml file based on country name.

xml snippet:

<zones>
<zone country="Cote d'Ivoire" fullName="Yamoussoukro" geo="6.82,-5.28" id="1050"><url prefix="1001" value="fiji.html" /><url prefix="1002" value="C" /></zone>
</zones>

The following code does not work:

<?php
$xml = simplexml_load_file("my.xml");
$result = $xml->xpath("//zone[@country='Cote d\'Ivoire']");

foreach ( $result[0]->attributes() as $key => $val ) {
    print "<div class='coords'>$key: $val</div>\n";
}
?>

I have tried many variations on the embedded single quote (i.e. escape codes) but with no result. W3C offers no explanation either.

In addition, there doesn't seem to be any way of embedding wildcards in the attribute value (you can embed wildcards in the attribute name). Otherwise the following might be a reasonable substitute in this context:

<?php $result = $xml->xpath("//zone[@country='Cote d*Ivoire']"); ?>
canuemail at gmail dot com 05-May-2008 05:05
If you want to search multiple values from xml on the behalf or one value then this code can be helpfull to you.

if there is:
<Record>
  <country>Pakistan</country>
  <code>+92</code>
  <Value>100<Value>
</Record>

then try this one:
<?php
$sxe =  simplexml_load_file("countries.XML");
foreach($sxe->xpath('//RECORD') as $item) {

    $row = simplexml_load_string($item->asXML());
    $v = $row->xpath('//country[. ="Pakistan"]');
    if($v[0]){
        print $item->country;
        print $item->code;
        print $item->value;
    }

}
?>
Hugh 18-Dec-2005 03:23
Note that this function does not ALWAYS return an array. It seems that if the specified path is not found in the document, it will return false. You need to check for the false value before using foreach, if you wish to avoid a warning (and often to handle errors or control program flow in this situation).
drewish at katherinehouse dot com 10-Jul-2005 06:16
xpath() can also be used to select elements by their attributes. For a good XPath reference check out: http://www.w3schools.com/xpath/xpath_syntax.asp

<?php
$string = <<<XML
<sizes>
    <size label="Square" width="75" height="75" />
    <size label="Thumbnail" width="100" height="62" />
    <size label="Small" width="112" height="69" />
    <size label="Large" width="112" height="69" />
</sizes>
XML;

$xml = simplexml_load_string($string);
$result = $xml->xpath("//size[@label='Large']");

// print the first (and only) member of the array
echo $result[0]->asXml();
?>

The script would print:
<size label="Large" width="112" height="69"/>


SimpleXMLIterator クラス

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

はじめに

SimpleXMLIterator は、SimpleXMLElement オブジェクトのすべてのノードに対する再帰的な反復処理を提供します。

クラス概要

class SimpleXMLIterator extends SimpleXMLElement {
/* 継承したメソッド */
public SimpleXMLElement::__construct(
string $data,
int $options = 0,
bool $dataIsURL = false,
string $namespaceOrPrefix = "",
bool $isPrefix = false
)
public SimpleXMLElement::addAttribute(string $qualifiedName, string $value, ?string $namespace = null): void
public SimpleXMLElement::addChild(string $qualifiedName, ?string $value = null, ?string $namespace = null): ?SimpleXMLElement
public SimpleXMLElement::asXML(?string $filename = null): string|bool
public SimpleXMLElement::attributes(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement
public SimpleXMLElement::children(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement
public SimpleXMLElement::count(): int
public SimpleXMLElement::current(): SimpleXMLElement
public SimpleXMLElement::getDocNamespaces(bool $recursive = false, bool $fromRoot = true): array|false
public SimpleXMLElement::getName(): string
public SimpleXMLElement::getNamespaces(bool $recursive = false): array
public SimpleXMLElement::getChildren(): ?SimpleXMLElement
public SimpleXMLElement::hasChildren(): bool
public SimpleXMLElement::key(): string
public SimpleXMLElement::next(): void
public SimpleXMLElement::registerXPathNamespace(string $prefix, string $namespace): bool
public SimpleXMLElement::rewind(): void
public SimpleXMLElement::__toString(): string
public SimpleXMLElement::valid(): bool
public SimpleXMLElement::xpath(string $expression): array|null|false
}

変更履歴

バージョン | 説明
8.0.0 | イテレータのメソッド (SimpleXMLIterator::hasChildren(), SimpleXMLIterator::getChildren(), SimpleXMLIterator::current(), SimpleXMLIterator::key(), SimpleXMLIterator::next(),SimpleXMLIterator::rewind(), SimpleXMLIterator::valid()) は、SimpleXMLElement に移動しました。
8.0.0 | SimpleXMLIterator は、 Stringable を新たに実装しました。

User Contributed Notes

prouchetvincent at free dot fr 10-Oct-2020 12:47
<?php
=======================================================
$index =
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <article id="8" visibility="true" filename="2020-10-08" fileExtension="xml">
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
    <article id="7" visibility="true" filename="2020-10-07" fileExtension="xml">
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
    <article id="6" visibility="true" filename="2020-10-02" fileExtension="xml">
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
    <article id="5" visibility="true" filename="2020-09-30" fileExtension="xml">
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
    <article id="4" visibility="true" filename="2020-09-26" fileExtension="xml">
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
    <article id="3" visibility="true" filename="2020-09-22"     fileExtension="xml">
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
    <article id="2" visibility="true" filename="2020-09-20"     fileExtension="xml">
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
        <article id="1" visibility="true" filename="hello world" fileExtension="xml">
            Hello World
            <tag>xml</tag>
            <tag>php</tag>
            <tag>experiment</tag>
    </article>
</root>
====================================================================
?>
If you have to use an iterator to parse your XML
and need tu get an attribute of tags of this iterator then
use the fonction
->current()
of simpleXMLIterator on your object before
->attributes()->{attibute name}
<?php
$file="";
try{
     $index = new SimpleXMLIterator ( file_get_contents ( FILEDIRECTORY. 'index.xml' ) );}
catch(Exception $e) {whatever you want to do on error}}

for( $index->rewind(); $index->valid(); $index->next() ) {
    try {
          $file = file_get_contents(FILESDIRECTORY.$index->current()->attributes()->{'fileName'}. '.xml' );
    } catch (Exception $e) {whatever you want to do on error}
    $article = new Article ();
    $article->setXMLArticle ($file);
    array_push( $this->articles, $article );
    $file ="";
    }
}
?>
This exemple use a custom made Article object that itself parse the file given to him to initialise its properties .
Here we open a file (Yes I use constant for my directories)
make it a simpleXMLIterator and parse article elements to get the filename attribute to use it to open another XML file for data collection.
don't forget !!! In PHP Object created by new ClassName() are ALWAYS given by reference that is why new Article() in inside the loop and not outside
(yhea, I did that mistake)
XMLIterator are powerfull yet harder to understand in themselves but once passed that one point.
They are very more easier to use than plain arrays.
rukkykf at gmail dot com 16-Dec-2018 06:54
I think it's worth mentioning that you need to call the rewind() method on the SimpleXMLIterator object immediately after initialization before you can start doing any other operations on the object. An example:

<?php
$xml = new SimpleXMLIterator('file.xml', null, true);

// $x here will be set to null because the rewind() method has not been called
$x = $xml->current();

$xml->rewind();

// $x here will be set to the first element
$x = $xml->current();

?>
php-lover at live dot com 05-Oct-2015 09:50
Function to extract SimpleXMLElement data to array.

function extract($sxe = null) {
    if (!$sxe instanceOf SimpleXMLElement)
        return array();

    $extract = array();

    foreach ($sxe->children() as $key => $value) {
        if (array_key_exists($key, $extract)) {
            if (!isset($extract[$key][0])) {
                $tmp_extract = $extract[$key];
                $extract[$key] = array();
                $extract[$key][0] = $tmp_extract;
            } else
                $extract[$key] = (array) $extract[$key];
        }

        if ($value->count()) {
            if (isset($extract[$key]) && is_array($extract[$key]))
                $extract[$key][] = $this->extract($value);
            else
                $extract[$key] = $this->extract($value);
        } else {
            if (isset($extract[$key]) && is_array($extract[$key]))
                $extract[$key][] = empty(strval($value)) ? null : strval($value);
            else
                $extract[$key] = empty(strval($value)) ? null : strval($value);
        }
    }

    return $extract;
}
centy2010 at hotmail dot com 16-Jul-2014 03:22
I filled my database from an XML file about 1260 Kb.
I made my process less than a second. Simply by using SimpleXML.

I give you a little example of the usage to fill a database.
Given the table universe.
With 4 columns Coords, Planet_Name, Player_id, Moon_Size.

Now You have a XML file named universe.xml with this kind of data.
I enclose the data within php tags but it's a file :p
<?php
$xml = <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<universe xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -
xsi:noNamespaceSchemaLocation="http://s127-fr.ogame.gameforge.com/api/xsd/universe.xsd" -
timestamp="1405413350" serverId="fr127">
    <planet id="1" player="1" name="Arakis" coords="1:1:2">
        <moon id="2" name="Mond" size="4998"/>
    </planet>
    <planet id="33620176" player="100000" name="GameAdmin" coords="1:1:3"/>
    <planet id="33620179" player="100003" name="Heimatplanet" coords="1:1:1"/>
    <planet id="33620186" player="100004" name="OGame Team" coords="6:250:1"/>
    <planet id="33620242" player="100058" name="KnS" coords="9:1:6">
        <moon id="33668391" name="Lune" size="8831"/>
    </planet>
</universe>
EOT;
?>

Now how to bring these data in my 4 columns table :

<?php
$newfname = $path."Universe.XML";
$mydata = new SimpleXmlIterator($newfname, 0, true);
$myquery = "INSERT INTO `".$tablename."` (`coords`,`planet_name`, `player_id`, `moon_size`) VALUES ";
for ($mydata->rewind();$mydata->valid();$mydata->next()) {
    $myquery.= " ('".$mydata->current()->attributes()['coords']
_."','".utf8_decode($mydata->current()->attributes()['name'])
_."','".utf8_decode($mydata->current()->attributes()['player'])
_."','";
    if ($mydata->haschildren()) {
        $myquery.= $mydate->current()->children()->attributes()['size']."'),";
    } else {
        $myquery.= "'),";
    }
}
$myquery = rtrim($myquery, ",");
$datatosql = mysql_query($myquery);
?>
hezll at msn dot com 11-Apr-2013 04:34
Most of the time we need to convert the XML to array or JSON , but now I have to completed the requirement of converting XML to XPath which make our template easily geting the data from XML data source due to the Xpath mapping .Here is the function:

<?php

function sxiToXpath($sxi, $key = null, &$tmp = null)
{
    $keys_arr = array();
    //get the keys count array
    for ($sxi->rewind(); $sxi->valid(); $sxi->next())
    {
        $sk = $sxi->key();
        if (array_key_exists($sk, $keys_arr))
        {
            $keys_arr[$sk]+=1;
            $keys_arr[$sk] = $keys_arr[$sk];
        }
        else
        {
            $keys_arr[$sk] = 1;
        }
    }
    //create the xpath
    for ($sxi->rewind(); $sxi->valid(); $sxi->next())
    {
        $sk = $sxi->key();
        if (!isset($$sk))
        {
            $$sk = 1;
        }
        if ($keys_arr[$sk] >= 1)
        {
            $spk = $sk . '[' . $$sk . ']';
            $keys_arr[$sk] = $keys_arr[$sk] - 1;
            $$sk++;
        }
        else
        {
            $spk = $sk;
        }
        $kp = $key ? $key . '/' . $spk : '/' . $sxi->getName() . '/' . $spk;
        if ($sxi->hasChildren())
        {
            sxiToXpath($sxi->getChildren(), $kp, $tmp);
        }
        else
        {
            $tmp[$kp] = strval($sxi->current());
        }
        $at = $sxi->current()->attributes();
        if ($at)
        {
            $tmp_kp = $kp;
            foreach ($at as $k => $v)
            {
                $kp .= '/@' . $k;
                $tmp[$kp] = $v;
                $kp = $tmp_kp;
            }
        }
    }
    return $tmp;
}

function xmlToXpath($xml)
{
    $sxi = new SimpleXmlIterator($xml);
    return sxiToXpath($sxi);
}

/**
 *  How to use the function
 */
$xml = <<<EOT
<?xml version="1.0" encoding="utf8" ?>
<data>
   <item ID="30001">
      <Company>Navarro Corp.</Company>
   </item>
   <item ID="30002" IDd="30002">
      <Company>Performant Systems</Company>
   </item>
   <item ID="30003">
      <Company id='id_test'><g id='id_g'>glove</g></Company>
   </item>
    <item>
    </item>
</data>
EOT;

$rs = xmlToXpath($xml);
print_r($rs);

/**
 * the results may lkie this:
Array
(
    [/data/item[1]/Company[1]] => Navarro Corp.
    [/data/item[1]/@ID] => SimpleXMLIterator Object
        (
            [0] => 30001
        )
    [/data/item[2]/Company[1]] => Performant Systems
    [/data/item[2]/@ID] => SimpleXMLIterator Object
        (
            [0] => 30002
        )

    [/data/item[2]/@IDd] => SimpleXMLIterator Object
        (
            [0] => 30002
        )

    [/data/item[3]/Company[1]/g[1]] => glove
    [/data/item[3]/Company[1]/g[1]/@id] => SimpleXMLIterator Object
        (
            [0] => id_g
        )

    [/data/item[3]/Company[1]/@id] => SimpleXMLIterator Object
        (
            [0] => id_test
        )

    [/data/item[3]/@ID] => SimpleXMLIterator Object
        (
            [0] => 30003
        )

    [/data/item[4]] =>

)
 */

echo "Total:" . count($rs);

echo "<hr>";
/* You can check the xpath result like this */
$xml = new SimpleXMLElement($xml);
foreach ($rs as $k => $v)
{
    echo "Xpath:" . $k . " |Value:" . $v . " ";
    var_dump($xml->xpath($k));
    echo "<br>";
}
ajnsit dot NOSPAM at gmail dot com 17-Mar-2011 10:14
Here's a simple function to convert an XML string to an array -

<?php
// PHP5.3 and above only
function parse($str) {
    $f = function($iter) {
      foreach($iter as $key=>$val)
        $arr[$key][] = ($iter->hasChildren())?
          call_user_func (__FUNCTION__, $val)
          : strval($val);
      return $arr;
    };
    return $f(new SimpleXmlIterator($str, null));
}
?>

PHP 5.2 and below do not have anonymous functions.
But you can create a helper function to achieve the same thing -

<?php
  function parse($str) {
    return parseHelper(new SimpleXmlIterator($str, null));
  }
  function parseHelper($iter) {
    foreach($iter as $key=>$val)
      $arr[$key][] = ($iter->hasChildren())?
        call_user_func (__FUNCTION__, $val)
        : strval($val);
    return $arr;
  }
?>

Using it is straightforward enough -

<?php

$xml = '
<movies>
  <movie>abcd</movie>
  <movie>efgh</movie>
  <movie>hijk</movie>
</movies>';
var_dump(parse($xml));

?>

This will output -

array
  'movie' =>
    array
      0 => string 'abcd' (length=4)
      1 => string 'efgh' (length=4)
      2 => string 'hijk' (length=4)
ratfactor at gmail dot com 19-Jul-2009 05:08
The documentation is a bit sparse for SimpleXmlIterator.  Here is an example showing the use of its methods. xml2Array and sxiToArray work together to convert an XML document to an associative array structure.

The contents of cats.xml:
======================================
<cats>
  <cat>
      <name>Jack</name>
      <age>2</age>
      <color>grey</color>
      <color>white</color>
  </cat>
  <cat>
      <name>Maxwell</name>
      <age>12</age>
      <color>orange</color>
      <color>black</color>
  </cat>
</cats>
======================================

<?php
function xml2array($fname){
  $sxi = new SimpleXmlIterator($fname, null, true);
  return sxiToArray($sxi);
}

function sxiToArray($sxi){
  $a = array();
  for( $sxi->rewind(); $sxi->valid(); $sxi->next() ) {
    if(!array_key_exists($sxi->key(), $a)){
      $a[$sxi->key()] = array();
    }
    if($sxi->hasChildren()){
      $a[$sxi->key()][] = sxiToArray($sxi->current());
    }
    else{
      $a[$sxi->key()][] = strval($sxi->current());
    }
  }
  return $a;
}

// Read cats.xml and print the results:
$catArray = xml2array('cats.xml');
print_r($catArray);
?>

Results (reformatted a bit for compactness and clarity):
======================================
Array(
  [cat] => Array(
    [0] => Array(
      [name] => Array(  [0] => Jack    )
      [age] => Array(   [0] => 2       )
      [color] => Array( [0] => grey,
                        [1] => white   )
    )
    [1] => Array(
      [name] => Array(  [0] => Maxwell )
      [age] => Array(   [0] => 12      )
      [color] => Array( [0] => orange
                        [1] => black   )
    )
  )
)


SimpleXML 関数

目次

  • simplexml_import_dom — DOM ノードから SimpleXMLElement オブジェクトを取得する
  • simplexml_load_file — XMLファイルをパースし、オブジェクトに代入する
  • simplexml_load_string — XML 文字列をオブジェクトに代入する

User Contributed Notes

Pyetro Costa [pyetrosafe at gmail dot com] 07-Dec-2018 08:48
After viewing the xml2array function of "http://www.php.net/manual/en/ref.simplexml.php#103617" and the "http://php.net/manual/en/ref.simplexml.php # 112038 "and still have made a change to convert empty tags to null ... I felt the need to work with the result as an object, keeping arrays like arrays. Arriving at this function:
<?php

    private function xml2Object($xmlObject, $out = null) {
        $out = (is_object($xmlObject) ? new \stdClass : array());
        foreach ((array) $xmlObject as $index => $node )
            if (is_array($out)) {
                $out[$index] = (is_object($node) || is_array($node)) ? (($node instanceof \SimpleXMLElement) && count((array) $node)==0 ? null : $this->xml2Object($node)) : $node;
            } else
                $out->{$index} = (is_object($node) || is_array($node)) ? (($node instanceof \SimpleXMLElement) && count((array) $node)==0 ? null : $this->xml2Object($node)) : $node;
        return $out;
    }
?>

And the results of function can be seen below:
<?php
    $xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8" standalone="no"?><results><l1_elm1><l2_elm1>Some Text</l2_elm1><l2_elm2/></l1_elm1><l1_elm2><l2_elm1><l3_elm1>Array Index[0] - First property</l3_elm1><l3_elm2>Array Index[0] - Second property</l3_elm2><l3_elm3>Array Index[0] - Third property</l3_elm3></l2_elm1><l2_elm1><l3_elm1>Array Index[1] - First property</l3_elm1><l3_elm2>Array Index[1] - Second property</l3_elm2><l3_elm3>Array Index[1] - Third property</l3_elm3></l2_elm1></l1_elm2><l1_elm3/></results>');

    var_dump( $this->xml2Object($xml) );

    // var_dump xml2Object results
    object(stdClass)#339 (3) {
      ["l1_elm1"]=>object(stdClass)#344 (2) {
        ["l2_elm1"]=>string(9) "Some Text"
        ["l2_elm2"]=>NULL
      }
      ["l1_elm2"]=>object(stdClass)#347 (1) {
        ["l2_elm1"]=>array(2) {
          [0]=>object(stdClass)#348 (3) {
            ["l3_elm1"]=>string(31) "Array Index[0] - First property"
            ["l3_elm2"]=>string(32) "Array Index[0] - Second property"
            ["l3_elm3"]=>string(31) "Array Index[0] - Third property"
          }
          [1]=>object(stdClass)#349 (3) {
            ["l3_elm1"]=>string(31) "Array Index[1] - First property"
            ["l3_elm2"]=>string(32) "Array Index[1] - Second property"
            ["l3_elm3"]=>string(31) "Array Index[1] - Third property"
          }
        }
      }
      ["l1_elm3"]=>NULL
    }

    // VarDump Symphony xml2Object results something like
    object (#345) {
      +"l1_elm1": object (#339) {
        +"l2_elm1": "Some Text"
        +"l2_elm2": null
      }
      +"l1_elm2": object (#347) {
        +"l2_elm1": array(2) {
          [0] => object (#348) {
            +"l3_elm1": "Array Index[0] - First property"
            +"l3_elm2": "Array Index[0] - Second property"
            +"l3_elm3": "Array Index[0] - Third property"
          }
          [1] => object (#349) {
            +"l3_elm1": "Array Index[1] - First property"
            +"l3_elm2": "Array Index[1] - Second property"
            +"l3_elm3": "Array Index[1] - Third property"
          }
        ]
      }
      +"l1_elm3": null
    }
?>
Pyetro Costa [pyetrosafe at gmail dot com] 07-Dec-2018 02:55
This is just a new adjustment to the http://php.net/manual/en/ref.simplexml.php#112038 's function.

Adding the check by is_array has increased the conversion to lower levels by at least 3 levels, however empty Tags are converted to SimpleXMLElement class objects, adding a type and size check, convert these empty Tags to null.

See example:
<?php
    // The http://php.net/manual/en/ref.simplexml.php#112038 's function
    function xml2array($xmlObject, $out = array ()) {
        foreach ((array) $xmlObject as $index => $node )
            $out[$index] = (is_object($node) || is_array($node)) ? xml2array($node) : $node;
        return $out;
    }

    $xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8" standalone="no"?><results><level1><l1_elm1><level2><l2_elm1>Some Text</l2_elm1><l2_elm2/></level2></l1_elm1><l1_elm2>Other String</l1_elm2><l1_elm3/></level1></results>');
    $XML2Array = xml2array($xml);
    var_dump($xml);
    var_dump($XML2Array);

    // The result is like bellow
    // simplexml_load_string results
    object(SimpleXMLElement)#227 (1) {
      ["level1"]=>object(SimpleXMLElement)#226 (3) {
        ["l1_elm1"]=>object(SimpleXMLElement)#236 (1) {
          ["level2"]=>object(SimpleXMLElement)#238 (2) {
            ["l2_elm1"]=>string(9) "Some Text"
            ["l2_elm2"]=>object(SimpleXMLElement)#239 (0) {}
          }
        }
        ["l1_elm2"]=>string(12) "Other String"
        ["l1_elm3"]=>object(SimpleXMLElement)#237 (0) {}
      }
    }

    // xml2array function results
    array(1) {
      ["level1"]=>array(3) {
        ["l1_elm1"]=>array(1) {
          ["level2"]=>array(2) {
            ["l2_elm1"]=>string(9) "Some Text"
            ["l2_elm2"]=>array(0) {}
          }
        }
        ["l1_elm2"]=>string(12) "Other String"
        ["l1_elm3"]=>array(0) {}
      }
    }
?>

Now, check node type and size, if node instanceof SimpleXMLElement and count == 0, set null to value (or empty string "" as you prefer);
<?php
    function xml2array($xmlObject, $out = array ()) {
        foreach ((array) $xmlObject as $index => $node )
            $out[$index] = (is_object($node) || is_array($node)) ? (($node instanceof \SimpleXMLElement) && count((array) $node)==0 ? null : xml2array($node)) : $node;
        return $out;
    }

    $xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8" standalone="no"?><results><level1><l1_elm1><level2><l2_elm1>Some Text</l2_elm1><l2_elm2/></level2></l1_elm1><l1_elm2>Other String</l1_elm2><l1_elm3/></level1></results>');
    var_dump(xml2array($xml));

    // And now the result is like bellow
    array(1) {
      ["level1"]=>array(3) {
        ["l1_elm1"]=>array(1) {
          ["level2"]=>array(2) {
            ["l2_elm1"]=>string(9) "Some Text"
            ["l2_elm2"]=>NULL
          }
        }
        ["l1_elm2"]=>string(12) "Other String"
        ["l1_elm3"]=>NULL
      }
    }
?>
brandonkirsch at gmail dot com 09-Sep-2013 07:41
Contrary to other notes posted here, SimpleXML *DOES NOT* properly handle non-UTF8 encoded XML documents.

A proper "iso-8859-1" declared and encoded XML document will not parse with SimpleXML for PHP 5.2.17 or 5.5.1 when using extended characters (that is, byte values greater than 127)

DOMDocument, on the other hand, will correctly parse incoming iso-8859-1 XML documents and can also be used to perform character translation to UTF8:

$dom = new DOMDocument();

if($dom->loadXML($fileContents)){ // $fileContents is an XML document with iso-8859-1 encoding specified in the declaration
            $dom->encoding = 'utf-8'; // convert document encoding to UTF8
            return $dom->saveXML(); // return valid, utf8-encoded XML
William Fahria 15-Jul-2013 07:34
A simple implementation:
You can inform a direct XML in text format to the function.

function eoXML2Array($xmlContent, $out = array()){
    $xmlObject = is_object($xmlContent) ? $xmlContent : simplexml_load_string($xmlContent);
    foreach((array) $xmlObject as $index => $node)
        $out[$index] = ( is_object($node) || is_array($node) ) ? eoXML2Array( $node ) : $node;
    return $out;
}

Usage: $your_array = eoXML2Array(your xml text);
r dot m dot 0100101 at gmail dot com 25-Apr-2013 03:00
This is a slight adjustment to http://www.php.net/manual/en/ref.simplexml.php#103617 's function.
The function given by them would convert a simpleXML to an array but only at the highest level. Once you add the is_array check with the is_object it should convert each level to an array (well it did for me through 3 levels).

function simpleXmlObjectToArray ( $xmlObject, $out = array () )
{
    foreach ( (array) $xmlObject as $index => $node )
        $out[$index] = ( is_object ( $node ) || is_array($node) )
        ? simpleXmlObjectToArray ( $node )
        : $node;

    return $out;
}
Happy Coding!
Eric 29-Jan-2013 03:00
If the SimpleXMLObject contains an array, adding is_array() allows the function to keep digging for Objects.

<?php
function xml2array ( $xmlObject, $out = array () )
{
        foreach ( (array) $xmlObject as $index => $node )
            $out[$index] = ( is_object ( $node ) ||  is_array ( $node ) ) ? xml2array ( $node ) : $node;

        return $out;
}
?>
thomas at guenneguez dot com 14-Dec-2011 02:36
Merge two xml only with SimpleXML :
Function corrected if note containe only value.

<?php
function mergeXML(&$base, $add)
{
    if ( $add->count() != 0 )
        $new = $base->addChild($add->getName());
    else
        $new = $base->addChild($add->getName(), $add);
    foreach ($add->attributes() as $a => $b)
    {
        $new->addAttribute($a, $b);
    }
    if ( $add->count() != 0 )
    {
        foreach ($add->children() as $child)
        {
            mergeXML($new, $child);
        }
    }
}
?>

Use : <?php mergeXML($xmlElement, simplexml_load_string($toMerge)) ?>
julien dot breiner at laposte dot net 09-Dec-2011 10:31
Merge two xml only with SimpleXML :

<?php
private function mergeXML(&$base, $add)
{
    $new = $base->addChild($add->getName());
    foreach ($add->attributes() as $a => $b) {
        $new[$a] = $b;
    }
    foreach ($add->children() as $child) {
        $this->mergeXML($new, $child);
    }
}?>

Use : <?php mergeXML($xmlElement, simplexml_load_string($toMerge)) ?>
k dot antczak at livedata dot pl 22-Apr-2011 01:08
A quick snippet which converts XML Object into array:

<?php
function xml2array ( $xmlObject, $out = array () )
{
        foreach ( (array) $xmlObject as $index => $node )
            $out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;

        return $out;
}
?>

Have fun! ;-)
help :-) @ theapotek :-) com 08-Apr-2011 12:54
If you are having trouble accessing CDATA in your simplexml document, you don't need to str_replace/preg_replace the CDATA out before loading it with simplexml.

You can do this instead, and all your CDATA contents will be merged into the element contents as strings.

$xml = simplexml_load_file($xmlfile,
'SimpleXMLElement', LIBXML_NOCDATA);
Andrez zenarter at hotmail dot com 16-Jul-2009 10:56
I just wanna add an additional to
"Append/combine/merge one simplexml to another"
The parent should has attributes too.

<?php

function append_simplexml(&$simplexml_to, &$simplexml_from)
{

static $firstLoop=true;

//Here adding attributes to parent
if( $firstLoop )
            {
                foreach( $simplexml_from->attributes() as $attr_key => $attr_value )
                {
                    $simplexml_to->addAttribute($attr_key, $attr_value);
                }
            }

foreach ($simplexml_from->children() as $simplexml_child)
    {
        $simplexml_temp = $simplexml_to->addChild($simplexml_child->getName(), (string) $simplexml_child);
        foreach ($simplexml_child->attributes() as $attr_key => $attr_value)
        {
            $simplexml_temp->addAttribute($attr_key, $attr_value);
        }

       $firstLoop=false;

        append_simplexml($simplexml_temp, $simplexml_child);
    }

unset( $firstLoop=false );
}

?>

I have aproblem to assign an object into a variable used as an object later, Then i found the code above, it solve half of my problem. I have it should have the parent name assign too but it didnt. Any better code?
Douglas Marsh 06-Jul-2009 08:53
SimpleXML is really nice for loading/converting XML data into native PHP data structures. I was considering crude searching of SVG for the width/height and since it really is an XML file... I found a SUPER easy method for parsing out the information I wanted:

<?php
// putting incomplete SVG data inline for readability
$RawXML = <<< XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://www.example.com/dc"
   xmlns:cc="http://www.example.com/cc"
   xmlns:rdf="http://www.example.com/rdf"
   xmlns:svg="http://www.example.com/svg"
   xmlns="http://www.example.com/"
   xmlns:sodipodi="http://www.example.com/sodipodi"
   xmlns:inkscape="http://www.example.com/inkscape"
   id="svg2"
   sodipodi:version="0.32"
   inkscape:version="0.46"
   width="586.25"
   height="743.75"
   xml:space="preserve"
   sodipodi:docname="some_svg_file.svg"
   inkscape:output_extension="org.inkscape.output.svg.inkscape">
 <!-- portions removed to keep this short -->
</svg>
XML;

$svg = new SimpleXMLElement($RawXML);

$height = $svg['height'];
$width = $svg['width'];

echo "The width x height is: ${width} x ${height} \n";

?>
info at ajaxforum dot ru 17-Jun-2009 12:32
Append/combine/merge one simplexml to another:

<?php
include 'example.php';
$el1 = new SimpleXMLElement($xmlstr);
$el2 = new SimpleXMLElement($xmlstr);

// wrong way!
// php convert $el2->movie[0] to string silently
$el1->addChild('movie', $el2->movie[0]);

// wrong way!
// php 5.1 convert $el2->movie[0] to string and generate Warning: It is not yet possible to assign complex types to properties. It is not possible to assign complex types to nodes
// php 5.2 convert $el2->movie[0] to string silently
$el1->addChild('movie');
$el1->movie[2] = $el2->movie[0];

// right way!
$el1_movie = $el1->addChild('movie');
append_simplexml($el1_movie, $el2->movie[0]);

echo "<pre>"; print_r($el1); echo "</pre>";

/**
 * Add one simplexml to another
 *
 * @param object $simplexml_to
 * @param object $simplexml_from
 * @author Boris Korobkov
 * @link http://www.ajaxforum.ru/
 */
function append_simplexml(&$simplexml_to, &$simplexml_from)
{
    foreach ($simplexml_from->children() as $simplexml_child)
    {
        $simplexml_temp = $simplexml_to->addChild($simplexml_child->getName(), (string) $simplexml_child);
        foreach ($simplexml_child->attributes() as $attr_key => $attr_value)
        {
            $simplexml_temp->addAttribute($attr_key, $attr_value);
        }

        append_simplexml($simplexml_temp, $simplexml_child);
    }
}
?>
codejunky32 at NOSPAM dot com 22-May-2009 08:45
Just wanted to add a post as to how you can extract the value from a SimpleXMLElement. Its not as straightforward as you think. Because its a complex object you can't just access the element directly. Here is a sample of data that represents a var_dump of a SimpleXmlElement

array(1) {
  [0]=>
  object(SimpleXMLElement)#13 (2) {
    ["@attributes"]=>
    array(1) {
      ["name"]=>
      string(5) "title"
    }
    [0]=>
    string(19) "PHP Tech Book"
  }
}

If you want to extract the title of the book you have to cast the specified element to a string like so.
$newTitle = (string) $title[0];

The $title variable is the SimpleXMLElement that you have extracted from the xml document using simplexml_load_string for instance.  To initially access the title element from the xml document you can do like so, using xpath.
$title = $doc->xpath('str[@name="title"]');

Hope this helps someone out there.
james dot ellis at gmail dot com 28-Aug-2008 06:55
While SimpleXML is a powerful tool, developers using it to process and handle large XML documents & strings should take into careful consideration its memory usage requirements.
SimpleXML requires the entire XML tree to be available prior to any processing actions on that tree -- this requires the entire tree to be in memory. Ok for a 40kb XML file but when dealing with > 100MB files you will see performance degradation, especially if you have a busy server.

An alternative to processing large XML files is the XMLReader class, which operates in streaming mode, of which an excellent tutorial is presented here:
http://www.ibm.com/developerworks/library/x-pullparsingphp.html

XML is an incredibly verbose format. If you are dealing with large data structures, especially in web services, do you you actually need to represent the data as an XML tree? - other serialisation formats such as JSON, Serialised PHP, Google Protocol Buffers (http://code.google.com/p/protobuf/) and even CSV can remarkably reduce processing time, bandwidth and load  when dealing with large files. A 110MB XML file can become a 65MB CSV file, with the same data in it, simply because the data identifiers (tags) are only represented once in the entire document.
m0sh3 at hotmail dot com 22-May-2008 03:24
Be aware of quirks like this one:

<?php

$a = new SimpleXMLElement('<a><b/></a>');

$a->b = 'test &amp; test';
$a->c = 'test &amp; test';

print_r($a);
/*
OUTPUT:

SimpleXMLElement Object
(
    [b] => test & test
    [c] => test &amp; test
)
*/
nathan at gimpstraw dot com 05-Apr-2008 09:43
I'm using SimpleXML to process data sent back from an API request, and I ran into the CDATA problem and the error you get from html entities, and here is a solution i came up with, don't know if it's the most practical, but it's working.

<?php
$str = <<< XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<menu>
    <item>
        <title><![CDATA[Caf&eacute;]]></title>
        <description><![CDATA[Some description.]]></description>
    </item>
</menu>
XML;

$str = preg_replace("/\<\!\[CDATA\[(.*?)\]\]\>/ies", "'[CDATA]'.base64_encode('$1').'[/CDATA]'", $str);
$xml = new SimpleXMLElement($str);

// Return item title's
foreach ($xml->item as $item) {
    $tmp = (string) $item->title;
    $tmp = preg_replace("/\[CDATA\](.*?)\[\/CDATA\]/ies", "base64_decode('$1')", $tmp);
    echo $tmp;
}
?>
ngkongs at gmail dot com 19-Mar-2008 10:44
fix the function i posted before, have a wrong quote placement

function implode2($glue="", $var){
    if ($var){
        foreach ($var as $value){
            $array[]=strval($value);
        }
        return implode($glue, $array);
    }
    else return false;
}
philippe_marc_--a---t--_novartis_com 12-Feb-2008 09:46
TIP: if you run into memory issue using simpleXML.
You may want to use PHP>5.2.5 in order to avoid that: http://bugs.php.net/bug.php?id=38604
If not possible, avoid "foreach ( $xmldata->node as $node )" like calls.
andrvm 02-Jan-2008 03:01
<?php
/**
    * Remove node/nodes xml with xpath
    *
    * @param SimpleXMLElement                 $xml
    * @param string XPath                     $path
    * @param string ('one'|'child'|'all')     $multi
    *
    * Use:
    *
    * Example xml file - http://ru2.php.net/manual/ru/ref.simplexml.php
    *
    * $xml = simplexml_load_file($xmlfile);
    *
    * //1. remove only 1 node (without child nodes)
    * //   $path must return only 1 (unique) node without child nodes
    * removeNode($xml, '//movie/rating[@type="thumbs"]');
    *
    * //2. remove 1 node (with 1 child nodes)
    * //    $path can return any nodes - will be removed only first node
    * //   with all child nodes
    * removeNode($xml, '//characters', 'child')
    *
    * //3. remove all nodes (with child nodes)
    * //   $path can return any nodes - will be removed all
    * //   with child nodes
    * removeNode($xml, '//rating', 'all')
    *
    * $xml->asXML($xmlfile);
    *
    */
   function removeNode($xml, $path, $multi='one')
   {
       $result = $xml->xpath($path);

          # for wrong $path
          if (!isset($result[0])) return false;

          switch ($multi) {
              case 'all':
                    $errlevel = error_reporting(E_ALL & ~E_WARNING);
                    foreach ($result as $r) unset ($r[0]);
                    error_reporting($errlevel);
                    return true;

                case 'child':
                   unset($result[0][0]);
                   return true;

                case 'one':
                   if (count($result[0]->children())==0 && count($result)==1) {
                       unset($result[0][0]);
                       return true;
                   }

                default:
                      return false;
          }
 }
?>

p.s. after use (if deleted all nodes):
<?php

   function trimXml($xmlfile)
   {
       $dom = new DOMDocument();

          $dom->preserveWhiteSpace = false;

         if (!$dom->load($xmlfile)) return false;

         $dom->formatOutput = true;

         if (!$dom->save($xmlfile)) return false;

         return true;
   }
?>
onPHP5.com 17-Nov-2007 04:37
It does not say in the docs, but SimpleXML will convert all text into UTF-8, if the source XML declaration has another encoding. Eg, if the source has the following XML decl:

<?xml version="1.0" encoding="windows-1251" ?>

all the text in the resulting SimpleXMLElement will be in UTF-8 automatically.
lordi at msdi dot ca 23-Oct-2007 05:35
If you need to do math calculations on values extracted from simplexml document, you might need to cast the value as float to prevent precision loss. Here is an example:

<?php
    $objXML = new SimpleXMLElement('<test x="-123.45"></test>');

    //Shows correctly
    echo $objXML['x']."\n";

    //We loose the decimals
    echo $objXML['x'] + $objXML['x']."\n";

    $x = $objXML['x'];

    //This works if we cast the amounts
    echo (float)$objXML['x'] + (float)$objXML['x']."\n";

    //Calculated on a string, no problem
    echo "-123.45" + "-123.45";

?>

This is due to the fact that $objXML['x'] is not a string (php would cast it automatically) neither a float, but a SimpleXMLElement object.

"echo var_dump($x);" will output this
~~
object(SimpleXMLElement)#3 (1) {
  [0]=>
  string(7) "-123.45"
}
~~

I opened a bug request on php but here is the answer they gave me:

~~
Status: Won't fix

The behavior is defined by the engine not the extension. When performing mathematical operations on objects, they are treated as integers. It is up to the user to cast the object to the appropriate type to maintain proper precision.
~~
cmsa at gmx dot de 27-Aug-2007 05:07
I had a problem with entities.

My first solution:
I saved Data that way:
$ENTRY_->
addchild('Nachricht',htmlentities($_POST["blog"]));

Had Entities in the XML-File like:
<!ENTITY auml "&amp;auml">

And I loaded the Data that way:
html_entity_decode($ENTRY->Nachname);

But after saving and
loading the xml-file the entity-entry
<!ENTITY auml "&amp;auml">
disappeared. strange...

My second solution:
With saving the Data this way:
$ENTRY_->
addchild('Nachricht',htmlentities(htmlentities($_POST["blog"])));

I can now load it with html_entity_decode without the
 entity-entry in the XML-file!
I tested it with aou.

Hope it helpes.
karsten dot bruch at bms-verlage dot de 16-Aug-2007 08:28
When creating a new XML document and adding text with umlauts and such

<?php $SimpleXMLElement->asXML(); ?>

will silently NOT output any content with umlauts.

Use htmlentities () while adding Umlauts & co to solve the "problem"
anthony dot parsons at manx dot net 03-Aug-2007 07:40
If you're handling lots of HTML or mixed-content XML you'll probably want to use the DOM functions instead of SimpleXML. Take this for example:
<?php
$html = new SimpleXMLElement('<div><p>Some text, <a href="#">a link,</a> more text</p></div>');

echo $html->p->a,"<br>\n"; // "a link,"
echo $html->p;             // "Some text, more text" (!)
?>
In the above example reconstructing the original markup is impossible because of the way SimpleXML represents the data.
php at werner dash ott dot de 28-Mar-2007 06:03
Concerning SimpleXML and sessions:

When creating a SimpleXML object (to be precise: a SimpleXMLElement object) in the context of a session and storing it in $_SESSION['XMLobject'], this object does not "survive" the session!

By the time re-entering the session, print_r($_SESSION['XMLobject']) says:

['XMLobject'] => SimpleXMLElement Object
Warning:  Node no longer exists in /your_php_file.php on line xyz
   (
   )

(Message simplified for the sake of better readability.)
codje2 at lboro dot ac dot uk 11-Mar-2007 01:46
Sometimes it's nice to mix up data storage types. This is a very simple SQL to XML converter. Feed it a SQL query and it outputs the result in XML.

The first paramater should be a mysql_query result
(optional)The second is the xml name for each row (i.e the second depth of XML)
(optional)The third is the name of the XML document, the root name

<?php
$result=mysql_query("SELECT * FROM users");
sql_to_xml($result,"users","members");

function sql_to_xml($mysql_result,$row_name="row",$doc_name="root")
{

    $xml= new SimpleXMLElement("<$doc_name></$doc_name>");
    while($line=mysql_fetch_assoc($mysql_result))
    {
        $row=$xml->addChild($row_name);
        foreach($line as $column => $value)
        {
            $row->$column="$value";
        }
    }
    return $xml->asXML();
}

?>
php at NOSPAM dot coutch dot com 21-Feb-2007 02:04
Memory leak when setting attributes as in example (#Example 2134. Setting values)

This probably goes unnoticed in web scripts (unless you do a LOT of xml manipulations), but I ran into this in my standalone script that processes a large number of XML files.

The following code will eat up memory quite fast:

<?php
include 'example.php';

while (true) {
  $xml = new SimpleXMLElement($xmlstr);
  $xml->movie[0]->characters->character[0]->name = 'Miss Coder';
}
?>

while this seems to behave correctly:

<?php
include 'example.php';

while (true) {
  $xml = new SimpleXMLElement($xmlstr);
  $c = $xml->xpath("//character");
  $c[0]->name = 'Miss Coder';
}
?>

This looks like bug #38604, and I just confirmed that in 6.0.0-dev (on Windows at least) it is fixed.  It is NOT fixed in 5.2.1 or  5.2.2-dev (2/21 build), so for 5.2 users, use the second form to avoid leaks.
joel [from the website] purerave.com 19-Feb-2007 05:57
It doesn't mention this anywhere, but creationg a new SimpleXMLElement object from a non-valid string throws an exception. It looks ugly in the php log as it dumps the stack in multiple lines.

The correct way to create a new SimpleXMLElement object is like so:
<?php
$xmlstr = ''; // empty to throw an exception
try {
   $xml = new SimpleXMLElement($xmlstr);
} catch (Exception $e) {
   // handle the error
   echo '$xmlstr is not a valid xml string';
}
?>
matt at mattbostock dot com 05-Nov-2006 11:40
Be careful when using var_export to debug element attributes - it won't work! Always use print() or similar for checking the contents of element attributes.
Arnaud Bienvenu 19-Oct-2006 07:35
As of PHP 5.1.4, trying to iterate on a non-existent node will actually create that node.

<?
$xml = simplexml_load_string('<root></root>');
foreach($xml->b as $dummy);
echo $xml->asXML();
?>

Gives :

<?xml version="1.0"?>
<root><b/></root>

You might think it is a bug, but PHP developers seam to consider it as a feature : http://bugs.php.net/bug.php?id=39164
Jason Sheets <jsheets at shadonet dot com> 31-May-2006 10:31
Here is my Simple XML to array function, it is recursive and has the benefit of maintaining key value relationships and has worked well for me.

<?php
function XMLToArray($xml)
{
  if ($xml instanceof SimpleXMLElement) {
    $children = $xml->children();
    $return = null;
  }

  foreach ($children as $element => $value) {
    if ($value instanceof SimpleXMLElement) {
      $values = (array)$value->children();

      if (count($values) > 0) {
        $return[$element] = XMLToArray($value);
      } else {
        if (!isset($return[$element])) {
          $return[$element] = (string)$value;
        } else {
          if (!is_array($return[$element])) {
            $return[$element] = array($return[$element], (string)$value);
          } else {
            $return[$element][] = (string)$value;
          }
        }
      }
    }
  }

  if (is_array($return)) {
    return $return;
  } else {
    return $false;
  }
}
?>
daniel dot oconnor at gmail dot com 17-May-2006 06:21
SimpleXML handles namespaces, but it's not documented very well here at all.

If you wanted to parse, say, an open office manifest file or a piece of RDF/XML, you have to get elements and attributes by the namespace url.

Example:
<?php
function display($in) {
    if (file_exists($in)) {
        $xml = simplexml_load_file($in);
    } else {
        throw new Exception($in . " does not exist");
    }

    $manifest = $xml->children('http://openoffice.org/2001/manifest');

    foreach ($manifest->xpath('//manifest:file-entry') as $file) {
        foreach ($file->attributes('http://openoffice.org/2001/manifest') as $key => $value) {
            print "Key:" . $key . "\n";
            print "Value:" . $value . "\n";
        }
    }

}
?>

File: manifest.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
 <manifest:file-entry manifest:media-type="application/vnd.sun.xml.writer" manifest:full-path="/"/>
 <manifest:file-entry manifest:media-type="application/vnd.sun.xml.ui.configuration" manifest:full-path="Configurations2/"/>
 <manifest:file-entry manifest:media-type="application/binary" manifest:full-path="layout-cache"/>
 <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
 <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/>
 <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>
 <manifest:file-entry manifest:media-type="" manifest:full-path="Thumbnails/thumbnail.png"/>
 <manifest:file-entry manifest:media-type="" manifest:full-path="Thumbnails/"/>
 <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/>
</manifest:manifest>
paul at preinheimer dot com 06-May-2005 05:11
Hi,

If you want to access an element that has a dash in its name, (as is common with the XML documents provided by the Library of Congress, as well as the NWS) you will need to handle it a little bit differently.

You can either use XPATH, which works fine, but will return an array of results every time, even if there is a single result.
eg.

<?php
$xml->xpath('/data/time-layout/start-valid-time');
?>

You can also choose just to encapsulate the element names containing a dash:
<?php $xml->data->{'time-layout'}->{'start-valid-time'} ?>

--

On a only partially related note, dealing with SimpleXML is one of the only times I have employed casting with PHP. While iterating (foreach) through the valid times, echo'ing the element worked great (it merely echo'ed the apropriate time), assigning it to another variable resulted in a SimpleXML object containing the time to be assigned, rather than just the time itself. This was resolved by casting the time to a string:

<?php
foreach($xml->data->{'time-layout'}->{'start-valid-time'} AS $time)
{
 $weatherDates[] = (string) $time;
}
?>
T CHASSAGNETTE t_chassagnette at yahoo dot fr 04-May-2005 01:57
Another method to parse an XML Document into a PHP array with SIMPLEXML inspired from Daniel FAIVRE !

<?php
function xml2php($xml)
{
    $fils = 0;
    $tab = false;
    $array = array();
    foreach($xml->children() as $key => $value)
    {
        $child = xml2php($value);

        //To deal with the attributes
        foreach($node->attributes() as $ak=>$av)
        {
            $child[$ak] = (string)$av;

        }

        //Let see if the new child is not in the array
        if($tab==false && in_array($key,array_keys($array)))
        {
            //If this element is already in the array we will create an indexed array
            $tmp = $array[$key];
            $array[$key] = NULL;
            $array[$key][] = $tmp;
            $array[$key][] = $child;
            $tab = true;
        }
        elseif($tab == true)
        {
            //Add an element in an existing array
            $array[$key][] = $child;
        }
        else
        {
            //Add a simple element
            $array[$key] = $child;
        }

        $fils++;
      }

    if($fils==0)
    {
        return (string)$xml;
    }

    return $array;

}
?>
nelson_menezes at yahoo dot co dot uk 01-Mar-2005 05:05
Note that SimpleXML expects to both read and output XML in UTF-8 encoding. You'll need to add a line such as this at the top of your input XML file if it isn't saved in UTF-8 (adjust to whatever encoding used):

<?xml version="1.0" encoding="ISO-8859-1" ?>

On the output side of things, if you're not serving/handling UTF-8, you'll need to use utf8_decode() [red. but that will only work for ISO-8859-1, not other encodings]. Common mistake: http://bugs.php.net/bug.php?id=28154
brcavanagh AT NO SPAM hotmail.com 02-Jan-2005 09:18
If you are looking to use SimpleXML for anything but reading XML documents, you should really reconsider, and use the XML DOM library.  By the time you get enough utilities implemented in DOM to handle all the set backs in SimpleXML, you will have defeated the purpose of using SimpleXML.  There are a few reasons for this, and there are already many workrounds, but the primairy issues are this

1) No complex node assignment.  You cannot switch nodes or replace them.

2) No appending new child nodes

3) Whenever you do something like $new_node = $xml_doc->node you will always get a reference even if you use a clone method, which will crash the script.

Other than that, its a great tool for reading docs.


DOM ノードから SimpleXMLElement オブジェクトを取得する

  • ≪ SimpleXML 関数
  • simplexml_load_file ≫
  • PHP Manual
  • SimpleXML 関数
  • DOM ノードから SimpleXMLElement オブジェクトを取得する

simplexml_import_dom

(PHP 5, PHP 7, PHP 8)

simplexml_import_dom — DOM ノードから SimpleXMLElement オブジェクトを取得する

説明

simplexml_import_dom(object $node, ?string $class_name = SimpleXMLElement::class): ?SimpleXMLElement

この関数は、DOM ドキュメントのノードを引数とし、 SimpleXML ノードを作成します。この新しいオブジェクトは、 この後、通常の SimpleXML 要素として使用できます。

パラメータ

node

DOM 要素ノード。

class_name

このオプションパラメータを使用すると、 simplexml_import_dom() は指定したクラスのオブジェクトを返します。このクラスは SimpleXMLElement を継承していなければなりません。

戻り値

SimpleXMLElement を返します。 失敗時に null を返します。

例

例1 DOM のインポート

<?php
$dom = new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'ドキュメントのパース時にエラーが発生しました';
exit;
}

$s = simplexml_import_dom($dom);

echo $s->book[0]->title;
?>

上の例の出力は以下となります。

blah

参考

  • dom_import_simplexml() - SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する
  • 基本的な SimpleXML の使用法

User Contributed Notes

paul dot allsopp at digital-pig dot com 06-Jun-2023 12:07
Why not just:
simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
shirkaen at gmail dot com 10-Nov-2016 06:58
/*If tags in DOM have text and some part of this text is surrounded by other tag, simple_import_dom object doesn't contain position of child tag, so rendering it back to html/xml can be a problem. Printing such a node is also peculiar. Eg.*/

//////////////////////
$text = "<body><p>Some text before <em>italic </em>and after text.</p></body>";
$dom = new DOMDocument;
$dom->loadHTML($text);
$result = simplexml_import_dom($dom);
echo $result->p;

//////////////////////
//Prints :
//Some text before and after text.

print_r($result->p);
//Prints:
//SimpleXMLElement Object ( [em] => italic )

print_r($result->p->em)
//does more or less the same:
//SimpleXMLElement Object ( [0] => italic )

var_dump($result->p);
//Prints:
//object(SimpleXMLElement)#8 (1) { ["em"]=> string(7) "italic " }

var_dump($result->p->em)
//object(SimpleXMLElement)#9 (1) { [0]=> string(7) "italic " }

//but
echo $result->p->em;
//prints:
//italic
brandonkirsch at perceptionilluminates dot com 14-Aug-2013 03:38
simplexml_import_dom() will accept DOMNodes or other SimpleXMLElements.  This has a useful purpose if you are extending the SimpleXMLElement class and would prefer the xpath() method to return your class extension instead of basic SimpleXMLElements.  For example:

class MySimpleXML extends SimpleXMLElement{
    public function xpath($xpath){
        $return = array();
        $simpleXmls = parent::xpath($xpath); // run SimpleXMLElement xpath, returning an array of SimpleXMLElements
        foreach($simpleXmls as $xml){
            $return[] = simplexml_import_dom($xml,'MySimpleXML'); // copy SimpleXMLElement, returning as MySimpleXML instance
        }
        return $return;
    }
}

Now I can create an instance of MySimpleXML, run an xpath, and get my results back as an array of MySimpleXML elements instead of the native SimpleXMLElement:

$mySimpleXml = new mySimpleXml('<root><node/></root>');

$array = $mySimpleXml->xpath('/root/node'); // returns array with a single MySimpleXml object


XMLファイルをパースし、オブジェクトに代入する

  • ≪ simplexml_import_dom
  • simplexml_load_string ≫
  • PHP Manual
  • SimpleXML 関数
  • XMLファイルをパースし、オブジェクトに代入する

simplexml_load_file

(PHP 5, PHP 7, PHP 8)

simplexml_load_file — XMLファイルをパースし、オブジェクトに代入する

説明

simplexml_load_file(
string $filename,
?string $class_name = SimpleXMLElement::class,
int $options = 0,
string $namespace_or_prefix = "",
bool $is_prefix = false
): SimpleXMLElement|false

指定したファイルの中の整形式 XML ドキュメントをオブジェクトに変換します。

パラメータ

filename

XML ファイルへのパス。

class_name

simplexml_load_file() が指定されたクラスのオブジェクトを返すようにするために、 このオプションのパラメータを使用します。 このクラスは、SimpleXMLElement クラスを継承していなければなりません。

options

追加の Libxml パラメータ を、ビット演算子の OR で指定します。

namespace_or_prefix

名前空間プレフィックスあるいは URI。

is_prefix

namespace_or_prefix がプレフィックスである場合に true、 URI である場合に false。デフォルトは false です。

戻り値

SimpleXMLElement クラスのオブジェクトを返します。 XML ドキュメント内のデータをプロパティに含みます。 失敗した場合に false を返します。

警告

この関数は論理値 false を返す可能性がありますが、false として評価される値を返す可能性もあります。 詳細については 論理値の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。

エラー / 例外

XML データ内でエラーが見つかるたびに E_WARNING エラーメッセージが発生します。

ヒント

libxml_use_internal_errors() ですべての XML エラーを抑制し、 後から libxml_get_errors() で取得することもできます。

例

例1 XMLドキュメントをパースする

<?php
// The file test.xml contains an XML document with a root element
// and at least an element /[root]/title.

if (file_exists('test.xml')) {
$xml = simplexml_load_file('test.xml');

print_r($xml);
} else {
exit('Failed to open test.xml.');
}
?>

このスクリプトは成功時に以下のように出力します。

SimpleXMLElement Object
(
  [title] => Example Title
  ...
)

この時点で、$xml->title としたり、 他の全ての要素にアクセスすることができます。

参考

  • simplexml_load_string() - XML 文字列をオブジェクトに代入する
  • SimpleXMLElement::__construct() - 新しい SimpleXMLElement オブジェクトを作成する
  • XML エラーの対応
  • libxml_use_internal_errors() - libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする
  • 基本的な SimpleXML の使用法
  • libxml_set_streams_context() - 次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する

User Contributed Notes

siraic at gmail dot com 20-Jun-2023 08:47
LibXML typically uses ten times the file size in memory to read a file, and this memory usage falls largely outside the memory limit guarded by PHP.
tg at debian dot org 20-Feb-2022 09:36
This function does not accept all pathnames, in spite of its documentation.

$ php -r 'print_r( simplexml_load_file("%25.xml"));'
PHP Warning:  simplexml_load_file(): I/O warning : failed to load external entity "%25.xml" in Command line code on line 1
visualmind at nospam dot php dot net 18-Jan-2022 02:49
This may sometimes get missed, but if your xml nodes are in the format:
<prefix:element />

You need to make sure to set the [namespace or prefix] argument and the [isPrefix] argument to true. Also when recalling elements you need to avoid adding the prefix if that is already set, so in the above example "prefix:element" should be added as "element" but when saved the prefix will be added automatically.

If prefix is not set during load or object construction, load will fail to get the nodes correctly and you will not be able to recall elements directly so $xml->{'prefix:element'} will not work either.
sirgrayjn at gmail dot com 22-Sep-2016 09:51
// Be carefull if you migrate or use local machine
// for test/development.

// Windows directory separators: "\" and "/"
// You may mix separators "C:\somedir\www/img/bg.jpg".

// Mixed separators path work fine in other functions
// But simplexml_load_file() failed with mixed separators.

// Examples:
include("C:\dir\my.php");    // work (windows)
include("C:\dir/my.php");    // work (windows) with mixed
include("C:/dir/my.php");    // work (windows, linux)
simplexml_load_file("C:\dir\my.php");    // work
simplexml_load_file("C:\dir/my.php");    // failed with mixed
simplexml_load_file("C:/dir/my.php");    // work
rex111 at bigmir dot net 08-Sep-2016 03:02
Get all tags and their values. (recursive)

<?php
$xml = simplexml_load_file('settings.xml');

function all_tag($xml){
    $i=0; $name = "";
    foreach ($xml as $k){
        $tag = $k->getName();
        $tag_value = $xml->$tag;
        if ($name == $tag){ $i++;    }
                $name = $tag;
            echo $tag .' '.$tag_value[$i].'<br />';
        // recursive
           all_tag($xml->$tag->children());
    }
}

all_tag($xml);
?>
Rich 24-Nov-2015 02:51
I stumbled on this: a single element with a simple string in it becomes a string, but a single element with a *space* in it becomes an Array, with one element, the string space.

I'm sure to XML mystics this is wise and wonderful but it really confused me,  and I thought it might confuse others.

<?php
$parsed = simplexml_load_string('<container><space> </space><blank></blank><string>hello</string></container>');
$content = json_decode(json_encode($parsed),TRUE);
var_dump($content);
/* Output is:
array(3) {
  'space' => array(1) {           ← did NOT expect this!
    [0] => string(1) " "
  }
  'blank' => array(0) { }
  'string' => string(5) "hello"
}
 */
tuxedobob 30-Jun-2015 01:25
Occasionally you may try to load a file and have it complain about an entity and throw a parser error.

If this is the case, check to make sure that the file in question does not contain an ampersand (&) without a corresponding entity reference.

If it does, or if you want to err on the side of caution, then instead of using simplexml_load_file, try this:

$file = file_get_contents('stuff.xml');
$temp = preg_replace('/&(?!(quot|amp|pos|lt|gt);)/', '&amp;', $file);
$xml = simplexml_load_string($temp) or die("xml not loading");

Read the file into a string, add 'amp;' after any '&' that is not part of a character entity, then parse the string as xml.
kannan at 99deals dot in 04-Sep-2012 06:27
If you have some nodes which are having special characters, it would not load properly

for an instance see the nodes below
<node:number>1538-7445</node:number>
<node:coverDisplayDate>Sep  1 2012 12:00:00:000AM</node:coverDisplayDate>

either you have to change the : to other special characters like '-' in order to convert it properly

Correct Node
<node-number>1538-7445</node-number>
<node-coverDisplayDate>Sep  1 2012 12:00:00:000AM</node-coverDisplayDate>

I have wasted my precious time while debugging this. Please aware about this. ?
ricardo at ricardomartins dot info 21-Aug-2012 05:49
Sometimes we have xml's with hyphens nodes, like

<my_xml>
 <some-node>value</some-node>
</my_xml>

You'll need to use
<?php
$simpleXmlObj->{'some-node'}
?>

instead of
<?php
$simpleXmlObj->some-node;
?>
fusionstream at gmail dot com 05-Apr-2012 04:15
If you are loading many files, this may slow down your page load time.

To set a timeout, use file_get_context and then simplexml_load_string

<?php

$fp = fopen('http://www.example.com/rss', false, stream_create_context(array('http' => array('timeout', '1.5'))));

if ($fp) {
    print_r( simplexml_load_string($fp) );
} else {
    echo "The request timed out";
}
?>
sean at aliencreations dot com 17-Mar-2011 10:59
If you find that you are receiving 500 errors with simplexml_load_file() but you can access the xml/rss feed manually through a browser, your script is probably being blocked by a user agent sniffer.

Add this code before your xml call to remedy this issue

<?php

ini_set("user_agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
ini_set("max_execution_time", 0);
ini_set("memory_limit", "10000M");

$rss = simplexml_load_file($feed_url);

?>
Nanuit at ossi dot at 08-Feb-2011 01:51
A little function very helpfull in using simplexml_load_file behind a proxy

<?php
function getXMLfromURL($url) {
      $Proxy = getenv("HTTP_PROXY");

      if (strlen($Proxy) > 1) {
        $r_default_context = stream_context_get_default ( array
                    ('http' => array(
                        'proxy' => $Proxy,
                        'request_fulluri' => True,
                    ),
                )
            );
        libxml_set_streams_context($r_default_context);
      }
      $daten = simplexml_load_file($url);
      return ($daten);
    }
?>

where HTTP_PROXY is set to e.g.: tcp://proxy:8080
guego dot ol at ig dot com dot br 12-Nov-2010 03:26
Analyze fully XML.

<?php
$xml = simplexml_load_file('file.xml');

foreach($xml as $key0 => $value){
echo "..1..[$key0] => $value";
foreach($value->attributes() as $attributeskey0 => $attributesvalue1){
echo "________[$attributeskey0] = $attributesvalue1";
}
echo '<br />';
////////////////////////////////////////////////
foreach($value as $key => $value2){
echo "....2.....[$key] => $value2";
foreach($value2->attributes() as $attributeskey => $attributesvalue2){
echo "________[$attributeskey] = $attributesvalue2";
}
echo '<br />';
////////////////////////////////////////////////
foreach($value2 as $key2 => $value3){
echo ".........3..........[$key2] => $value3";
foreach($value3->attributes() as $attributeskey2 => $attributesvalue3){
echo "________[$attributeskey2] = $attributesvalue3";
}
echo '<br />';
////////////////////////////////////////////////
foreach($value3 as $key3 => $value4){
echo "...................4....................[$key3] => $value4";
foreach($value4->attributes() as $attributeskey3 => $attributesvalue4){
echo "________[$attributeskey3] = $attributesvalue4";
}
echo '<br />';
////////////////////////////////////////////////
foreach($value4 as $key4 => $value5){
echo ".....................5......................[$key4] => $value5";
foreach($value5->attributes() as $attributeskey4 => $attributesvalue5){
echo "________[$attributeskey4] = $attributesvalue5";
}
echo '<br />';
////////////////////////////////////////////////
foreach($value5 as $key5 => $value6){
echo "......................6.......................[$key5] => $value6";
foreach($value6->attributes() as $attributeskey5 => $attributesvalue6){
echo "________[$attributeskey5] = $attributesvalue6";
}
echo '<br />';
}}}}}
echo '<br />';
}
?>
raduispas at gmail dot com 21-Oct-2010 06:12
if you want to check when this function fails,make sure to compare the return value with ===  instead of == :

<?php
$url = 'http://www.example.com';
$xml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA);
if($xml ===  FALSE)
{
   //deal with error
}
else { //do stuff }
?>

Otherwise you may end up with FALSE all the time even if the document is ok. Hope this helps someone ;)
jamie at splooshmedia dot co dot uk 31-Mar-2010 06:17
A wrapper around simplexml_load_file to circumvent nasty error messages when the xml server times out or gives a 500 error etc.

<?php
function loadXML2($domain, $path, $timeout = 30) {

    /*
        Usage:

        $xml = loadXML2("127.0.0.1", "/path/to/xml/server.php?code=do_something");
        if($xml) {
            // xml doc loaded
        } else {
            // failed. show friendly error message.
        }
    */

    $fp = fsockopen($domain, 80, $errno, $errstr, $timeout);
    if($fp) {
        // make request
        $out = "GET $path HTTP/1.1\r\n";
        $out .= "Host: $domain\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);

        // get response
        $resp = "";
        while (!feof($fp)) {
            $resp .= fgets($fp, 128);
        }
        fclose($fp);
        // check status is 200
        $status_regex = "/HTTP\/1\.\d\s(\d+)/";
        if(preg_match($status_regex, $resp, $matches) && $matches[1] == 200) {
            // load xml as object
            $parts = explode("\r\n\r\n", $resp);
            return simplexml_load_string($parts[1]);
        }
    }
    return false;

}
?>
Smokey 14-Mar-2010 10:16
for nested and same name values i'v made up this little bit for getting and displaying multiable values from google's geocode when a exact match is not found it returns all close matches in the following format(this is an abriged version of there output)

<Response>
  <Placemark id="1">
    <address> New York 24, NY, USA</address>
    <AddressDetails>
      ..................
    </AddressDetails>
    <Point>
      <coordinates>-73.5850086,40.7207442,0</coordinates>
    </Point>
  </Placemark>
  <Placemark id="2">
    <address>New York 27, NY, USA</address>
    <AddressDetails>
      ...................
    </AddressDetails>
    <Point>
      <coordinates>-72.8987835,40.8003588,0</coordinates>
    </Point>
  </Placemark>
  <Placemark id="3">
    <address>Cedar Place School, 20 Cedar Pl, Yonkers, NY 10705, USA</address>
    <AddressDetails>
      ..................
    </AddressDetails>
    <Point>
      <coordinates>-73.8966320,40.9256520,0</coordinates>
    </Point>
  </Placemark>
</Response>

<?php
// get and breakdown the results then store them in $var's
$Address = "99999 parkplace, new york, NY";
$urladdress = urlencode($Address);
$Base_url = "http://maps.google.com/maps/geo?q=";
$urlParts = "&output=xml";
$urlrequest = $Base_url . $urladdress . $urlParts;
$xml = simplexml_load_file($urlrequest);
$num = "0";
foreach ($xml->Response->Placemark as $value){
    $num++;
    $GeoFindAdd{$num} = $value->address;
    $GeoFindCords{$num} = $value->Point->coordinates;
}

// a simple display for the results
echo "Found ",$num," Possable Geo Data Sets <br>";
$CountNumResults = "0";
for ( ; $num > 0; $num--){
    $CountNumResults++;
    echo $countnum,"<br> Address = ",$GeoFindAdd{$num},"<br> Coordinates = ",$GeoFindCords{$num},"<br>";
}
echo "END";
?>
knl at bitflop dot com 11-Sep-2009 12:02
If you need to parse the data from SimpleXML into a session variable remember to define the data as a string first.

If you don't you will get warnings of "Node no longer exists" pointing to your session_start() function.

This will work:

<?php

    $new_version = simplexml_load_file('http://example.com/version.xml');
    $_SESSION['current_version'] = (string)$new_version->version;

?>
neil art neilanddeb dort com 17-Aug-2009 06:00
Because the encoding of my XML file is UTF-8 and the
encoding of my web page is iso-8859-1 I was getting strange characters such as a?™ instead of a right single quote.

The solution to this turned out to be hard to find, but really easy to implement.

http://uk3.php.net/manual/en/function.iconv.php

Using the iconv() function you can convert from one encodign to another, the TRANSLIT option seems to work best for what I needed.  Here's my example:

<?php
// convert string from utf-8 to iso8859-1
$horoscope = iconv( "UTF-8", "ISO-8859-1//TRANSLIT", $horoscope );
?>

I found the solution on this page...
http://tinyurl.com/lm39xc
Hope this helps
cryonyx at cerebrate dot ru 21-Oct-2008 03:34
In case you have a XML file with a series of equally named elements on one level simplexml incorrectly processes them and doesn't allow to walk through the array using foreach(). As far as I'm concerned, it is the problem caused by PHP xml_parser (see: http://ru2.php.net/manual/ru/function.xml-parser-create.php#53188).

To avoid this, just use count() and walk through the array using for().

Example:

<params>
  <param>
    <name>version.shell</name>
    <value>1.0</value>
  </param>
  <param>
      <name>version.core</name>
      <value>1.0</value>
  </param>
  <param>
      <name>file.lang</name>
      <value>vc.lang</value>
  </param>
  ...
</params>

<?php
$filename = '...';
$xml = simplexml_load_file($filename);
$p_cnt = count($xml->param);
for($i = 0; $i < $p_cnt; $i++) {
  $param = $xml->param[$i];
  ...;
}
?>
mario 02-Sep-2008 02:08
If you want CDATA in your object you should use LIBXML_NOCDATA

<?php
$xml = simplexml_load_file($file_xml, 'SimpleXMLElement',LIBXML_NOCDATA);

    print_r($xml);
?>
l [DOT] anzinger [AT] gmail [DOT] com 26-Mar-2008 09:03
If you don't want that the CDATA values get escaped, just load the XML with LIBXML_NOCDATA as an 3rd argument.

Note: A PHP version >= 5.1.0 is required for this to work.

Example:

<?php simplexml_load_file('xmldatei.xml', null, LIBXML_NOCDATA); ?>
php at werner dash ott dot de 29-Mar-2007 01:13
Making SimpleXMLElement objects session save.

Besides the effect of not surviving sessions, the SimpleXMLElement object may even crash the session_start() function when trying to re-enter the session!

To come up with a solution for this, I used a pattern as follows. The core idea is to transform the SimpleXMLElement between session calls to and from a string representation which of course is session save.

<?php
  //
  // session save handling of SimpleXMLElement objects
  // (applies to/ tested with PHP 5.1.5 and PHP 5.2.1)
  // The myClass pattern allows for conveniently accessing
  // XML structures while being session save
  //
  class myClass
  {
    private $o_XMLconfig = null;
    private $s_XMLconfig = '';

    public function __construct($args_configfile)
    {
      $this->o_XMLconfig = simplexml_load_file($args_configfile);
      $this->s_XMLconfig = $this->o_XMLconfig->asXML();
    } // __construct()

    public function __destruct()
    {
      $this->s_XMLconfig = $this->o_XMLconfig->asXML();
      unset($this->o_XMLconfig); // this object would otherwise crash
                                 // the subsequent call of
                                 // session_start()!
    } // __destruct()

    public function __wakeup()
    {
      $this->o_XMLconfig = simplexml_load_string($this->s_XMLconfig);
    } // __wakeup()

  } // class myClass
?>
wouter at code-b dot nl 20-Feb-2007 02:08
To correctly extract a value from a CDATA just make sure you cast the SimpleXML Element to a string value by using the cast operator:

<?php
$xml = '<?xml version="1.0" encoding="UTF-8" ?>
<rss>
    <channel>
        <item>
            <title><![CDATA[Tom & Jerry]]></title>
        </item>
    </channel>
</rss>';

$xml = simplexml_load_string($xml);

// echo does the casting for you
echo $xml->channel->item->title;

// but vardump (or print_r) not!
var_dump($xml->channel->item->title);

// so cast the SimpleXML Element to 'string' solve this issue
var_dump((string) $xml->channel->item->title);
?>

Above will output:

Tom & Jerry

object(SimpleXMLElement)#4 (0) {}

string(11) "Tom & Jerry"
Kyle 10-Dec-2006 02:35
In regards to Anonymous on 7th April 2006

There is a way to get back HTML tags. For example:

<?xml version="1.0"?>
<intro>
    Welcome to <b>Example.com</b>!
</intro>

<?php
// I use @ so that it doesn't spit out content of my XML in an error message if the load fails. The content could be passwords so this is just to be safe.
$xml = @simplexml_load_file('content_intro.xml');
if ($xml) {
    // asXML() will keep the HTML tags but it will also keep the parent tag <intro> so I strip them out with a str_replace. You could obviously also use a preg_replace if you have lots of tags.
    $intro = str_replace(array('<intro>', '</intro>'), '', $xml->asXML());
} else {
    $error = "Could not load intro XML file.";
}
?>

With this method someone can change the intro in content_intro.xml and ensure that the HTML is well formed and not ruin the whole site design.
Anonymous 06-Apr-2006 09:21
What has been found when using the script is that simplexml_load_file() will remove any HTML formating inside the XML file, and will also only load so many layers deep. If your XML file is to deap, it will return a boolean false.
fdouteaud at gmail dot com 09-Mar-2006 05:21
Be careful if you are using simplexml data directly to feed your MySQL database using MYSQLi and bind parameters.

The data coming from simplexml are Objects and the bind parameters functions of MySQLi do NOT like that! (it causes some memory leak and can crash Apache/PHP)

In order to do this properly you MUST cast your values to the right type (string, integer...) before passing them to the binding methods of MySQLi.
I did not find that in the documentation and it caused me a lot of headache.
info at evasion dot cc 06-Feb-2006 08:26
Sorry there's a mistake in the previous function :
<?php
   function &getXMLnode($object, $param) {
       foreach($object as $key => $value) {
           if(isset($object->$key->$param)) {
               return $object->$key->$param;
           }
           if(is_object($object->$key)&&!empty($object->$key)) {
               $new_obj = $object->$key;
               // Must use getXMLnode function there (recursive)
               $ret = getXMLnode($new_obj, $param);

           }
       }
       if($ret) return (string) $ret;
       return false;
   }
?>
skutter at imprecision dot net 03-Feb-2006 09:11
So it seems SimpleXML doesn't support CDATA... I bashed together this little regex function to sort out the CDATA before trying to parse XML with the likes of simplexml_load_file / simplexml_load_string. Hope it might help somebody and would be very interested to hear of better solutions. (Other than *not* using SimpleXML of course! ;)

It looks for any <![CDATA [Text and HTML etc in here]]> elements, htmlspecialchar()'s the encapsulated data and then strips the "<![CDATA [" and "]]>" tags out.

<?php
function simplexml_unCDATAise($xml) {
    $new_xml = NULL;
    preg_match_all("/\<\!\[CDATA \[(.*)\]\]\>/U", $xml, $args);

    if (is_array($args)) {
        if (isset($args[0]) && isset($args[1])) {
            $new_xml = $xml;
            for ($i=0; $i<count($args[0]); $i++) {
                $old_text = $args[0][$i];
                $new_text = htmlspecialchars($args[1][$i]);
                $new_xml = str_replace($old_text, $new_text, $new_xml);
            }
        }
    }

    return $new_xml;
}

//Usage:
$xml = 'Your XML with CDATA...';
$xml = simplexml_unCDATAise($xml);
$xml_object = simplexml_load_string($xml);
?>
info at evasion dot cc 03-Feb-2006 03:37
Suppose you have loaded a XML file into $simpleXML_obj.
The structure is like below :

SimpleXMLElement Object
(

    [node1] => SimpleXMLElement Object
        (
            [subnode1] => value1
            [subnode2] => value2
            [subnode3] => value3
        )

    [node2] => SimpleXMLElement Object
        (
            [subnode4] => value4
            [subnode5] => value5
            [subnode6] => value6
        )

)

When searching a specific node in the object, you may use this function :

<?php

    function &getXMLnode($object, $param) {
        foreach($object as $key => $value) {
            if(isset($object->$key->$param)) {
                return $object->$key->$param;
            }
            if(is_object($object->$key)&&!empty($object->$key)) {
                $new_obj = $object->$key;
                $ret = getCfgParam($new_obj, $param);
            }
        }
        if($ret) return (string) $ret;
        return false;
    }
?>

So if you want to get subnode4 value you may use this function like this :

<?php
$result = getXMLnode($simpleXML_obj, 'subnode4');
echo $result;
?>

It display "value4"
genialbrainmachine at NOSPAM dot tiscali dot it 30-Sep-2005 08:52
Micro$oft Word uses non-standard characters and they create problems in using simplexml_load_file.
Many systems include non-standard Word character in their implementation of ISO-8859-1. So an XML document containing that characters can appear well-formed (i.e.) to many browsers. But if you try to load this kind of documents with simplexml_load_file you'll have a little bunch of troubles..
I believe that this is exactly the same question discussed in htmlentites. Following notes to htmlentitles are interesting here too (given in the reverse order, to grant the history):
http://it.php.net/manual/en/function.htmlentities.php#26379
http://it.php.net/manual/en/function.htmlentities.php#41152
http://it.php.net/manual/en/function.htmlentities.php#42126
http://it.php.net/manual/en/function.htmlentities.php#42511
mark 12-Sep-2005 11:06
If the property of an object is empty the array is not created. Here is a version object2array that transfers properly.

<?php
function object2array($object)
{
    $return = NULL;

    if(is_array($object))
    {
        foreach($object as $key => $value)
            $return[$key] = object2array($value);
    }
    else
    {
        $var = get_object_vars($object);

        if($var)
        {
            foreach($var as $key => $value)
                $return[$key] = ($key && !$value) ? NULL : object2array($value);
        }
        else return $object;
    }

    return $return;
}
?>


XML 文字列をオブジェクトに代入する

  • ≪ simplexml_load_file
  • WDDX ≫
  • PHP Manual
  • SimpleXML 関数
  • XML 文字列をオブジェクトに代入する

simplexml_load_string

(PHP 5, PHP 7, PHP 8)

simplexml_load_string — XML 文字列をオブジェクトに代入する

説明

simplexml_load_string(
string $data,
?string $class_name = SimpleXMLElement::class,
int $options = 0,
string $namespace_or_prefix = "",
bool $is_prefix = false
): SimpleXMLElement|false

整形式 XML 文字列をオブジェクトとして返します。

パラメータ

data

整形式 XML 文字列。

class_name

このオプションのパラメータを使用して、 simplexml_load_file() が指定されたクラスのオブジェクトを返すようにします。 このクラスは、SimpleXMLElement クラスを継承していなければなりません。

options

追加の Libxml パラメータ を、ビット演算子の OR で指定します。

namespace_or_prefix

名前空間プレフィックスあるいは URI。

is_prefix

namespace_or_prefix がプレフィックスである場合に true、 URI である場合に false。デフォルトは false です。

戻り値

SimpleXMLElement クラスのオブジェクトを返します。 XML ドキュメント内のデータをプロパティに含みます。 失敗した場合に false を返します。

警告

この関数は論理値 false を返す可能性がありますが、false として評価される値を返す可能性もあります。 詳細については 論理値の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。

エラー / 例外

XML データ内でエラーが見つかるたびに E_WARNING エラーメッセージが発生します。

ヒント

libxml_use_internal_errors() ですべての XML エラーを抑制し、 後から libxml_get_errors() で取得することもできます。

例

例1 XML 文字列をパースする

<?php
$string = <<<XML
<?xml version='1.0'?>
<document>
<title>Forty What?</title>
<from>Joe</from>
<to>Jane</to>
<body>
I know that's the answer -- but what's the question?
</body>
</document>
XML;

$xml = simplexml_load_string($string);

print_r($xml);
?>

上の例の出力は以下となります。

SimpleXMLElement Object
(
  [title] => Forty What?
  [from] => Joe
  [to] => Jane
  [body] =>
   I know that's the answer -- but what's the question?
)

この時点で、$xml->body のようにアクセスすることができます。

参考

  • simplexml_load_file() - XMLファイルをパースし、オブジェクトに代入する
  • SimpleXMLElement::__construct() - 新しい SimpleXMLElement オブジェクトを作成する
  • XML エラーの対応
  • libxml_use_internal_errors() - libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする
  • 基本的な SimpleXML の使用法

User Contributed Notes

erguven dot m at gmail dot com 11-May-2017 03:14
if you want to use a class which exists in a name space, use it full name. simple_load_string did not recognize short one.

class.new.php
<?php
namespace foo\bar;

class new extends SimpleXMLElement
{
    public function do()
    {
        echo "done";
    }
}
?>

false.php
<?php
use \foo\bar\new;

$result = simplexml_load_string($xml, 'new'); // it gives warning
$result->do(); // fatal error
?>

true.php
<?php
use \foo\bar\new;
$result = simplexml_load_string($xml, '\foo\bar\new');

$result->do(); // prints done
?>
artistan at gmail dot com 11-Jun-2015 12:32
Here is my update to Bob's simple SimpleXML wrapper function.
I noticed his version would turn an empty SimpleXMLElement into an empty array.

<?php
    /**
     * http://php.net/manual/en/function.simplexml-load-string.php#91564
     *
     * bool/array unserialize_xml ( string $input [ , callback $callback ] )
     * Unserializes an XML string, returning a multi-dimensional associative array, optionally runs a callback on all non-array data
     * Returns false on all failure
     * Notes:
     * Root XML tags are stripped
     * Due to its recursive nature, unserialize_xml() will also support SimpleXMLElement objects and arrays as input
     * Uses simplexml_load_string() for XML parsing, see SimpleXML documentation for more info
     *
     * @param $input
     * @param null $callback
     * @param bool $recurse
     * @return array|mixed
     *
     */
    function unserialize_xml($input, $callback = null, $recurse = false)
    {
        // Get input, loading an xml string with simplexml if its the top level of recursion
        $data = ((!$recurse) && is_string($input))? simplexml_load_string($input): $input;
        // Convert SimpleXMLElements to array
        if ($data instanceof SimpleXMLElement){
            if(!empty($data)){
                $data = (array) $data;
            } else {
                $data = '';
            }
        }
        // Recurse into arrays
        if (is_array($data)) foreach ($data as &$item) $item = unserialize_xml($item, $callback, true);
        // Run callback and return
        return (!is_array($data) && is_callable($callback))? call_user_func($callback, $data): $data;
    }
?>
meustrus 07-May-2015 03:38
Be careful checking for parse errors. An empty SimpleXMLElement may resolve to FALSE, and if your XML contains no text or only contains namespaced elements your error check may be wrong. Always use `=== FALSE` when checking for parse errors.

<?php

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Root xmlns:ns1="http://example.com/custom">
<ns1:Node>There's stuff here</ns1:Node>
</ns1:Root>
XML;

$simplexml = simplexml_load_string($xml);

// This prints "Parse Error".
echo ($simplexml ? 'Valid XML' : 'Parse Error'), PHP_EOL;

// But this prints "There's stuff here", proving that
// the SimpleXML object was created successfully.
echo $simplexml->children('http://example.com/custom')->Node, PHP_EOL;

// Use this instead:
echo ($simplexml !== FALSE ? 'Valid XML' : 'Parse Error'), PHP_EOL;

?>

See:

https://bugs.php.net/bug.php?id=31045
https://bugs.php.net/bug.php?id=30972
https://bugs.php.net/bug.php?id=69596
dkrnl at yandex dot ru 30-Sep-2013 02:58
Wrapper XMLReader class, for simple SAX-reading huge xml:
https://github.com/dkrnl/SimpleXMLReader

Usage example: http://github.com/dkrnl/SimpleXMLReader/blob/master/examples/example1.php
AllenJB 12-Oct-2012 08:09
<?php
$xml = json_decode(json_encode((array) simplexml_load_string($string)), 1);
?>

A reminder that json_encode attempts to convert data to UTF-8 without specific knowledge of the source encoding. This method can cause encoding issues if you're not working in UTF-8.
Anonymous 29-Feb-2012 08:54
Use libxml_disable_entity_loader() to restrict loading of external files.  See http://www.idontplaydarts.com/2011/02/scanning-the-internal-network-using-simplexml/
Diego Araos, diego at klapmedia dot com 05-Feb-2011 12:57
A simpler way to transform the result into an array (requires json module).

<?php
function object2array($object) { return @json_decode(@json_encode($object),1); }
?>

Example:
<?php
$xml_object=simplexml_load_string('<SOME XML DATA');
$xml_array=object2array($xml_object);
?>
ascammon at hotmail dot com 28-Dec-2010 01:04
I had a hard time finding this documented, so posting it here in case it helps someone:

If you want to use multiple libxml options, separate them with a pipe, like so:

<?php
$xml = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS);
?>
jeff at creabilis dot com 17-Nov-2009 02:28
If you want to set the charset of the outputed xml, simply set the encoding attribute like this :

<?php simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><xml/>'); ?>

The generated xml outputed by $xml->asXML will containt accentuated characters like 'e' instead of &#xE9;.

Hope this help
Bob 17-Jun-2009 02:16
Here is my simple SimpleXML wrapper function.
As far as I can tell, it does the same as Julio Cesar Oliveira's (above).
It parses an XML string into a multi-dimensional associative array.
The second argument is a callback that is run on all data (so for example, if you want all data trimmed, like Julio does in his function, just pass 'trim' as the second arg).
<?php
function unserialize_xml($input, $callback = null, $recurse = false)
/* bool/array unserialize_xml ( string $input [ , callback $callback ] )
 * Unserializes an XML string, returning a multi-dimensional associative array, optionally runs a callback on all non-array data
 * Returns false on all failure
 * Notes:
    * Root XML tags are stripped
    * Due to its recursive nature, unserialize_xml() will also support SimpleXMLElement objects and arrays as input
    * Uses simplexml_load_string() for XML parsing, see SimpleXML documentation for more info
 */
{
    // Get input, loading an xml string with simplexml if its the top level of recursion
    $data = ((!$recurse) && is_string($input))? simplexml_load_string($input): $input;
    // Convert SimpleXMLElements to array
    if ($data instanceof SimpleXMLElement) $data = (array) $data;
    // Recurse into arrays
    if (is_array($data)) foreach ($data as &$item) $item = unserialize_xml($item, $callback, true);
    // Run callback and return
    return (!is_array($data) && is_callable($callback))? call_user_func($callback, $data): $data;
}
?>
Julio Cesar Oliveira 30-Mar-2009 07:14
The XML2Array func now Recursive!

<?php
function XML2Array ( $xml , $recursive = false )
{
    if ( ! $recursive )
    {
        $array = simplexml_load_string ( $xml ) ;
    }
    else
    {
        $array = $xml ;
    }

    $newArray = array () ;
    $array = ( array ) $array ;
    foreach ( $array as $key => $value )
    {
        $value = ( array ) $value ;
        if ( isset ( $value [ 0 ] ) )
        {
            $newArray [ $key ] = trim ( $value [ 0 ] ) ;
        }
        else
        {
            $newArray [ $key ] = XML2Array ( $value , true ) ;
        }
    }
    return $newArray ;
}
?>
javalc6 at gmail dot com 18-Oct-2008 06:25
I wanted to convert an array containing strings and other arrays of the same type into a simplexml object.

Here is the code of the function array2xml that I've developed to perform this conversion. Please note that this code is simple without any checks.

<?php
function array2xml($array, $tag) {

    function ia2xml($array) {
        $xml="";
        foreach ($array as $key=>$value) {
            if (is_array($value)) {
                $xml.="<$key>".ia2xml($value)."</$key>";
            } else {
                $xml.="<$key>".$value."</$key>";
            }
        }
        return $xml;
    }

    return simplexml_load_string("<$tag>".ia2xml($array)."</$tag>");
}

$test['type']='lunch';
$test['time']='12:30';
$test['menu']=array('entree'=>'salad', 'maincourse'=>'steak');

echo array2xml($test,"meal")->asXML();
?>
rowan dot collins at gmail dot com 10-Jul-2008 07:07
There seems to be a lot of talk about SimpleXML having a "problem" with CDATA, and writing functions to rip it out, etc. I thought so too, at first, but it's actually behaving just fine under PHP 5.2.6

The key is noted above example #6 here:
http://uk2.php.net/manual/en/simplexml.examples.php

"To compare an element or attribute with a string or pass it into a function that requires a string, you must cast it to a string using (string). Otherwise, PHP treats the element as an object."

If a tag contains CDATA, SimpleXML remembers that fact, by representing it separately from the string content of the element. So some functions, including print_r(), might not show what you expect. But if you explicitly cast to a string, you get the whole content.

<?php
$xml = simplexml_load_string('<foo>Text1 &amp; XML entities</foo>');
print_r($xml);
/*
SimpleXMLElement Object
(
    [0] => Text1 & XML entities
)
*/

$xml2 = simplexml_load_string('<foo><![CDATA[Text2 & raw data]]></foo>');
print_r($xml2);
/*
SimpleXMLElement Object
(
)
*/
// Where's my CDATA?

// Let's try explicit casts
print_r( (string)$xml );
print_r( (string)$xml2 );
/*
Text1 & XML entities
Text2 & raw data
*/
// Much better
?>
amir_abiri at ipcmedia dot com 08-Feb-2008 08:47
It doesn't seem to be documented anywhere, but you can refer to an element "value" for the purpose of changing it like so:

<?php
$xml = simplexml_load_string('<root><number>1</number></root>');
echo $xml->asXml(). "\n\n";

$xml->number->{0} = $xml->number->{0} + 1;

echo $xml->asXml();
?>

echos:
<?xml version="1.0"?>
<root><number>1</number></root>

<?xml version="1.0"?>
<root><number>2</number></root>

However, this only works with a direct assignment, not with any of the other operators:

<?php
$xml = simplexml_load_string('<root><number>1</number></root>');
echo $xml->asXml(). "\n\n";

$xml->number->{0} += 1;
// Or:
$xml->number->{0}++;

echo $xml->asXml();
?>

Both of the above cases would result in:

<?xml version="1.0"?>
<root><number>1</number></root>

<?xml version="1.0"?>
<root><number>1<0/></number></root>
bojan 04-Feb-2008 04:38
As was said before don't use var_dump() or print_r() to see SimpleXML object structure as they do not returns always what you expect.
Consider the following:

<?php

// data in xml
$xml_txt = '
<root>
  <folder ID="65" active="1" permission="1"><![CDATA[aaaa]]></folder>
  <folder ID="65" active="1" permission="1"><![CDATA[bbbb]]></folder>
</root>';

// load xml into SimpleXML object
$xml = simplexml_load_string($xml_txt, 'SimpleXMLElement', LIBXML_NOCDATA);//LIBXML_NOCDATA LIBXML_NOWARNING

// see object structure
print_r($xml);

/* this prints
SimpleXMLElement Object
(
    [folder] => Array
        (
            [0] => aaaa
            [1] => bbbb
        )

)
*/

// but...
foreach ($xml->folder as $value){
    print_r($value);
}
/* prints complete structure of each folder element:
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [ID] => 65
            [active] => 1
            [permission] => 1
        )

    [0] => aaaa
)

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [ID] => 65
            [active] => 1
            [permission] => 1
        )

    [0] => bbbb
)

*/
?>
hattori at hanso dot com 15-Oct-2007 03:19
Theres a problem with the below workaround when serializing fields containing html CDATA. For any other content type then HTML try to modfiy function parseCDATA.
Just add these lines before serializing.
This is also a workaround for this bug http://bugs.php.net/bug.php?id=42001

<?PHP
if(strpos($content, '<![CDATA[')) {
   function parseCDATA($data) {
      return htmlentities($data[1]);
   }
   $content = preg_replace_callback(
      '#<!\[CDATA\[(.*)\]\]>#',
      'parseCDATA',
      str_replace("\n", " ", $content)
   );
}
?>
nbijnens at servs dot eu 10-Sep-2007 05:17
Please note that not all LIBXML options are supported with the options argument.

For instance LIBXML_XINCLUDE does not work. But there is however a work around:

<?php
$xml = new DOMDocument();
$xml->loadXML ($XMLString);

$xml->xinclude();
$xml = simplexml_import_dom($xml);

?>
Pedro 06-Jul-2007 01:28
Attention:

simplexml_load_string has a problem with entities other than (&lt;, &gt;, &amp;, &quot; and &apos;).

Use numeric character references instead!
m dot ament at mailcity dot com 06-Mar-2007 06:51
Warning:

The parsing of XML-data will stop when reaching character 0.
Please avoid this character in your XML-data.
mindpower 30-Jan-2007 03:03
A simple extension that adds a method for retrieving a specific attribute:

<?php
class simple_xml_extended extends SimpleXMLElement
{
    public    function    Attribute($name)
    {
        foreach($this->Attributes() as $key=>$val)
        {
            if($key == $name)
                return (string)$val;
        }
    }

}

$xml = simplexml_load_string('
<xml>
  <dog type="poodle" owner="Mrs Smith">Rover</dog>
</xml>', 'simple_xml_extended');

echo $xml->dog->Attribute('type');

?>

outputs 'poodle'

I prefer to use this technique rather than typecasting attributes.
Maciek Ruckgaber <maciekrb at gmai dot com> 07-Jun-2005 05:07
after wondering around some time, i just realized something (maybe obvious, not very much for me). Hope helps someone to not waste time as i did :-P

when you have something like:

<?php
$xmlstr = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<double xmlns="http://foosite.foo/">2328</double>
XML;
?>

you will have the simpleXML object "transformed" to the text() content:

<?php
$xml = simplexml_load_string($xmlstr);
echo $xml; // this will echo 2328  (string)
?>
cellog at php dot net 31-Aug-2004 04:11
simplexml does not simply handle CDATA sections in a foreach loop.

<?php
$sx = simplexml_load_string('
<test>
 <one>hi</one>
 <two><![CDATA[stuff]]></two>
 <t>
  <for>two</for>
 </t>
 <multi>one</multi>
 <multi>two</multi>
</test>');
foreach((array) $sx as $tagname => $val) {
    if (is_string($val)) {
       // <one> will go here
    } elseif (is_array($val)) {
       // <multi> will go here because it happens multiple times
    } elseif (is_object($val)) {
      // <t> will go here because it contains tags
      // <two> will go here because it contains CDATA!
    }
}
?>

To test in the loop, do this

<?php
if (count((array) $val) == 0) {
    // this is not a tag that contains other tags
    $val = '' . $val;
    // now the CDATA is revealed magically.
}
?>


WDDX

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • リソース型
  • 例
    • wddx の例
  • WDDX 関数
    • wddx_add_vars — 指定した ID の WDDX パケットに変数を追加する
    • wddx_deserialize — WDDX パケットをアンシリアライズする
    • wddx_packet_end — 指定した ID の WDDX パケットを終了する
    • wddx_packet_start — 新規の WDDX パケットを内部の構造体を用いて開始する
    • wddx_serialize_value — 単一の値を WDDX パケットにシリアライズする
    • wddx_serialize_vars — 変数を WDDX パケットにシリアライズする

User Contributed Notes

There are no user contributed notes for this page.


はじめに

警告

この拡張モジュールは 推奨されていません し PHP 7.4.0 以降では バンドルされていません。

以下の関数は、» WDDX と組み合わせて動作することを想定しています。

警告

信頼できないユーザーの入力を wddx_deserialize() 関数に渡してはいけません。 アンシリアライズ処理が、オブジェクトのインスタンス化とオートローディングのために、 コードをロードして実行してしまいかねませんし、悪意のあるユーザーがこれを悪用できてしまいます。 シリアライズされた値をユーザーに渡す必要があるなら、 (json_decode() や json_encode() 経由で) JSON のような安全で、標準になっているデータ交換フォーマットを使ってください。

User Contributed Notes

alvaro at demogracia dot com 29-Sep-2008 08:49
From OpenWDDX.Org:

"The Web Distributed Data Exchange, or WDDX, is a free, open XML-based technology that allows Web applications created with any platform to easily exchange data with one another over the Web."

"WDDX is an XML-based technology that enables the exchange of complex data between Web programming languages, creating what some refer to as 'Web syndicate networks'. WDDX consists of a language-independent representation of data based on an XML 1.0 DTD, and a set of modules for a wide variety of languages that use WDDX. WDDX can be used with HTTP, SMTP, POP, FTP and other Internet protocols that support transferring textual data."


要件

この拡張モジュールを使うには libxml 拡張モジュールが必要です。つまり、 PHP 7.4 以降では --with-libxml、それより前のバージョンでは --enable-libxml も指定しなければならないということです。 しかし、libxml はデフォルトで有効になっているのでこのオプションは暗黙のうちに指定されています。

WDDX を使用するには、(Apache 1.3.7 以降に付属する) expat ライブラリをインストールする必要があります。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

PHP 7.4 以降

この拡張モジュールは » PECL レポジトリに移動 されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 7.4.0

この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 » https://pecl.php.net/package/wddx.

PHP < 7.4

必須ライブラリ expat をインストールした後、PHP のコンパイル時に --enable-wddx を指定します。また --with-libexpat-dir で expat を指定します。

Windows 版の PHP には この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。

User Contributed Notes

There are no user contributed notes for this page.


リソース型

この拡張モジュールでは、WDDX パケット ID を定義しています。これは wddx_packet_start() が返すものです。

User Contributed Notes

There are no user contributed notes for this page.


例

目次

  • wddx の例

User Contributed Notes

There are no user contributed notes for this page.


wddx の例

変数をシリアル化する全ての関数は配列の最初要素をその配列が配列と 構造体のどちらでシリアル化されるのかを定義するために使用するということに 注意してください。最初の要素が文字列をキーとして有する場合は 構造体でシリアル化され、その他の場合は配列でシリアル化されます。

例1 WDDX を使用した単一の値のシリアル化

<?php
echo wddx_serialize_value("PHP to WDDX packet example", "PHP packet");
?>

この例は次の出力を行います。

<wddxPacket version='1.0'><header comment='PHP packet'/><data>
<string>PHP to WDDX packet example</string></data></wddxPacket>

例2 WDDX を使用してパケットを追加する例

<?php
$pi = 3.1415926;
$packet_id = wddx_packet_start("PHP");
wddx_add_vars($packet_id, "pi");

/* $cities はデータベースから取得するものと仮定します */
$cities = array("Austin", "Novato", "Seattle");
wddx_add_vars($packet_id, "cities");

$packet = wddx_packet_end($packet_id);
echo $packet;
?>

この例は次のような出力を行います。

<wddxPacket version='1.0'><header comment='PHP'/><data><struct>
<var name='pi'><number>3.1415926</number></var><var name='cities'>
<array length='3'><string>Austin</string><string>Novato</string>
<string>Seattle</string></array></var></struct></data></wddxPacket>

注意:

文字列は UTF-8 でエンコードされているべきです。 つまり、他のエンコーディングを扱うには、 文字列をはじめに mb_convert_encoding() や UConverter::transcode(), iconv() を使って変換するようにして下さい。

User Contributed Notes

There are no user contributed notes for this page.


WDDX 関数

目次

  • wddx_add_vars — 指定した ID の WDDX パケットに変数を追加する
  • wddx_deserialize — WDDX パケットをアンシリアライズする
  • wddx_packet_end — 指定した ID の WDDX パケットを終了する
  • wddx_packet_start — 新規の WDDX パケットを内部の構造体を用いて開始する
  • wddx_serialize_value — 単一の値を WDDX パケットにシリアライズする
  • wddx_serialize_vars — 変数を WDDX パケットにシリアライズする

User Contributed Notes

There are no user contributed notes for this page.


指定した ID の WDDX パケットに変数を追加する

  • ≪ WDDX 関数
  • wddx_deserialize ≫
  • PHP Manual
  • WDDX 関数
  • 指定した ID の WDDX パケットに変数を追加する

wddx_add_vars

(PHP 4, PHP 5, PHP 7)

wddx_add_vars — 指定した ID の WDDX パケットに変数を追加する

警告

この機能は PHP 7.4.0 で 削除 されました。

説明

wddx_add_vars(resource $packet_id, mixed $var_name, mixed ...$var_names): bool

渡された変数をシリアライズし、 指定したパケットに結果を追加します。

パラメータ

この関数は、可変長のパラメータを受け取ります。

packet_id

wddx_packet_start() が返す WDDX パケット。

var_name

変数名を表す文字列、あるいは配列。 配列の中身は、変数名を表す文字列あるいは別の配列などとなります。

var_names

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


WDDX パケットをアンシリアライズする

  • ≪ wddx_add_vars
  • wddx_packet_end ≫
  • PHP Manual
  • WDDX 関数
  • WDDX パケットをアンシリアライズする

wddx_deserialize

(PHP 4, PHP 5, PHP 7)

wddx_deserialize — WDDX パケットをアンシリアライズする

警告

この機能は PHP 7.4.0 で 削除 されました。

説明

wddx_deserialize(string $packet): mixed

WDDX packet をアンシリアライズします。

警告

信頼できないユーザーの入力を wddx_deserialize() 関数に渡してはいけません。 アンシリアライズ処理が、オブジェクトのインスタンス化とオートローディングのために、 コードをロードして実行してしまいかねませんし、悪意のあるユーザーがこれを悪用できてしまいます。 シリアライズされた値をユーザーに渡す必要があるなら、 (json_decode() や json_encode() 経由で) JSON のような安全で、標準になっているデータ交換フォーマットを使ってください。

パラメータ

packet

WDDX パケット。文字列あるいはストリームで指定します。

戻り値

アンシリアライズした値を返します。値は文字列か数値、あるいは配列のいずれかとなります。 構造体は連想配列に変換されることに注意しましょう。

User Contributed Notes

There are no user contributed notes for this page.


指定した ID の WDDX パケットを終了する

  • ≪ wddx_deserialize
  • wddx_packet_start ≫
  • PHP Manual
  • WDDX 関数
  • 指定した ID の WDDX パケットを終了する

wddx_packet_end

(PHP 4, PHP 5, PHP 7)

wddx_packet_end — 指定した ID の WDDX パケットを終了する

警告

この機能は PHP 7.4.0 で 削除 されました。

説明

wddx_packet_end(resource $packet_id): string

指定した WDDX パケットを終了し、 パケットを含む文字列を返します。

パラメータ

packet_id

wddx_packet_start() が返す WDDX パケット。

戻り値

WDDX パケットを含む文字列を返します。

User Contributed Notes

There are no user contributed notes for this page.


新規の WDDX パケットを内部の構造体を用いて開始する

  • ≪ wddx_packet_end
  • wddx_serialize_value ≫
  • PHP Manual
  • WDDX 関数
  • 新規の WDDX パケットを内部の構造体を用いて開始する

wddx_packet_start

(PHP 4, PHP 5, PHP 7)

wddx_packet_start — 新規の WDDX パケットを内部の構造体を用いて開始する

警告

この機能は PHP 7.4.0 で 削除 されました。

説明

wddx_packet_start(string $comment = ?): resource

変数を順に追加していくための新しい WDDX パケットを開始します。 この関数は、パケットの内部に自動的に構造体の定義を作成し、 そこに変数を保持します。

パラメータ

comment

オプションのコメント文字列。

戻り値

後で他の関数で使用するためのパケット ID、あるいはエラー時に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


単一の値を WDDX パケットにシリアライズする

  • ≪ wddx_packet_start
  • wddx_serialize_vars ≫
  • PHP Manual
  • WDDX 関数
  • 単一の値を WDDX パケットにシリアライズする

wddx_serialize_value

(PHP 4, PHP 5, PHP 7)

wddx_serialize_value — 単一の値を WDDX パケットにシリアライズする

警告

この機能は PHP 7.4.0 で 削除 されました。

説明

wddx_serialize_value(mixed $var, string $comment = ?): string

指定した単一の値をもとにして WDDX パケットを作成します。

パラメータ

var

シリアライズする値。

comment

オプションのコメント文字列。これはヘッダ内で用いられます。

戻り値

WDDX パケット、あるいはエラー時に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


変数を WDDX パケットにシリアライズする

  • ≪ wddx_serialize_value
  • XMLDiff ≫
  • PHP Manual
  • WDDX 関数
  • 変数を WDDX パケットにシリアライズする

wddx_serialize_vars

(PHP 4, PHP 5, PHP 7)

wddx_serialize_vars — 変数を WDDX パケットにシリアライズする

警告

この機能は PHP 7.4.0 で 削除 されました。

説明

wddx_serialize_vars(mixed $var_name, mixed ...$var_names): string

指定された変数をシリアライズしたものを含む構造体を用いて WDDX パケットを作成します。

パラメータ

この関数は、可変長のパラメータを受け取ります。

var_name

変数名を表す文字列、あるいは配列。 配列の中身は、変数名を表す文字列あるいは別の配列などとなります。

var_names

戻り値

WDDX パケット、あるいはエラー時に false を返します。

例

例1 wddx_serialize_vars() の例

<?php
$a = 1;
$b = 5.5;
$c = array("blue", "orange", "violet");
$d = "colors";

$clvars = array("c", "d");
echo wddx_serialize_vars("a", "b", $clvars);
?>

上の例の出力は以下となります。

<wddxPacket version='1.0'><header/><data><struct><var name='a'><number>1</number></var>
<var name='b'><number>5.5</number></var><var name='c'><array length='3'>
<string>blue</string><string>orange</string><string>violet</string></array></var>
<var name='d'><string>colors</string></var></struct></data></wddxPacket>

User Contributed Notes

There are no user contributed notes for this page.


XML diff and merge

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
  • XMLDiff\Base — The XMLDiff\Base class
    • XMLDiff\Base::__construct — Constructor
    • XMLDiff\Base::diff — Produce diff of two XML documents
    • XMLDiff\Base::merge — Produce new XML document based on diff
  • XMLDiff\DOM — The XMLDiff\DOM class
    • XMLDiff\DOM::diff — Diff two DOMDocument objects
    • XMLDiff\DOM::merge — Produce merged DOMDocument
  • XMLDiff\Memory — The XMLDiff\Memory class
    • XMLDiff\Memory::diff — Diff two XML documents
    • XMLDiff\Memory::merge — Produce merged XML document
  • XMLDiff\File — The XMLDiff\File class
    • XMLDiff\File::diff — Diff two XML files
    • XMLDiff\File::merge — Produce merged XML document

User Contributed Notes

There are no user contributed notes for this page.


はじめに

The extension is able to produce diffs of two XML documents and then to apply the difference to the source document. The diff is a XML document containing copy/insert/delete instruction nodes in human readable format. DOMDocument objects, local files and strings in memory can be processed.

User Contributed Notes

There are no user contributed notes for this page.


要件

libdiffmark - version 0.10 is bundled with the extension. If diffmark is available from your system packages, its usage is strongly encouraged.

libxml extension

DOM extension

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

この » PECL 拡張モジュールは PHP にバンドルされていません。

この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 » https://pecl.php.net/package/xmldiff.

A DLL for this PECL extension is available under » http://windows.php.net/downloads/pecl/releases/xmldiff/.

User Contributed Notes

There are no user contributed notes for this page.


The XMLDiff\Base class

(PECL xmldiff >= 0.8.0)

はじめに

Base abstract class for all the comparsion classes in the extension.

クラス概要

class XMLDiff\Base {
/* メソッド */
public __construct(string $nsname)
abstract public diff(mixed $from, mixed $to): mixed
abstract public merge(mixed $src, mixed $diff): mixed
}

目次

  • XMLDiff\Base::__construct — Constructor
  • XMLDiff\Base::diff — Produce diff of two XML documents
  • XMLDiff\Base::merge — Produce new XML document based on diff

User Contributed Notes

There are no user contributed notes for this page.


Constructor

  • ≪ XMLDiff\Base
  • XMLDiff\Base::diff ≫
  • PHP Manual
  • XMLDiff\Base
  • Constructor

XMLDiff\Base::__construct

(PECL xmldiff >= 0.8.0)

XMLDiff\Base::__construct — Constructor

説明

public XMLDiff\Base::__construct(string $nsname)

Base constructor for all the worker classes in the xmldiff extension.

パラメータ

nsname

Custom namespace name for the diff document. The default namespace is http://www.locus.cz/diffmark and that's enough to avoid namespace conflicts. Use this parameter if you want to change it for some reason.

User Contributed Notes

There are no user contributed notes for this page.


Produce diff of two XML documents

  • ≪ XMLDiff\Base::__construct
  • XMLDiff\Base::merge ≫
  • PHP Manual
  • XMLDiff\Base
  • Produce diff of two XML documents

XMLDiff\Base::diff

(PECL xmldiff >= 0.8.0)

XMLDiff\Base::diff — Produce diff of two XML documents

説明

abstract public XMLDiff\Base::diff(mixed $from, mixed $to): mixed

Abstract diff method to be implemented by inheriting classes.

The basic purpose of this method is to produce diff of the two documents. The param order matters and will produce different output.

パラメータ

from

Source XML document.

to

Target XML document.

戻り値

Implementation dependent.

User Contributed Notes

There are no user contributed notes for this page.


Produce new XML document based on diff

  • ≪ XMLDiff\Base::diff
  • XMLDiff\DOM ≫
  • PHP Manual
  • XMLDiff\Base
  • Produce new XML document based on diff

XMLDiff\Base::merge

(PECL xmldiff >= 0.8.0)

XMLDiff\Base::merge — Produce new XML document based on diff

説明

abstract public XMLDiff\Base::merge(mixed $src, mixed $diff): mixed

Abstract merge method to be implemented by inheriting classes.

Basically the method purpose is to produce a new XML document based on the diff information.

パラメータ

src

Source XML document.

diff

Document produced by the diff method.

戻り値

Implementation dependent.

User Contributed Notes

There are no user contributed notes for this page.


The XMLDiff\DOM class

(PECL xmldiff >= 0.8.0)

はじめに

クラス概要

class XMLDiff\DOM extends XMLDiff\Base {
/* メソッド */
public diff(DOMDocument $from, DOMDocument $to): DOMDocument
public merge(DOMDocument $src, DOMDocument $diff): DOMDocument
/* 継承したメソッド */
abstract public XMLDiff\Base::diff(mixed $from, mixed $to): mixed
abstract public XMLDiff\Base::merge(mixed $src, mixed $diff): mixed
}

目次

  • XMLDiff\DOM::diff — Diff two DOMDocument objects
  • XMLDiff\DOM::merge — Produce merged DOMDocument

User Contributed Notes

There are no user contributed notes for this page.


Diff two DOMDocument objects

  • ≪ XMLDiff\DOM
  • XMLDiff\DOM::merge ≫
  • PHP Manual
  • XMLDiff\DOM
  • Diff two DOMDocument objects

XMLDiff\DOM::diff

(PECL xmldiff >= 0.8.0)

XMLDiff\DOM::diff — Diff two DOMDocument objects

説明

public XMLDiff\DOM::diff(DOMDocument $from, DOMDocument $to): DOMDocument

Diff two DOMDocument instances and produce the new one containing the diff information.

パラメータ

from

Source DOMDocument object.

to

Target DOMDocument object.

戻り値

DOMDocument with the diff information or NULL.

User Contributed Notes

jeewiya at gmail dot com 28-Mar-2018 10:43
XMLDiff\DOM can be use like this, for compare xml files changes.

<?php

function getChangeElements($currentContent, $oldContent) {
        try {
            $currentDoc = new DOMDocument();
            $currentDoc->loadXML($currentContent);

            $oldDoc = new DOMDocument();
            $oldDoc->loadXML($oldContent);
            $xmldiff = new XMLDiff\DOM();
            return $xmldiff->diff($oldDoc, $currentDoc);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

getChangeElements('updated.xml', 'old.xml');

?>


Produce merged DOMDocument

  • ≪ XMLDiff\DOM::diff
  • XMLDiff\Memory ≫
  • PHP Manual
  • XMLDiff\DOM
  • Produce merged DOMDocument

XMLDiff\DOM::merge

(PECL xmldiff >= 0.8.0)

XMLDiff\DOM::merge — Produce merged DOMDocument

説明

public XMLDiff\DOM::merge(DOMDocument $src, DOMDocument $diff): DOMDocument

Create new DOMDocument based on the diff.

パラメータ

src

Source DOMDocument object.

diff

DOMDocument object containing the diff information.

戻り値

Merged DOMDocument or NULL.

User Contributed Notes

There are no user contributed notes for this page.


The XMLDiff\Memory class

(PECL xmldiff >= 0.8.0)

はじめに

クラス概要

class XMLDiff\Memory extends XMLDiff\Base {
/* メソッド */
public diff(string $from, string $to): string
public merge(string $src, string $diff): string
/* 継承したメソッド */
abstract public XMLDiff\Base::diff(mixed $from, mixed $to): mixed
abstract public XMLDiff\Base::merge(mixed $src, mixed $diff): mixed
}

目次

  • XMLDiff\Memory::diff — Diff two XML documents
  • XMLDiff\Memory::merge — Produce merged XML document

User Contributed Notes

There are no user contributed notes for this page.


Diff two XML documents

  • ≪ XMLDiff\Memory
  • XMLDiff\Memory::merge ≫
  • PHP Manual
  • XMLDiff\Memory
  • Diff two XML documents

XMLDiff\Memory::diff

(PECL xmldiff >= 0.8.0)

XMLDiff\Memory::diff — Diff two XML documents

説明

public XMLDiff\Memory::diff(string $from, string $to): string

Diff two strings containing XML documents and produce the diff information.

パラメータ

from

Source XML document.

to

Target XML document.

戻り値

String with the XML document containing the diff information or NULL.

User Contributed Notes

There are no user contributed notes for this page.


Produce merged XML document

  • ≪ XMLDiff\Memory::diff
  • XMLDiff\File ≫
  • PHP Manual
  • XMLDiff\Memory
  • Produce merged XML document

XMLDiff\Memory::merge

(PECL xmldiff >= 0.8.0)

XMLDiff\Memory::merge — Produce merged XML document

説明

public XMLDiff\Memory::merge(string $src, string $diff): string

Create new XML document based on diffs and source document.

パラメータ

src

Source XML document.

diff

XML document containing diff information.

戻り値

String with the new XML document or NULL.

User Contributed Notes

There are no user contributed notes for this page.


The XMLDiff\File class

(PECL xmldiff >= 0.8.0)

はじめに

クラス概要

class XMLDiff\File extends XMLDiff\Base {
/* メソッド */
public diff(string $from, string $to): string
public merge(string $src, string $diff): string
/* 継承したメソッド */
abstract public XMLDiff\Base::diff(mixed $from, mixed $to): mixed
abstract public XMLDiff\Base::merge(mixed $src, mixed $diff): mixed
}

目次

  • XMLDiff\File::diff — Diff two XML files
  • XMLDiff\File::merge — Produce merged XML document

User Contributed Notes

ngbabu at gmail dot com 21-Nov-2015 08:45
The following snippet will show the use case of XMLDiff\File.

<?php
$dxml=new XMLDiff\File;
$diff = $dxml->diff("file1.xml", "file2.xml");
$difffile = 'difference.xml';
file_put_contents($difffile, $diff);
?>


Diff two XML files

  • ≪ XMLDiff\File
  • XMLDiff\File::merge ≫
  • PHP Manual
  • XMLDiff\File
  • Diff two XML files

XMLDiff\File::diff

(PECL xmldiff >= 0.8.0)

XMLDiff\File::diff — Diff two XML files

説明

public XMLDiff\File::diff(string $from, string $to): string

Diff two local XML files and produce string with the diff information.

パラメータ

from

Path to the source document.

to

Path to the target document.

戻り値

String with the XML document containing the diff information or NULL.

User Contributed Notes

There are no user contributed notes for this page.


Produce merged XML document

  • ≪ XMLDiff\File::diff
  • XML パーサ ≫
  • PHP Manual
  • XMLDiff\File
  • Produce merged XML document

XMLDiff\File::merge

(PECL xmldiff >= 0.8.0)

XMLDiff\File::merge — Produce merged XML document

説明

public XMLDiff\File::merge(string $src, string $diff): string

Create new XML document based on diffs and source document.

パラメータ

src

Path to the source XML document.

diff

Path to the XML document with the diff information.

戻り値

String with the new XML document or NULL.

User Contributed Notes

There are no user contributed notes for this page.


XML パーサ

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • リソース型
  • 定義済み定数
  • イベントハンドラ
  • 大文字変換(Case Folding)
  • エラーコード
  • 文字エンコーディング
  • 例
    • XML エレメント構造の例
    • XMLタグのマッピングの例
    • XML 外部エンティティの例
  • XML パーサ 関数
    • xml_error_string — XML パーサのエラー文字列を得る
    • xml_get_current_byte_index — XML パーサのカレントのバイトインデックスを得る
    • xml_get_current_column_number — XML パーサのカレントのカラム番号を取得する
    • xml_get_current_line_number — XML パーサのカレントの行番号を得る
    • xml_get_error_code — XML パーサのエラーコードを得る
    • xml_parse — XML ドキュメントの処理を開始する
    • xml_parse_into_struct — 配列構造体に XML データを処理する
    • xml_parser_create — XML パーサを作成する
    • xml_parser_create_ns — 名前空間をサポートした XML パーサを生成する
    • xml_parser_free — XML パーサを解放する
    • xml_parser_get_option — XML パーサからオプションを得る
    • xml_parser_set_option — XML パーサのオプションを設定する
    • xml_set_character_data_handler — 文字データハンドラを設定する
    • xml_set_default_handler — デフォルトのハンドラを設定する
    • xml_set_element_handler — 開始要素および終了要素のハンドラを設定する
    • xml_set_end_namespace_decl_handler — 名前空間終了ハンドラを設定する
    • xml_set_external_entity_ref_handler — 外部エンティティリファレンスハンドラを設定する
    • xml_set_notation_decl_handler — 表記法宣言ハンドラを設定する
    • xml_set_object — オブジェクト内部で XML パーサを使用する
    • xml_set_processing_instruction_handler — 処理命令 (PI) 用ハンドラを設定する
    • xml_set_start_namespace_decl_handler — 名前空間開始ハンドラを設定する
    • xml_set_unparsed_entity_decl_handler — 処理されないエンティティ宣言用ハンドラを設定する
  • XMLParser — XMLParser クラス

User Contributed Notes

There are no user contributed notes for this page.


はじめに

XML (eXtensible Markup Language) は、Web における構造化された ドキュメント交換用のデータフォーマットです。XML は、World Wide Web consortium (W3C) で規定された規格です。XML に関する情報およ び関連する技術は、» http://www.w3.org/XML/ で参照することができます。

このPHP拡張モジュールは、James Clark氏の expatのサポートをPHPに付加します。 このツールキットは、XML ドキュメントの構文解析をしますが、 検証は行いません。3種類のソース 文字エンコーディング、 US-ASCII, ISO-8859-1 ,UTF-8 がPHPでサポートされます。UTF-16 はサポートさ れません。

この拡張モジュールは、XML パーサの作成 を行い、さまざまな XML イベントに関してハンドラ を定義します。各XMLパーサーには、設定可能な小数の パラメータ もあります。

User Contributed Notes

There are no user contributed notes for this page.


要件

この拡張モジュールを使うには libxml 拡張モジュールが必要です。つまり、 PHP 7.4 以降では --with-libxml、それより前のバージョンでは --enable-libxml も指定しなければならないということです。 しかし、libxml はデフォルトで有効になっているのでこのオプションは暗黙のうちに指定されています。

この拡張モジュールは、expat を使用します。 これは、» https://libexpat.github.io/にあります。 expat に付属のMakefileは、デフォルトでライブラリを構築しません。 これを行うmakeルールを次のように指定できます。

libexpat.a: $(OBJS)
    ar -rc $@ $(OBJS)
    ranlib $@
expat のソース RPM パッケージが » https://sourceforge.net/projects/expat/ にあります。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

この拡張モジュールはデフォルトで有効になっています。無効にしたい場合は、次のオプションを指定してコンパイルします。 --disable-xml

付属しているexpatライブラリを用いて以下の関数はデフォルトで有効となっ ています。 --disable-xmlを指定してXMLサポート を無効にすることができます。Apache 1.3.9以降でモジュールとしてPHPを コンパイルする場合、PHPは、Apacheから自動的に付属する expatライブラリを使用します。 付属するexpatライブラリを使用したくない場合には、 --with-expat-dir=DIRを指定してPHP のconfigureを実行してください。ただし、DIRは、expatをインストールした ベースディレクトリです。

Windows 版の PHP には この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。

User Contributed Notes

There are no user contributed notes for this page.


リソース型

PHP 8.0.0 より前のバージョンでは、xml_parser_create()および xml_parser_create_ns() により返された xmlリソースは、 この拡張モジュールにより提供された関数で使用される XMLパーサのインスタンスを参照します。

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

XML_ERROR_NONE (int)
XML_ERROR_NO_MEMORY (int)
XML_ERROR_SYNTAX (int)
XML_ERROR_NO_ELEMENTS (int)
XML_ERROR_INVALID_TOKEN (int)
XML_ERROR_UNCLOSED_TOKEN (int)
XML_ERROR_PARTIAL_CHAR (int)
XML_ERROR_TAG_MISMATCH (int)
XML_ERROR_DUPLICATE_ATTRIBUTE (int)
XML_ERROR_JUNK_AFTER_DOC_ELEMENT (int)
XML_ERROR_PARAM_ENTITY_REF (int)
XML_ERROR_UNDEFINED_ENTITY (int)
XML_ERROR_RECURSIVE_ENTITY_REF (int)
XML_ERROR_ASYNC_ENTITY (int)
XML_ERROR_BAD_CHAR_REF (int)
XML_ERROR_BINARY_ENTITY_REF (int)
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF (int)
XML_ERROR_MISPLACED_XML_PI (int)
XML_ERROR_UNKNOWN_ENCODING (int)
XML_ERROR_INCORRECT_ENCODING (int)
XML_ERROR_UNCLOSED_CDATA_SECTION (int)
XML_ERROR_EXTERNAL_ENTITY_HANDLING (int)
XML_OPTION_CASE_FOLDING (int)
XML_OPTION_TARGET_ENCODING (int)
XML_OPTION_SKIP_TAGSTART (int)
XML_OPTION_SKIP_WHITE (int)
XML_SAX_IMPL (string)
SAX の実装方式を保持します。 libxml あるいは expat となります。

User Contributed Notes

There are no user contributed notes for this page.


イベントハンドラ

XML イベントハンドラは次のように定義されます。

サポートされる XML ハンドラ
ハンドラ設定用の PHP 関数 | イベントの説明
xml_set_element_handler() | 要素イベントは、XML パーサーが開始または終了タグに出会うたび に発行されます。開始タグと終了タグについて別のハンドラがあり ます。
xml_set_character_data_handler() | 文字データは、タグの間の空白を含めて XML ドキュメントにおけ るほぼ全ての非マークアップ部分の内容です。XML パーサーは、 空白を加えたり削除したりしないことに注意してください。空白が 意味を有するかどうかを決めるのは、アプリケーション側の責任 です。
xml_set_processing_instruction_handler() | PHP プログラマは、既に処理用命令 (PI) に既に慣れているに違 いありません。<?php ?> は処理用命令であり、この場合、 php は "PI ターゲット"と呼ばれます。 これらの処理はアプリケーション依存ですが、全ての PI ターゲッ トが "XML" から始まることだけは、規定されています。
xml_set_default_handler() | 別のハンドラでしないことをデフォルトのハンドラで行います。 XML およびドキュメント型の宣言のようなことをデフォルトハンドラで 行います。
xml_set_unparsed_entity_decl_handler() | このハンドラは、処理されない (NDATA) エンティティの宣言用に コールされます。
xml_set_notation_decl_handler() | このハンドラは、表記の宣言用にコールされます。
xml_set_external_entity_ref_handler() | このハンドラは、XML パーサーが外部処理された通常のエンティティ への参照を見つけた際にコールされます。これは、例えば、ファ イルまたは URL への参照とすることが可能です。例としては、 外部エンティティ の例 を参照ください。
xml_set_start_namespace_decl_handler() | このハンドラは、名前空間宣言の開始時にコールされます。
xml_set_end_namespace_decl_handler() | このハンドラは、名前空間宣言の終了時にコールされます。このイベントは libXML によりトリガーされない ことに注意しましょう。

User Contributed Notes

There are no user contributed notes for this page.


大文字変換(Case Folding)

要素ハンドラ関数は、その要素に大文字小文字を変換する (case-folded)の名前をつけることができます。 大文字変換(case-folding) は、 "大文字でないものは等価な大文字に置換される一連の文字に適用されるプロセス" として定義されています。言い替えると、 XML に関しては単に大文字変換は大文字にすることを意味します。

デフォルトで、ハンドラ関数に渡される全ての要素名は、大文字変換さ れます。この動作は、xml_parser_get_option() およびxml_parser_set_option() 関数でXMLパーサー 毎にそれぞれ問い合わせ、制御することが可能です。

User Contributed Notes

There are no user contributed notes for this page.


エラーコード

(xml_parse() により返されるものとして) XMLエラーコードとして次のような定数が定義されています。:

  • XML_ERROR_NONE
  • XML_ERROR_NO_MEMORY
  • XML_ERROR_SYNTAX
  • XML_ERROR_NO_ELEMENTS
  • XML_ERROR_INVALID_TOKEN
  • XML_ERROR_UNCLOSED_TOKEN
  • XML_ERROR_PARTIAL_CHAR
  • XML_ERROR_TAG_MISMATCH
  • XML_ERROR_DUPLICATE_ATTRIBUTE
  • XML_ERROR_JUNK_AFTER_DOC_ELEMENT
  • XML_ERROR_PARAM_ENTITY_REF
  • XML_ERROR_UNDEFINED_ENTITY
  • XML_ERROR_RECURSIVE_ENTITY_REF
  • XML_ERROR_ASYNC_ENTITY
  • XML_ERROR_BAD_CHAR_REF
  • XML_ERROR_BINARY_ENTITY_REF
  • XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF
  • XML_ERROR_MISPLACED_XML_PI
  • XML_ERROR_UNKNOWN_ENCODING
  • XML_ERROR_INCORRECT_ENCODING
  • XML_ERROR_UNCLOSED_CDATA_SECTION
  • XML_ERROR_EXTERNAL_ENTITY_HANDLING

User Contributed Notes

There are no user contributed notes for this page.


文字エンコーディング

PHPのXML拡張モジュールは、異なった文字エンコーディング を通じて» Unicode 文字セットをサポートします。ソースエンコーディング およびターゲットエンコーディング という2種類の文字エンコーディングがあります。 PHP におけるドキュメントの内部表現は、常に UTF-8でエンコードされます。

ソースエンコーディングは、XMLドキュメントが 構文解析された際に行わ れます。XML パーサの 作成を行う際に、ソースエンコードを指定することができます。 (このエンコーディングは、その XML パーサーが存在する間、後で変更す ることはできません)サポートされるソースエンコーディングは、 ISO-8859-1, US-ASCII , UTF-8 です。前の二つは、シングルバイトエンコー ディングです。これは、各文字がシングルバイトで表現されることを意 味します。UTF-8 は、1から4バイトの可変ビット 数(最大21ビット)で構成された文字をエンコードすることが可能です。 PHP で用いられるデフォルトのソースエンコーディングは、 ISO-8859-1です。

ターゲットエンコーディングは、PHPがデータをXMLハンドラ関数に 渡す時に行われます。あるXMLパーサが作成された際、ターゲットエン コーディングは、ソースエンコーディングと同様に設定されます。 しかし、これは、いつでも変更可能です。ターゲットエンコーディング は、タグ名と同様に文字データに作用し、命令を処理します。

XML パーサがソースエンコーディングが表現できる範囲の外側の文字に 出会った場合、エラーが返されます。

解釈するXMLドキュメントにおいてPHPが文字に出会った際に、選択した ターゲットエンコーディングで表現できない文字に出会った場合、問題 の文字は "降格" されます。現在、このことはこのような文字が疑問符 で置換されることを意味します。

User Contributed Notes

There are no user contributed notes for this page.


例

目次

  • XML エレメント構造の例
  • XMLタグのマッピングの例
  • XML 外部エンティティの例

User Contributed Notes

There are no user contributed notes for this page.


XML エレメント構造の例

この最初の例は、あるドキュメント中のstart エレメントの構造をイン デントを付けて表示します。

例1 XML エレメント構造を表示

<?php
$file = "data.xml";
$depth = 0;

function startElement($parser, $name, $attrs)
{
global $depth;

for ($i = 0; $i < $depth; $i++) {
echo " ";
}
echo "$name\n";
$depth++;
}

function endElement($parser, $name)
{
global $depth;
$depth--;
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
die("XML 入力をオープンできませんでした");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML エラー: %s が %d 行目で発生しました",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
?>

User Contributed Notes

There are no user contributed notes for this page.


XMLタグのマッピングの例

例1 XMLをHTMLにマップする

この例は、XMLドキュメントのタグを直接HTMLタグにマップします。 "map array" にないエレメントは無視されます。もちろん、この例は、 特定の XML ドキュメント型を有する場合のみ動作します。

<?php
$file = "data.xml";
$map_array = array(
"BOLD" => "B",
"EMPHASIS" => "I",
"LITERAL" => "TT"
);

function startElement($parser, $name, $attrs)
{
global $map_array;
if (isset($map_array[$name])) {
echo "<$map_array[$name]>";
}
}

function endElement($parser, $name)
{
global $map_array;
if (isset($map_array[$name])) {
echo "</$map_array[$name]>";
}
}

function characterData($parser, $data)
{
echo $data;
}

$xml_parser = xml_parser_create();
// case-folding を用いることで、$map_array から確実にタグを見つけられるようにします
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("XML 入力をオープンできませんでした");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML エラー: %s が %d 行目で発生しました",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
?>

User Contributed Notes

There are no user contributed notes for this page.


XML 外部エンティティの例

この例は、XML コードに焦点を当てます。この例は、他のドキュメント をインクルードし処理するための外部エンティティリファレンスのハン ドラの使用法およびPIの処理方法、PIが含むコードに関する"信頼度" を定義する手段を説明します。

この例で使用される XML ドキュメントは、例題ファイル (xmltest.xml および xmltest2.xml) にあります。

例1 外部エンティティの例

<?php
$file = "xmltest.xml";

function trustedFile($file)
{
// 信頼できるのは、自分自身が所有しているローカルファイルのみです
if (!preg_match("@^([a-z][a-z0-9+.-]*)\:\/\/@i", $file)
&& fileowner($file) == getmyuid()) {
return true;
}
return false;
}

function startElement($parser, $name, $attribs)
{
echo "&lt;<font color=\"#0000cc\">$name</font>";
if (count($attribs)) {
foreach ($attribs as $k => $v) {
echo " <font color=\"#009900\">$k</font>=\"<font
color=\"#990000\">$v</font>\"";
}
}
echo "&gt;";
}

function endElement($parser, $name)
{
echo "&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}

function characterData($parser, $data)
{
echo "<b>$data</b>";
}

function PIHandler($parser, $target, $data)
{
switch (strtolower($target)) {
case "php":
global $parser_file;
// もし「信頼できる」ドキュメントだった場合、その中に書かれている
// PHP コードを実行しても安全だと考えます。そうでない場合、
// コードを実行するかわりにコードそのものを表示します。
if (trustedFile($parser_file[$parser])) {
eval($data);
} else {
printf("信頼できない PHP コード: <i>%s</i>",
htmlspecialchars($data));
}
break;
}
}

function defaultHandler($parser, $data)
{
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
printf('<font color="#aa00aa">%s</font>',
htmlspecialchars($data));
} else {
printf('<font size="-1">%s</font>',
htmlspecialchars($data));
}
}

function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
$publicId) {
if ($systemId) {
if (!list($parser, $fp) = new_xml_parser($systemId)) {
printf("エンティティ %s (%s にある) をオープンできませんでした\n", $openEntityNames,
$systemId);
return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
printf("XML エラー: %s が、%d 行目でエンティティ %s のパース中に発生しました\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), $openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}

function new_xml_parser($file)
{
global $parser_file;

$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
xml_set_default_handler($xml_parser, "defaultHandler");
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");

if (!($fp = @fopen($file, "r"))) {
return false;
}
if (!is_array($parser_file)) {
settype($parser_file, "array");
}
$parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);
}

if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
die("XML 入力をオープンできませんでした");
}

echo "<pre>";
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML エラー: %s が %d 行目で発生しました\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
echo "</pre>";
echo "パースが完了しました\n";
xml_parser_free($xml_parser);

?>

例2 xmltest.xml

<?xml version='1.0'?>
<!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [
<!ENTITY plainEntity "FOO entity">
<!ENTITY systemEntity SYSTEM "xmltest2.xml">
]>
<chapter>
 <TITLE>Title &plainEntity;</TITLE>
 <para>
  <informaltable>
   <tgroup cols="3">
    <tbody>
     <row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
     <row><entry>a2</entry><entry>c2</entry></row>
     <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
    </tbody>
   </tgroup>
  </informaltable>
 </para>
 &systemEntity;
 <section id="about">
  <title>About this Document</title>
  <para>
   <!-- this is a comment -->
   <?php echo 'Hi!  This is PHP version ' . phpversion(); ?>
  </para>
 </section>
</chapter>

このファイルは、xmltest.xml からインクルードされます。

例3 xmltest2.xml

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY testEnt "test entity">
]>
<foo>
   <element attrib="value"/>
   &testEnt;
   <?php echo "This is some more PHP code being executed."; ?>
</foo>

User Contributed Notes

There are no user contributed notes for this page.


XML パーサ 関数

目次

  • xml_error_string — XML パーサのエラー文字列を得る
  • xml_get_current_byte_index — XML パーサのカレントのバイトインデックスを得る
  • xml_get_current_column_number — XML パーサのカレントのカラム番号を取得する
  • xml_get_current_line_number — XML パーサのカレントの行番号を得る
  • xml_get_error_code — XML パーサのエラーコードを得る
  • xml_parse — XML ドキュメントの処理を開始する
  • xml_parse_into_struct — 配列構造体に XML データを処理する
  • xml_parser_create — XML パーサを作成する
  • xml_parser_create_ns — 名前空間をサポートした XML パーサを生成する
  • xml_parser_free — XML パーサを解放する
  • xml_parser_get_option — XML パーサからオプションを得る
  • xml_parser_set_option — XML パーサのオプションを設定する
  • xml_set_character_data_handler — 文字データハンドラを設定する
  • xml_set_default_handler — デフォルトのハンドラを設定する
  • xml_set_element_handler — 開始要素および終了要素のハンドラを設定する
  • xml_set_end_namespace_decl_handler — 名前空間終了ハンドラを設定する
  • xml_set_external_entity_ref_handler — 外部エンティティリファレンスハンドラを設定する
  • xml_set_notation_decl_handler — 表記法宣言ハンドラを設定する
  • xml_set_object — オブジェクト内部で XML パーサを使用する
  • xml_set_processing_instruction_handler — 処理命令 (PI) 用ハンドラを設定する
  • xml_set_start_namespace_decl_handler — 名前空間開始ハンドラを設定する
  • xml_set_unparsed_entity_decl_handler — 処理されないエンティティ宣言用ハンドラを設定する

User Contributed Notes

There are no user contributed notes for this page.


XML パーサのエラー文字列を得る

  • ≪ XML パーサ 関数
  • xml_get_current_byte_index ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサのエラー文字列を得る

xml_error_string

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_error_string — XML パーサのエラー文字列を得る

説明

xml_error_string(int $error_code): ?string

エラーコード error_code の説明を有する文字列を 返します。

パラメータ

error_code

xml_get_error_code() からのエラーコード。

戻り値

エラーコード error_code の説明を有する文字列を 返します。説明がない場合には null または "Unknown" を返します。

参考

  • xml_get_error_code() - XML パーサのエラーコードを得る

User Contributed Notes

There are no user contributed notes for this page.


XML パーサのカレントのバイトインデックスを得る

  • ≪ xml_error_string
  • xml_get_current_column_number ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサのカレントのバイトインデックスを得る

xml_get_current_byte_index

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_get_current_byte_index — XML パーサのカレントのバイトインデックスを得る

説明

xml_get_current_byte_index(XMLParser $parser): int

指定した XML パーサのカレントのバイトインデックスを取得します。

パラメータ

parser

バイトインデックスを得る XML パーサへのリファレンス。

戻り値

データバッファにおいて、パーサが現在処理中のバイトインデックス (先頭が 0) を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

注意

警告

この関数は、UTF-8 エンコードされたテキストに基づいたバイトインデックスを返します。 入力が他のエンコーディングであっても無視します。

参考

  • xml_get_current_column_number() - XML パーサのカレントのカラム番号を取得する
  • xml_get_current_line_number() - XML パーサのカレントの行番号を得る

User Contributed Notes

turan dot yuksel at tcmb dot gov dot tr 20-Sep-2005 03:38
The outcome of this function is heavily dependent on the parser implementation used. For example, at the point where the start_element_ callback is called, libxml2 parser consumes the entire element name and attributes, however expat does not.


XML パーサのカレントのカラム番号を取得する

  • ≪ xml_get_current_byte_index
  • xml_get_current_line_number ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサのカレントのカラム番号を取得する

xml_get_current_column_number

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_get_current_column_number — XML パーサのカレントのカラム番号を取得する

説明

xml_get_current_column_number(XMLParser $parser): int

指定した XML パーサのカレントのカラム番号を取得します。

パラメータ

parser

カラム番号を得る XML パーサへのリファレンス。

戻り値

現在のパーサの (xml_get_current_line_number() で取得した) 現在の行のカラムを返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

参考

  • xml_get_current_byte_index() - XML パーサのカレントのバイトインデックスを得る
  • xml_get_current_line_number() - XML パーサのカレントの行番号を得る

User Contributed Notes

There are no user contributed notes for this page.


XML パーサのカレントの行番号を得る

  • ≪ xml_get_current_column_number
  • xml_get_error_code ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサのカレントの行番号を得る

xml_get_current_line_number

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_get_current_line_number — XML パーサのカレントの行番号を得る

説明

xml_get_current_line_number(XMLParser $parser): int

指定した XML パーサのカレントの行番号を取得します。

パラメータ

parser

行番号を得る XML パーサへのリファレンス。

戻り値

データバッファの中で、現在パーサが処理中の行番号を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

参考

  • xml_get_current_column_number() - XML パーサのカレントのカラム番号を取得する
  • xml_get_current_byte_index() - XML パーサのカレントのバイトインデックスを得る

User Contributed Notes

There are no user contributed notes for this page.


XML パーサのエラーコードを得る

  • ≪ xml_get_current_line_number
  • xml_parse ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサのエラーコードを得る

xml_get_error_code

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_get_error_code — XML パーサのエラーコードを得る

説明

xml_get_error_code(XMLParser $parser): int

XML パーサのエラーコードを取得します。

パラメータ

parser

エラーコードを得る XML パーサへのリファレンス。

戻り値

エラーコードセクション に 一覧が示されたエラーコードを返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

参考

  • xml_error_string() - XML パーサのエラー文字列を得る

User Contributed Notes

There are no user contributed notes for this page.


XML ドキュメントの処理を開始する

  • ≪ xml_get_error_code
  • xml_parse_into_struct ≫
  • PHP Manual
  • XML パーサ 関数
  • XML ドキュメントの処理を開始する

xml_parse

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parse — XML ドキュメントの処理を開始する

説明

xml_parse(XMLParser $parser, string $data, bool $is_final = false): int

xml_parse() は XML ドキュメントを処理します。 設定されているイベントのハンドラが、必要に応じてコールされます。

パラメータ

parser

使用する XML パーサへのリファレンス。

data

処理するデータ。ドキュメントは、 is_final パラメータが設定され、 最後のデータが処理され true になるまで、新規のデータに関して 複数回 xml_parse() をコールすることにより、 部分毎で処理することが可能です。

is_final

true が設定された場合、data は この処理の間に送られた最後のデータということになります。

戻り値

成功した場合に 1、失敗した場合に 0 を返します。

処理が成功しなかった場合、エラー情報を
xml_get_error_code(),
xml_error_string(),
xml_get_current_line_number(),
xml_get_current_column_number() および
xml_get_current_byte_index()
により取得可能です。

注意:

エンティティのエラーが報告されるのは、ドキュメントの最後で行われます。 つまり is_final が true に設定されている場合だけです。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

例

例1 巨大なXML文書を切り分けてパースする

この例は、 どのようにして巨大なXML文書を読み取り、チャンクに分けて パースするのかを示しています。 これにより、文書全体をメモリに置く必要がないようにします。 エラーハンドリングは例を簡単にするため省略しています。

<?php
$stream = fopen('large.xml', 'r');
$parser = xml_parser_create();
// ハンドラをセットアップする
while (($data = fread($stream, 16384))) {
xml_parse($parser, $data); // 現在のチャンクをパースする
}
xml_parse($parser, '', true); // パースを終了する
xml_parser_free($parser);
fclose($stream);

User Contributed Notes

lz_speedy at web dot de 30-Dec-2008 10:20
Best seen xml2array function ever
<?php
function xml2array($url, $get_attributes = 1, $priority = 'tag')
{
    $contents = "";
    if (!function_exists('xml_parser_create'))
    {
        return array ();
    }
    $parser = xml_parser_create('');
    if (!($fp = @ fopen($url, 'rb')))
    {
        return array ();
    }
    while (!feof($fp))
    {
        $contents .= fread($fp, 8192);
    }
    fclose($fp);
    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, trim($contents), $xml_values);
    xml_parser_free($parser);
    if (!$xml_values)
        return; //Hmm...
    $xml_array = array ();
    $parents = array ();
    $opened_tags = array ();
    $arr = array ();
    $current = & $xml_array;
    $repeated_tag_index = array ();
    foreach ($xml_values as $data)
    {
        unset ($attributes, $value);
        extract($data);
        $result = array ();
        $attributes_data = array ();
        if (isset ($value))
        {
            if ($priority == 'tag')
                $result = $value;
            else
                $result['value'] = $value;
        }
        if (isset ($attributes) and $get_attributes)
        {
            foreach ($attributes as $attr => $val)
            {
                if ($priority == 'tag')
                    $attributes_data[$attr] = $val;
                else
                    $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
            }
        }
        if ($type == "open")
        {
            $parent[$level -1] = & $current;
            if (!is_array($current) or (!in_array($tag, array_keys($current))))
            {
                $current[$tag] = $result;
                if ($attributes_data)
                    $current[$tag . '_attr'] = $attributes_data;
                $repeated_tag_index[$tag . '_' . $level] = 1;
                $current = & $current[$tag];
            }
            else
            {
                if (isset ($current[$tag][0]))
                {
                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
                    $repeated_tag_index[$tag . '_' . $level]++;
                }
                else
                {
                    $current[$tag] = array (
                        $current[$tag],
                        $result
                    );
                    $repeated_tag_index[$tag . '_' . $level] = 2;
                    if (isset ($current[$tag . '_attr']))
                    {
                        $current[$tag]['0_attr'] = $current[$tag . '_attr'];
                        unset ($current[$tag . '_attr']);
                    }
                }
                $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1;
                $current = & $current[$tag][$last_item_index];
            }
        }
        elseif ($type == "complete")
        {
            if (!isset ($current[$tag]))
            {
                $current[$tag] = $result;
                $repeated_tag_index[$tag . '_' . $level] = 1;
                if ($priority == 'tag' and $attributes_data)
                    $current[$tag . '_attr'] = $attributes_data;
            }
            else
            {
                if (isset ($current[$tag][0]) and is_array($current[$tag]))
                {
                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
                    if ($priority == 'tag' and $get_attributes and $attributes_data)
                    {
                        $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
                    }
                    $repeated_tag_index[$tag . '_' . $level]++;
                }
                else
                {
                    $current[$tag] = array (
                        $current[$tag],
                        $result
                    );
                    $repeated_tag_index[$tag . '_' . $level] = 1;
                    if ($priority == 'tag' and $get_attributes)
                    {
                        if (isset ($current[$tag . '_attr']))
                        {
                            $current[$tag]['0_attr'] = $current[$tag . '_attr'];
                            unset ($current[$tag . '_attr']);
                        }
                        if ($attributes_data)
                        {
                            $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
                        }
                    }
                    $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
                }
            }
        }
        elseif ($type == 'close')
        {
            $current = & $parent[$level -1];
        }
    }
    return ($xml_array);
}
?>

Returns a well formed array like the structure of the xml-document

<root>
 <child1>
  <child1child1/>
 </child1>
</root>

create an array like
array[root][child1][child1child1]

lg
neoyahuu at yahoo dot com 12-Dec-2007 08:18
Instead of passing a URL, we can pass the XML content to this class (either you
 want to use CURL, Socks or fopen to retrieve it first) and instead of using
 array, I'm using separator '|' to identify which data to get (in order to make
 it short to retrieve a complex XML data). Here is my class with built-in fopen
 which you can pass URL or you can pass the content instead :

p/s : thanks to this great help page.

<?php

class xx_xml {

    // XML parser variables
    var $parser;
    var $name;
    var $attr;
    var $data  = array();
    var $stack = array();
    var $keys;
    var $path;

    // either you pass url atau contents.
    // Use 'url' or 'contents' for the parameter
    var $type;

    // function with the default parameter value
    function xx_xml($url='http://www.example.com', $type='url') {
        $this->type = $type;
        $this->url  = $url;
        $this->parse();
    }

    // parse XML data
    function parse()
    {
        $data = '';
        $this->parser = xml_parser_create();
        xml_set_object($this->parser, $this);
        xml_set_element_handler($this->parser, 'startXML', 'endXML');
        xml_set_character_data_handler($this->parser, 'charXML');

        xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);

        if ($this->type == 'url') {
            // if use type = 'url' now we open the XML with fopen

            if (!($fp = @fopen($this->url, 'rb'))) {
                $this->error("Cannot open {$this->url}");
            }

            while (($data = fread($fp, 8192))) {
                if (!xml_parse($this->parser, $data, feof($fp))) {
                    $this->error(sprintf('XML error at line %d column %d',
                    xml_get_current_line_number($this->parser),
                    xml_get_current_column_number($this->parser)));
                }
            }
        } else if ($this->type == 'contents') {
            // Now we can pass the contents, maybe if you want
            // to use CURL, SOCK or other method.
            $lines = explode("\n",$this->url);
            foreach ($lines as $val) {
                if (trim($val) == '')
                    continue;
                $data = $val . "\n";
                if (!xml_parse($this->parser, $data)) {
                    $this->error(sprintf('XML error at line %d column %d',
                    xml_get_current_line_number($this->parser),
                    xml_get_current_column_number($this->parser)));
                }
            }
        }
    }

    function startXML($parser, $name, $attr)    {
        $this->stack[$name] = array();
        $keys = '';
        $total = count($this->stack)-1;
        $i=0;
        foreach ($this->stack as $key => $val)    {
            if (count($this->stack) > 1) {
                if ($total == $i)
                    $keys .= $key;
                else
                    $keys .= $key . '|'; // The saparator
            }
            else
                $keys .= $key;
            $i++;
        }
        if (array_key_exists($keys, $this->data))    {
            $this->data[$keys][] = $attr;
        }    else
            $this->data[$keys] = $attr;
        $this->keys = $keys;
    }

    function endXML($parser, $name)    {
        end($this->stack);
        if (key($this->stack) == $name)
            array_pop($this->stack);
    }

    function charXML($parser, $data)    {
        if (trim($data) != '')
            $this->data[$this->keys]['data'][] = trim(str_replace("\n", '', $data));
    }

    function error($msg)    {
        echo "<div align=\"center\">
            <font color=\"red\"><b>Error: $msg</b></font>
            </div>";
        exit();
    }
}

?>

And example of retrieving XML data:
p/s: example use to retrieve weather

<?php
include_once "xx_xml.class.php";

// Im using simple curl (the original is in class) to get the contents

$pageurl = "http://xml.weather.yahoo.com/forecastrss?p=MYXX0008&u=c";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL, $pageurl );
$thecontents = curl_exec ( $ch );
curl_close($ch);

// We want to pass only a ready XML content instead of URL
// But if you want to use URL , skip the curl functions above and use this
// $xx4 = new xx_xml("url here",'url');

$xx4 = new xx_xml($thecontents,'contents');
// As you can see, we use saparator '|' instead of long array
$Code = $xx4->data ['rss|channel|item|yweather:condition']['code'] ;
$Celcius = $xx4->data ['rss|channel|item|yweather:condition']['temp'] ;
$Text = $xx4->data ['rss|channel|item|yweather:condition']['text'] ;
$Cityname = $xx4->data ['rss|channel|yweather:location']['city'] ;

?>

Hope this helps.


配列構造体に XML データを処理する

  • ≪ xml_parse
  • xml_parser_create ≫
  • PHP Manual
  • XML パーサ 関数
  • 配列構造体に XML データを処理する

xml_parse_into_struct

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parse_into_struct — 配列構造体に XML データを処理する

説明

xml_parse_into_struct(
XMLParser $parser,
string $data,
array &$values,
array &$index = null
): int

この関数は、XML 文字列を処理し、2つの配列構造体に代入します。 ひとつめの配列 (index) は、配列 values にある適当な値の位置を指すポインタを保持しています。 これら最後の二つのパラメータは参照渡しとする必要があります。

パラメータ

parser

XML パーサへの参照。

data

XML データを含む文字列。

values

XML データの値を含む配列。

index

$values 内の適切な値の場所をさすポインタの配列。

戻り値

xml_parse_into_struct() は失敗した場合に 0、 成功した場合に 1 を返します。これは false および true とは 異なるものですので、=== のような演算子を使用する場合は注意しましょう。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

例

以下の例は、この関数により生成された配列の内部構造を示すものです。 noteタグをparaタグの中に埋 め込んで使用した後、これをパースし、生成された構造体を出力します。

例1 xml_parse_into_struct() の例

<?php
$simple = "<para><note>simple note</note></para>";
$p = xml_parser_create();
xml_parse_into_struct($p, $simple, $vals, $index);
xml_parser_free($p);
echo "Index array\n";
print_r($index);
echo "\nVals array\n";
print_r($vals);
?>

このコードを実行した場合、出力は次のようになります。

Index array
Array
(
    [PARA] => Array
        (
            [0] => 0
            [1] => 2
        )

    [NOTE] => Array
        (
            [0] => 1
        )

)

Vals array
Array
(
    [0] => Array
        (
            [tag] => PARA
            [type] => open
            [level] => 1
        )

    [1] => Array
        (
            [tag] => NOTE
            [type] => complete
            [level] => 2
            [value] => simple note
        )

    [2] => Array
        (
            [tag] => PARA
            [type] => close
            [level] => 1
        )

)

(expatライブラリを使用した)イベント駆動型パーサによる処理は、XML ドキュメントが複雑な場合に複雑になる場合があります。この関数は、 DOM形式のオブジェクトを生成しませんが、ツリー風に一連の処理を行い 得る構造体を生成します。つまり、XMLのファイルを表すオブジェクトを 容易に作成することが可能です。次のXMLファイルを見てみましょう。 このファイルでは、アミノ酸の情報に関する小さなデータベースを表します。

例2 moldb.xml - 分子情報の小さなデータベース

<?xml version="1.0"?>
<moldb>

  <molecule>
      <name>Alanine</name>
      <symbol>ala</symbol>
      <code>A</code>
      <type>hydrophobic</type>
  </molecule>

  <molecule>
      <name>Lysine</name>
      <symbol>lys</symbol>
      <code>K</code>
      <type>charged</type>
  </molecule>

</moldb>
ドキュメントを処理し、適当なオブジェクトを生成するいくつかのコード

例3 parsemoldb.php - moldb.xml を処理し、分子オブジェクトの配列に代入

<?php

class AminoAcid {
var $name; // aa name
var $symbol; // three letter symbol
var $code; // one letter code
var $type; // hydrophobic, charged or neutral

function __construct ($aa)
{
foreach ($aa as $k=>$v)
$this->$k = $aa[$k];
}
}

function readDatabase($filename)
{
// read the XML database of aminoacids
$data = file_get_contents($filename);
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $tags);
xml_parser_free($parser);

// loop through the structures
foreach ($tags as $key=>$val) {
if ($key == "molecule") {
$molranges = $val;
// each contiguous pair of array entries are the
// lower and upper range for each molecule definition
for ($i=0; $i < count($molranges); $i+=2) {
$offset = $molranges[$i] + 1;
$len = $molranges[$i + 1] - $offset;
$tdb[] = parseMol(array_slice($values, $offset, $len));
}
} else {
continue;
}
}
return $tdb;
}

function parseMol($mvalues)
{
for ($i=0; $i < count($mvalues); $i++) {
$mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
}
return new AminoAcid($mol);
}

$db = readDatabase("moldb.xml");
echo "** Database of AminoAcid objects:\n";
print_r($db);

?>
parsemoldb.phpを実行した後、変数 $db は、オブジェクト AminoAcidの配列を有しており、スクリプトの 出力は、次のようになります。
** Database of AminoAcid objects:
Array
(
    [0] => aminoacid Object
        (
            [name] => Alanine
            [symbol] => ala
            [code] => A
            [type] => hydrophobic
        )

    [1] => aminoacid Object
        (
            [name] => Lysine
            [symbol] => lys
            [code] => K
            [type] => charged
        )

)

User Contributed Notes

There are no user contributed notes for this page.


XML パーサを作成する

  • ≪ xml_parse_into_struct
  • xml_parser_create_ns ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサを作成する

xml_parser_create

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parser_create — XML パーサを作成する

説明

xml_parser_create(?string $encoding = null): XMLParser

xml_parser_create() は新しい XML パーサを作成し、 他の XML 関数が使用する XMLParser のインスタンスを返します。

パラメータ

encoding

入力のエンコーディングは 自動判定されるので、encoding パラメータは 出力のエンコーディングのみを指定することになります。 もし空の文字列が渡された場合、先頭の 3 あるいは 4 バイトの内容をもとに パーサがエンコーディングの判別を試みます。 ではデフォルトの出力文字セットは UTF-8 です。 サポートされるエンコーディングは ISO-8859-1、UTF-8 および US-ASCII です。

戻り値

新しい XMLParser のインスタンスを返します。

変更履歴

バージョン | 説明
8.0.0 | この関数は XMLParser のインスタンスを返すようになりました。 これより前のバージョンでは、リソースが返され、失敗した場合は false が返っていました。
8.0.0 | encoding は、nullable になりました。

参考

  • xml_parser_create_ns() - 名前空間をサポートした XML パーサを生成する
  • xml_parser_free() - XML パーサを解放する

User Contributed Notes

bishop at php dot net 17-Feb-2019 04:23
Internals has proposed[1] changing this extension from resource-based to object-based. When this change is made, xml_parser_create will return an object, not a resource. Application developers are encouraged to replace any checks for explicit success, like:

<?php
$res = xml_parser_create(/*...*/);
if (! is_resource($res)) {
    // ...
}
?>

With a check for explicit failure:
<?php
$res = xml_parser_create(/*...*/);
if (false === $res) {
    // ...
}

[1]: https://marc.info/?l=php-internals&m=154998365013373&w=2
marek995 at seznam dot cz 24-Sep-2010 11:46
I created a function, which combines xml_paresr_create and all functions around.

<?php
function html_parse($file)
     {
      $array = str_split($file, 1);
      $count = false;
      $text = "";
      $end = false;
      foreach($array as $temp)
       {
        switch($temp)
         {
          case "<":
           between($text);
           $text = "";
           $count = true;
           $end = false;
           break;
          case ">":
           if($end == true) {end_tag($text);}
           else {start_tag($text);}
           $text = "";
           break;
          case "/":
           if($count == true) {$end = true;}
           else {$text = $text . "/";}
           break;
          default:
           $count = false;
           $text = $text . $temp;
         }
       }
     }
?>
The input value is a string.
It calls functions start_tag() , between() and end_tag() just like the original xml parser.

But it has a few differences:
  - It does NOT check the code. Just resends values to that three functions, no matter, if they are right
  - It works with parameters. For example: from tag <sth b="42"> sends sth b="42"
  - It works wit diacritics. The original parser sometimes wrapped the text before the first diacritics appearance.
  - Works with all encoding. If the input is UTF-8, the output will be UTF-8 too
  - It works with strings. Not with file pointers.
  - No "Reserved XML name" error
  - No doctype needed
  - It does not work with commentaries, notes, programming instructions etc. Just the tags

definition of the handling functions is:

<?php
function between($stuff) {}
?>

No other attributes
juanhdv at NOSPAM dot divvol dot org 05-Dec-2007 12:08
In PHP 5, when including in your xml file the definition '<?xml version="1.0" encoding="ISO-8859-1" ?>',   I'd also recommend adding the option below:

xml_parser_set_option($xml_parser,XML_OPTION_TARGET_ENCODING, "ISO-8859-1").

It works fine!

If your enconding is 'UTF-8', just replace 'ISO-8859-1'.
19-Apr-2006 07:42
I'd also recommend adding the option below
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
Tobbe 25-May-2005 06:01
The above "XML to array" code does not work properly if you have several tags on the same level and with the same name, example:

<currenterrors>
<error>
<description>This is a real error...</description>
</error>
<error>
<description>This is a second error...</description>
</error>
<error>
<description>Lots of errors today...</description>
</error>
<error>
<description>This is the last error...</description>
</error>
</currenterrors>

It will then only display the first <error>-tag.
In this case you will need to number the tags automatically or maybe have several arrays for each new element.
php at stock-consulting dot com 21-Feb-2005 02:47
Even though I passed "UTF-8" as encoding type PHP (Version 4.3.3) did *not* treat the input file as UTF-8. The input file was missing the BOM header bytes (which may indeed be omitted, according to RFC3629...but things are a bit unclear there. The RFC seems to make mere recommendations concering the BOM header). If you want to sure that PHP treats an UTF-8 encoded file correctly, make sure that it begins with the corresponding 3 byte BOM header (0xEF 0xBB 0xBF)
jcalvert at gmx dot net 03-Apr-2004 10:39
To maintain compatibility between PHP4 and PHP5 you should always pass a string argument to this function. PHP4 autodetects the format of the input if you leave it out whereas PHP5 will assume the format to be ISO-8859-1 (and choke on the byte order marker of UTF-8 files).

Calling the function as <?php $res = xml_parser_create('') ?> will cause both versions of PHP to autodetect the format.


名前空間をサポートした XML パーサを生成する

  • ≪ xml_parser_create
  • xml_parser_free ≫
  • PHP Manual
  • XML パーサ 関数
  • 名前空間をサポートした XML パーサを生成する

xml_parser_create_ns

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

xml_parser_create_ns — 名前空間をサポートした XML パーサを生成する

説明

xml_parser_create_ns(?string $encoding = null, string $separator = ":"): XMLParser

xml_parser_create_ns() は XML 名前空間をサポートした 新しい XML パーサを作成し、他の XML 関数が使用する XMLParser インスタンスを返します。

パラメータ

encoding

入力のエンコーディングは 自動判定されるので、encoding パラメータは 出力のエンコーディングのみを指定することになります。 デフォルトの出力文字セットは UTF-8 です。 サポートされるエンコーディングは ISO-8859-1、UTF-8 および US-ASCII です。

separator

名前空間を含めたタグパラメータをハンドラ関数に渡す際には、 名前空間名とタグ名を文字列 separator でつなげたものが使用されます。

戻り値

新しい XMLParser のインスタンスを返します。

変更履歴

バージョン | 説明
8.0.0 | この関数は XMLParser のインスタンスを返すようになりました。 これより前のバージョンでは、リソースが返され、失敗した場合は false が返されていました。
8.0.0 | encoding は、 nullable になりました。

参考

  • xml_parser_create() - XML パーサを作成する
  • xml_parser_free() - XML パーサを解放する

User Contributed Notes

bishop at php dot net 17-Feb-2019 04:24
Internals has proposed[1] changing this extension from resource-based to object-based. When this change is made, xml_parser_create_ns will return an object, not a resource. Application developers are encouraged to replace any checks for explicit success, like:

<?php
$res = xml_parser_create_ns(/*...*/);
if (! is_resource($res)) {
    // ...
}
?>

With a check for explicit failure:
<?php
$res = xml_parser_create_ns(/*...*/);
if (false === $res) {
    // ...
}

[1]: https://marc.info/?l=php-internals&m=154998365013373&w=2
jonnyNO at SPAM dot sanriowasteland dot net 11-Jun-2002 05:49
This is from the Expat Function Reference by Clark Cooper, which is a reference to the C api.

"XML_Parser XML_ParserCreateNS(const XML_Char*encoding, XML_Char sep)
Constructs a new parser that has namespace processing in effect. Namespace expanded element names and attribute names are returned as a concatenation of the namespace URI, sep, and the local part of the name. This means that you should pick a character for sep that can't be part of a legal URI."

(from http://www.xml.com/pub/a/1999/09/expat/reference.html)

So thats what this function is for.  Now you know.


XML パーサを解放する

  • ≪ xml_parser_create_ns
  • xml_parser_get_option ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサを解放する

xml_parser_free

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parser_free — XML パーサを解放する

説明

xml_parser_free(XMLParser $parser): bool

注意:

この関数を実行しても何も起こりません。PHP 8.0.0 より前のバージョンでは、この関数はリソースを閉じるのに使われていました。

指定した XML パーサ parser を解放します。

警告

パースが終了した際、 xml_parser_free() 関数を呼び出すのに加えて、 PHP 8.0.0 より前のバージョンでは オブジェクトがパーサのリソースを参照している場合に、 メモリリークを避けるために parser の参照を 明示的に unset することも必要になっています。

パラメータ

parser
解放したい XML パーサへのリファレンス。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

User Contributed Notes

There are no user contributed notes for this page.


XML パーサからオプションを得る

  • ≪ xml_parser_free
  • xml_parser_set_option ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサからオプションを得る

xml_parser_get_option

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parser_get_option — XML パーサからオプションを得る

説明

xml_parser_get_option(XMLParser $parser, int $option): string|int|bool

XML パーサからオプションの値を取得します。

パラメータ

parser
オプションを取得する XML パーサへのリファレンス。
option
取得するオプション。XML_OPTION_CASE_FOLDING, XML_OPTION_SKIP_TAGSTART, XML_OPTION_SKIP_WHITE あるいは XML_OPTION_TARGET_ENCODING が使用可能です。 詳細は xml_parser_set_option() を参照ください。

戻り値

オプションの値を返します。

エラー / 例外

無効な値を option に渡すと、ValueError がスローされます。

PHP 8.0.0 より前のバージョンでは、 無効な値を option に渡すと E_WARNING が発生し、false を返していました。

変更履歴

バージョン | 説明
8.3.0 | この関数は、boolean のオプションを返すようになりました。
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。
8.0.0 | option が無効な値の場合、 ValueError がスローされるようになりました。
7.1.24, 7.2.12, 7.3.0 | options が 新たに XML_OPTION_SKIP_TAGSTART と XML_OPTION_SKIP_WHITE をサポートしました。

User Contributed Notes

There are no user contributed notes for this page.


XML パーサのオプションを設定する

  • ≪ xml_parser_get_option
  • xml_set_character_data_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • XML パーサのオプションを設定する

xml_parser_set_option

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parser_set_option — XML パーサのオプションを設定する

説明

xml_parser_set_option(XMLParser $parser, int $option, string|int|bool $value): bool

XML パーサのオプションを設定します。

パラメータ

parser

オプションを設定する XML パーサへのリファレンス。

option

設定するオプション。以下を参照ください。

次のオプションが利用可能です。

XML パーサオプション
オプション定数 | データ型 | 説明
XML_OPTION_CASE_FOLDING | bool | XMLパーサの大文字変換 を有効にするかどうかを制御する。デフォルトで有効。
XML_OPTION_SKIP_TAGSTART | integer | タグ名の最初の何文字を読み飛ばすかどうかを設定する。
XML_OPTION_SKIP_WHITE | bool | 空白文字からなる値を読み飛ばすかどうかを設定する。
XML_OPTION_TARGET_ENCODING | string | XML パーサについてどの ターゲット エンコーディング を使用するかを設定する。デフォルトでは、 xml_parser_create() により使用されたソース エンコーディングと同じエンコーディングが設定されます。 サポートされるターゲットエンコーディングは、 ISO-8859-1, US-ASCII, UTF-8 です。

value

そのオプションの新しい設定値。

戻り値

成功した場合に true を返します。 失敗した場合、false を返します。

エラー / 例外

無効な値を option に渡すと、ValueError がスローされます。

PHP 8.0.0 より前のバージョンでは、 無効な値を option に渡すと E_WARNING が発生し、false を返していました。

変更履歴

バージョン | 説明
8.3.0 | value パラメータは、 boolean の値を受け入れるようになりました。 XML_OPTION_CASE_FOLDING と XML_OPTION_SKIP_WHITE が boolean の値を受け入れるようになっています。
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。
8.0.0 | option が無効な値の場合、 ValueError がスローされるようになりました。

User Contributed Notes

www.thomaskoch.it 31-Jul-2008 02:22
The option XML_OPTION_SKIP_WHITE has no effect in my PHP 5.2.6 (with expat-1.95.8-5). To skip cdata composed of white space only, simply check for that at the beginning of your cdata callback function:

<?php
function callback_cdata($parser, $cdata)
{
 if(!trim($cdata))
  return;

 // ... continue processing ...
}
?>
j[no_spam_please] at [thx]jessepearson dot net 08-Mar-2007 08:08
In the function below, you need to update two lines if you don't want php to throw warnings.

change these two:
           $elements[$index]['attributes'] = $tag['attributes'];
           $elements[$index]['content'] = $tag['value'];

to this:
      $elements[$index]['attributes'] = empty($tag['attributes']) ? "" : $tag['attributes'];
      $elements[$index]['content']    = empty($tag['value']) ? "" : $tag['value'];
pupeno at pupeno dot com 16-Nov-2002 01:14
XML is case sensitive, then, from my point of view, disabling case folding doesn't goes against xml 1.0 specifications but the contrary, disabling case folding allow us to distiguish between diferent cases of the same letter ('a' and 'A') which of XML are two diferent things.
From my point of view, disabling case folding is a good practice and I think it should be disabled by default.
More information on:
http://www.isacat.net/2001/xml/case.htm
and
http://www.w3.org/TR/REC-xml
Thank you.


文字データハンドラを設定する

  • ≪ xml_parser_set_option
  • xml_set_default_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • 文字データハンドラを設定する

xml_set_character_data_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_character_data_handler — 文字データハンドラを設定する

説明

xml_set_character_data_handler(XMLParser $parser, callable $handler): true

XML パーサ parser の文字データ用ハンドラ関数を設定します。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

handler のシグネチャは、以下でなければいけません:

handler(XMLParser $parser, string $data): void
parser
ハンドラをコールするXMLパーサ
data
文字データを文字列として指定します。

文字データハンドラは、XML ドキュメントのすべてのテキストに対してコールされます。 (たとえば非 ASCII 文字列などで) ひとつのフラグメント内で複数回コールされることもあります。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

User Contributed Notes

jhill at live dot com 28-Aug-2008 07:11
To detect that concatenation of data is taking place, you can keep track of whether the last function call was to the data processing function.
e.g. using $this->inside_data variable below:

<?php
xml_set_element_handler($this->parser, "start_tag", "end_tag");
xml_set_character_data_handler($this->parser, "contents");

protected function contents($parser, $data)
{
    switch ($this->current_tag) {
            case "name":
                if ($this->inside_data)
                    $this->name .= $data; // need to concatenate data
                else
                    $this->name = $data;
                break;
         ...
    }
    $this->inside_data = true;
}

protected function start_tag($parser, $name)
{
    $this->current_tag = $name;
    $this->inside_data = false;
}

protected function end_tag() {
    $this->current_tag = '';
    $this->inside_data = false;
}
?>
unspammable-iain at iaindooley dot com 03-Jan-2006 01:41
re: jason at omegavortex dot com below, another way to deal with whitespace issues is:

        function charData($parser,$data)
        {
            $char_data = trim($data);

            if($char_data)
                $char_data = preg_replace('/  */',' ',$data);

            $this->cdata .= $char_data;
        }

This means that:

    <p>here is my text <a href="something">my text</a>
    and here is some more after some spaces at the
    beginning of the line</p>

comes out properly. You could do further replacements if you want to deal with tabs in your files. i only ever use spaces. if you only use trim() then you would lose the space before the <a> tag above, but trim() is a good way to check for completely empty char data, then just replace more than one space with a single space. this will preserve a single space at the beginning and end of the cdata.
ben at removethis emediastudios dotcom 05-Aug-2005 03:53
I too love the undocumented "splitting" functionality :-p.

Rather than concatinating the data based on whether or not the current tag name has changed from the previous tag name I suggest always concatinating like the following with the $catData variable being unset in the endElement function:

<?php

function endElement ($parser, $data) {
  global $catData;

  // Because we are at an element end we know any splitting is finished
  unset($GLOBALS['catData']);
}

function characterData ($parser, $data) {
  global $catData;

  // Concatinate data in case splitting is taking place
  $catData.=$data;

}

?>

This got me around a problem with data like the following where, because characterData is not called for empty tags, the previous and current tag names were the same even though splitting was not taking place.

<companydept>
<companydeptID></companydeptID>
<companyID>1</companyID>
<companydeptName></companydeptName>
</companydept>
<companydept>
<companydeptID></companydeptID>
<companyID>2</companyID>
<companydeptName></companydeptName>
</companydept>
<companydept>
<companydeptID></companydeptID>
<companyID>3</companyID>
<companydeptName></companydeptName>
</companydept>
yaroukh at email dot cz 25-Apr-2005 08:51
It would be nice if someone could complete documentation of this function. I think that the "splitting" behaviour should (at least) be mentioned within the documentation, if not explained (please!). I'm not quite sure whether the cut comes after each 1024bytes/chars of data.

My experience looks as follows:
[xmlFile]
...
    <label>slo|?ka</label>
    <comment>koment|?&#345; slo?ky</comment>
...
[/xmlFile]
(Places where the character-data got splitted are marked with pipes. Plus there was latin small letter 'r' with caron instead of &#345;.)

Since the splitting is not mentioned in documentation one could assume that it is a bug; especially when you work with UTF-8 and the cuts come right before some special characters.
(Should the concatenating of $cData be considered to be the proper & 'final' way of processing character-data?)

Also I'd suggest to add another line in "Description" when fc has an alternate usage (instead of hiding it within the "Note" :o); in this particular case I'd prefer this:

Description:
bool xml_set_character_data_handler ( resource parser, callback handler )
bool xml_set_character_data_handler ( resource parser, object reference, method name )

... there are dozens of functions ofcourse where documentation works this way (I mean not mentioning the alternate usage in the "Description" part).

Have a nice day
  Yaroukh
flobee 12-Feb-2005 09:53
re. to Philippe Marc , and  karuna_gadde examples

i found out that the xml_set_character_data_handler call back  function can be called more often for the same element in particular the content is just a few chars long (happen on windows)

so a check up can give you the answer an may be for long strings too.
eg:
<?php
xml_set_character_data_handler($this->parser, "cdata");
//...
function cdata($parser, $cdata) {
// ...
if(isset($this->data[$this->currentItem][$this->currentField])) {
    $this->data[$this->currentItem][$this->currentField] .= $cdata;
} else {
    $this->data[$this->currentItem][$this->currentField] = $cdata;
}
?>
Philippe Marc 28-Oct-2004 07:21
How to overide the 1024 characters limitation of xml_set_character_data_handler.
Took me some time to find out how to deal with that!

When calling a basic XML parser:
$parseurXML = xml_parser_create();
xml_set_element_handler($parseurXML, "opentagfunction", "closetagfunction");
xml_set_character_data_handler($parseurXML, "textfunction");

The textfunction only receive 1024 characters at once, even if the text is 4000 characters long. In facts, the parser seems to split the data in pieces of 1024 characters. The way to handle that is to concatenate them.

example:
If you have an XML tag called UNIPROT_ABSTRACT containing a 4000 characters protein description:
function textfunction($parser, $text)
    {
     if ($last_tag_read=='UNIPROT_ABSTRACT') $uniprot.=$text;
    }
The function is called 4 times and receives 1024+1024+1024+928 characters that will be concatenated in the $uniprot variable using the ".=" concatenation fonction.

Easy to do, but not documented!
Brad dot Harrison at griffith dot edu dot au 11-Jul-2004 10:23
If you need to trim the white space for HTML code and don't rely on spaces for formatting text (if you are then it is time to use Style Sheets) then this code will come in very useful.

 $data=eregi_replace(">"."[[:space:]]+"."<","><",$data);
 $data=eregi_replace(">"."[[:space:]]+",">",$data);
 $data=eregi_replace("[[:space:]]+"."<","<",$data);
dan30odd08 at hotmail dot com 01-Dec-2003 04:38
I just want to mention that i ran into a problem when parsing an xml file using the character data handler. If you happen to have a string which is also an internal php function stored in your xml data file and you want to output it as a string the parser dosent seem to recognize it.
   I found a way around this problem. In my case i was storing a string with the value read. This would not allow me to output the data so to work around this problem i added a backslash for every character in the data element.

   e.g.      <xml>
    from    <element>read</element>
    to       <element>////read</element>

i dont know if anyone has ran into this problem or not but i thought i would just put it here just so in case someone is getting stuck with this.
ken at positive-edge dot com 29-Jan-2002 08:20
the function handler is called several times when it parses the character data.  It doesn't return the entire string as it suggests.  There are special exceptions that will always force the parser to stop scanning and call the character data handler.  This is when:

- The parser runs into an Entity Declaration, such as &amp; (&) or &apos; (?)
- The parser finishes parsing an entity
- The parser runs into the new-line character (\n)
- The parser runs into a series of tab characters (\t)

And perhaps others.

For instance, if we have this xml content:

<mytag name=?Ken Egervari? title=?Chief Technology Officer?>
    Ken has been Positive Edge&apos;s Chief Technology Officer for 2 years.
</mytag>

The parser will call the character data handler 6 times.  This is what will happen:

1    \n
2    \t
3    Ken has been Positive Edge
4    ?
5    s Chief Technology Officer for 2 years.
6    \n

I hope that helps people out.


デフォルトのハンドラを設定する

  • ≪ xml_set_character_data_handler
  • xml_set_element_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • デフォルトのハンドラを設定する

xml_set_default_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_default_handler — デフォルトのハンドラを設定する

説明

xml_set_default_handler(XMLParser $parser, callable $handler): true

XMLパーサ parser のデフォルトのハンドラ関数を設定します。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

handler のシグネチャは、以下でなければいけません:

handler(XMLParser $parser, string $data): void
parser
ハンドラをコールするXMLパーサ
data
data には、文字データを文字列として指定します。 これは、XML 宣言またはドキュメント型宣言、エンティティ、 他にハンドラがない別のデータとすることが可能です。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

User Contributed Notes

jp dot amarok at email dot cz 22-Apr-2024 04:00
For anyone who was also wondering what kind of events this function actually handles:

it's used in cases when an XML comment is found or an additional declaration like an xml-stylesheet. In such cases the data argument contains the whole string as it is, for example:

<!-- this is a comment -->
<?xml-stylesheet title="mystyle" type="text/xsl" href="style.xsl" ?>
anoril at anoril dot com 13-Jul-2006 07:54
I have the same issue using two installation of PHP5: on accepts to use the default handler while the other only uses the character_data one.

Maybe a configuration problem...

;) Nonor.
phillip 26-Apr-2005 02:13
it seems to me that in PHP5 the function defined as default-handler (using xml_set_default_handler()) doesen't get passed the cdata anymore:

i.e.:
xml_set_element_handler($this->parser, 'parseSTART', 'parseEND');
xml_set_default_handler($this->parser, 'parseDEFAULT');
function parseSTART() { ... }
function parseEND() { ... }
function parseDEFAULT() { ... }

under PHP5, parseDEFAULT will NOT get passed any cdata, but unter PHP4 it will. at least that's my take on the strange stuff (not) happening after migrating to PHP5.

my solution was to add a xml_set_character_data_handler($parser, 'parseDEFAULT'). it worked for me.


開始要素および終了要素のハンドラを設定する

  • ≪ xml_set_default_handler
  • xml_set_end_namespace_decl_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • 開始要素および終了要素のハンドラを設定する

xml_set_element_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_element_handler — 開始要素および終了要素のハンドラを設定する

説明

xml_set_element_handler(XMLParser $parser, callable $start_handler, callable $end_handler): true

XML パーサ parser の要素ハンドラ関数を設定します。

start_handler は、新しいXML要素が開始された場合にコールされます。end_handler は、XML要素が終了した場合にコールされます。

パラメータ

parser

XMLパーサ

start_handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

シグネチャは、以下でなければいけません:

start_element_handler(XMLParser $parser, string $name, array $attributes): void
parser
ハンドラをコールするXMLパーサ
name
このハンドラがコールされた要素の名前です。 大文字変換 がこのパーサに関して有効な場合、要素の名前は大文字になります。
attributes
要素の属性に関する連想配列です。 要素に属性がない場合、配列は空になります。 この配列のキーは属性の名前であり、 値は属性の値です。属性の名前は、要素名と同様に 大文字変換 となります。 属性の値は、大文字変換 されません。 attributes を順次アクセスすることにより、 属性を宣言した元の順序で取得することができます。

end_handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

ハンドラのシグネチャは、以下でなければいけません:

end_element_handler(XMLParser $parser, string $name): void
parser
ハンドラをコールするXMLパーサ
name
このハンドラがコールされた要素の名前です。 このパーサにおいて 大文字変換 が有効な場合、要素名は大文字になります。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

User Contributed Notes

kok at nachon dot nl 26-Sep-2008 06:44
Here is another example of detecting empty elements. I works with libxml2. Note that it handles buffer boundaries.

<?php

$depth = 0; //current depth, used for pretty printing
$empty = false; //whether the tag is empty
$offset = 0; //the index of the start of the current buffer within the stream

function tagStart($parser, $name, array $attribs) {
    global $depth, $empty, $data, $offset, $lastchar;
    $idx = xml_get_current_byte_index($parser);
    /* xml_get_current_byte_index returns index within the streams and not
       within the buffer.*/

    /* Check if the index is within the buffer. */
    if (isset($data[$idx - $offset])) {
        $c = $data[$idx - $offset];
    } else {
        /* If it isn't simple use the last character of the buffer. */
        $c = $lastchar;
    }
    $empty = $c == '/';
    echo str_repeat("\t", $depth), "<$name", ($empty ? '/>' : '>'), "\n";
    if (!$empty) ++$depth;
}

function tagEnd($parser, $name) {
    global $depth, $empty;
    if (!$empty) {
        --$depth;
        echo str_repeat("\t", $depth), "</$name>\n";
    } else {
        $empty = false;
    }
}

$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($parser, 'tagStart', 'tagEnd');

$data1 = '
<test>
    <empty att="3" />
    <nocontent></nocontent>
    <content>
        <empty/>
        <empty/>
    </content>
    <empty/';

$data2 = '>
    <empty att="5" />
</test>
';

$data = &$data1;
$length = strlen($data1);
$lastchar = $data[$length-1];
xml_parse($parser, $data1);
$offset .= $length;
$data = &$data2;
xml_parse($parser, $data2);
darien at etelos dot com 12-Feb-2007 10:48
This documentation is somewhat awry. I know it's been said many times before, but it bears repeating...

If using PHP4, you may be required to use xml_set_object() instead of calling any of the xml_set_*_handler() functions with a two-item array. It will work fine on PHP5, but move the same code to PHP4 and it will create one copie of $this (even if you use &$this) for each handler you set!

<?php
// This code will fail mysteriously on PHP4.
$this->parser = xml_parser_create();
xml_set_element_handler(
            $this->parser,
            array(&$this,"start_tag"),
            array(&$this,"end_tag")
        );
        xml_set_character_data_handler(
            $this->parser,
            array(&$this,"tag_data")
        );
?>

<?php
// This code will work on PHP4.
$this->parser = xml_parser_create();
xml_set_object($this->parser,&$this);
xml_set_element_handler(
            $this->parser,
            "start_tag",
            "end_tag"
        );
        xml_set_character_data_handler(
            $this->parser,
            "tag_data"
        );
?>
lloeki at gmail dot com 31-Oct-2006 03:07
I modified the previous script, so that it is associative. I find it more useful that way. BTW I prefer strtolower() things, but that's not mandatory at all.

<?php

$file = "data.xml";
$depth = 0;
$tree = array();
$tree['name'] = "root";
$stack[] = &$tree;

function startElement($parser, $name, $attrs) {
   global $depth;
   global $stack;
   global $tree;

   $element = array();
   foreach ($attrs as $key => $value) {
       $element[strtolower($key)]=$value;
   }

   end($stack);
   $stack[key($stack)][strtolower($name)] = &$element;
   $stack[strtolower($name)] = &$element;

   $depth++;
}

function endElement($parser, $name) {
   global $depth;
   global $stack;

   array_pop($stack);
   $depth--;
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
   die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
   if (!xml_parse($xml_parser, $data, feof($fp))) {
       die(sprintf("XML error: %s at line %d",
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
}
xml_parser_free($xml_parser);
$tree = end(end($stack));
echo "<pre>";
print_r($tree);
echo "</pre>";

?>
rubentrancoso at gmail dot com 29-Aug-2006 01:44
My 25 cents. This example show how to parse a XML in a associative array tree.

<?php

$file = "flow/flow.xml";
$depth = 0;
$tree = array();
$tree['name'] = "root";
$stack[count($stack)] = &$tree;

function startElement($parser, $name, $attrs) {
   global $depth;
   global $stack;
   global $tree;

   $element = array();
   $element['name'] = $name;
   foreach ($attrs as $key => $value) {
        //echo $key."=".$value;
        $element[$key]=$value;
    }

   $last = &$stack[count($stack)-1];
   $last[count($last)-1] = &$element;
   $stack[count($stack)] = &$element;

   $depth++;
}

function endElement($parser, $name) {
   global $depth;
   global $stack;

   array_pop($stack);
   $depth--;
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
   die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
   if (!xml_parse($xml_parser, $data, feof($fp))) {
       die(sprintf("XML error: %s at line %d",
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
}
xml_parser_free($xml_parser);
$tree = $stack[0][0];
echo "<pre>";
print_r($tree);
echo "</pre>";
redb 15-May-2006 05:48
Example below (BadParser) works fine with some changes.

xml_set_element_handler ( $parser, array ( &$this, 'tagStart' ), array ( &$this, 'tagEnd' ) );
xml_set_character_data_handler ( $parser, array ( &$this, 'tagContent' ) );
vladimir-leontiev at uiowa dot edu 13-Dec-2005 09:44
It seems that characterData() gets characters in chuncks of 1024; therefore if you have string of characters between you tags that is longer than 1024 then characterData() will be called more that once for single pair of tags. I don't know if this feature(bug?) is documented anywhere, I just wanted to warn everyone about this; it had tripped me. I use php 4.3.10 on Linux.
hendra_g at hotmail dot com 19-Nov-2005 08:10
I ran into the same problem with 'ibjoel at hotmail dot com' in regards to self-closing tags, and found that the script that he/she wrote did not work as I expected.
I played around with some of php's functions and examples and compiled something, which may not be the neatest solution, but it works for the data that 'ibjoel at hotmail dot com' provided.
The data needs to be read from a file though, so the fp can be utilised. It still uses the xml_get_current_byte_index(resource parser) trick, but this time, I check for the last 2 character before the index and test if it's "/>".

<?php
/* myxmltest.xml:
<normal_tag>
  <self_close_tag />
     data
  <normal_tag>data
     <self_close_tag attr="value" />
  </normal_tag>
     data
  <normal_tag></normal_tag>
</normal_tag>
*/

//## Global Variables ##//
$file = "myxmltest.xml";
$character_data_on = false;
$tag_complete = true;

function startElement($parser, $name, $attrs)
{
    global $character_data_on;
    global $tag_complete;

    echo "&lt;<font color=\"#0000cc\">$name</font>";
    //## Print the attributes ##//
    if (sizeof($attrs)) {
        while (list($k, $v) = each($attrs)) {
            echo " <font color=\"#009900\">$k</font>=\"<font
                   color=\"#990000\">$v</font>\"";
        }
    }
    //## Tag is still still incomplete,
    //## will be completed at either endElement or characterData ##//
    $tag_complete = false;
    $character_data_on = false;
}

function endElement($parser, $name)
{
    global $fp;
    global $character_data_on;
    global $tag_complete;

    //#### Test for self-closing tag ####//
    //## xml_get_current_byte_index(resource parser) when run in this
    //## function, gives the index at (indicated by *):
    //##   for self closing tag: <br />*
    //##   for individual closing tag: <div>character data*</div>
    //## So to test for self-closing tag, we can just test for the last 2
    //## characters from the index
    //###################################//

    if (!$character_data_on) {
        //## Record current fp position ##//
        $temp_fp = ftell($fp);

        //## Point fp to 2 bytes before the end element byte index ##//
        $end_element_byte_index = xml_get_current_byte_index($parser);
        fseek($fp,$end_element_byte_index-2);

        //## Gets the last 2 characters before the end element byte index ##//
        $validator = fgets($fp, 3);

        //## Restore fp position ##//
        fseek($fp,$temp_fp);

        //## If the last 2 character is "/>" ##//
        if ($validator=="/>") {
            //// Complete the self-closing tag ////
            echo " /&gt";
            //// Otherwise it is an individual closing tag ////
        } else echo "&gt&lt/<font color=\"#0000cc\">$name</font>&gt";
        $tag_complete = true;
    } else echo "&lt/<font color=\"#0000cc\">$name</font>&gt";

    $character_data_on = false;
}

function characterData($parser, $data)
{
    global $character_data_on;
    global $tag_complete;

    if ((!$character_data_on)&&(!$tag_complete)) {
        echo "&gt";
        $tag_complete = true;
    }
    echo "<b>$data</b>";
    $character_data_on = true;
}

$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
}

echo "<pre>";
while ($file_content = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $file_content, feof($fp))) {
        die(sprintf("XML error: %s at line %d",
                    xml_error_string(xml_get_error_code($xml_parser)),
                    xml_get_current_line_number($xml_parser)));
    }
}
echo "</pre>";
xml_parser_free($xml_parser);
?>
turan dot yuksel at tcmb dot gov dot tr 20-Sep-2005 03:41
The method that 'ibjoel at hotmail dot com' have described requires libxml2 as the xml parser, it does not work with expat. For a brief explanation, see xml_get_current_byte_index.
ibjoel at hotmail dot com 01-Aug-2005 03:49
I noticed that in the example below, and all the examples I've seen on this site for viewing xml in html, the look of self closing tags such as <br /> are not preserved. The parser cannot distinguish between <tag /> and <tag></tag>, and if your start and end element functions are like these examples, both instances will be output with both an indvidual start and end tag.  I needed to preserve self-closing tags and it took me a while to figure out this work around. Hope this helps someone...

The start tag is left open, and then completed by it's first child, the next start tag or its end tag.  The end tag will complete with " />", or </tag> depending on the number of bytes between the start and end tags in the parsed data.
<?php
//$data=filepath or string
$data=<<<DATA
<normal_tag>
  <self_close_tag />
      data
  <normal_tag>data
     <self_close_tag attr="value" />
  </normal_tag>
      data
  <normal_tag></normal_tag>
</normal_tag>
DATA;

function startElement($parser, $name, $attrs)
{
        xml_set_character_data_handler($parser, "characterData");
        global $first_child, $start_byte;
        if($first_child)          //close start tag if neccessary
                echo "><br />";
        $first_child=true;
        $start_byte=xml_get_current_byte_index ($parser);
        if(count($attrs)>=1){
                foreach($attrs as $x=>$y){
                        $attr_string .= " $x=\"$y\"";
                }
        }
        echo htmlentities("<{$name}{$attr_string}"); //unclosed starttag
}

function endElement($parser, $name)
{
        global $first_child, $start_byte;
        $byte=xml_get_current_byte_index ($parser);
        if($byte-$start_byte>2){           //if end tag is more than 2 bytes from start tag
                if($first_child)          //close start tag if neccessary
                        echo "><br />";
                echo htmlentities("</{$name}>")."<br />";  //individual end tag
        }else
                echo " /><br />";  // self closing tag
        $first_child=false;

}

function characterData($parser, $data)
{
        global $first_child;
        if($first_child)  //if $data is first child, close start tag
                echo "><br />";
        if($data=trim($data))
                echo "<font color='blue'>$data</font><br />";
        $first_child=false;
}

function ParseData($data)
{
        $xml_parser = xml_parser_create();
        xml_set_element_handler($xml_parser, "startElement", "endElement");
        xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
        if(is_file($data))
        {
                if (!($fp = fopen($file, "r"))) {
                        die("could not open XML input");
                }

                while ($data = fread($fp, 4096)) {
                        if (!xml_parse($xml_parser, $data, feof($fp))) {
                                $error=xml_error_string(xml_get_error_code($xml_parser));
                               $line=xml_get_current_line_number($xml_parser);
                                die(sprintf("XML error: %s at line %d",$error,$line));
                        }
                }
        }else{
                if (!xml_parse($xml_parser, $data, 1)) {
                                $error=xml_error_string(xml_get_error_code($xml_parser));
                                $line=xml_get_current_line_number($xml_parser);
                                die(sprintf("XML error: %s at line %d",$error,$line));
                }
        }

        xml_parser_free($xml_parser);
}

ParseData($data);
?>
youniforever at naver dot com 30-Apr-2005 03:41
<html>
  <head>
    <title>SAX Demonstration</title>
   <META HTTP-EQUIV='Content-type' CONTENT='text/html; charset=euc-kr'>
  </head>
  <body>
    <h1>RSS ??????</h1>

      <?php

     $file = "data.xml";

      $currentTag = "";
      $currentAttribs = "";

      function startElement($parser, $name, $attribs)
      {
          global $currentTag, $currentAttribs;
          $currentTag = $name;

          $currentAttribs = $attribs;
          switch ($name) {

          default:
              echo("<b>&lt$name&gt</b><br>");
              break;
          }
      }

      function endElement($parser, $name)
      {
          global $currentTag;
          switch ($name) {
          default:
              echo("<br><b>&lt/$name&gt</b><br><br>");
              break;
          }
          $currentTag = "";
          $currentAttribs = "";
      }

      function characterData($parser, $data)
      {
          global $currentTag;
          switch ($currentTag) {
          case "link":
              echo("<a href=\"$data\">$data</a>\n");
              break;
          case "title":
              echo("title : $data");
              break;
          default:
              echo($data);
              break;
          }
      }

     $xmlParser = xml_parser_create();

      $caseFold = xml_parser_get_option($xmlParser,
                                        XML_OPTION_CASE_FOLDING);

      $targetEncoding = xml_parser_get_option($xmlParser,
                                              XML_OPTION_TARGET_ENCODING);

      if ($caseFold == 1) {
          xml_parser_set_option($xmlParser, XML_OPTION_CASE_FOLDING, false);
      }

      xml_set_element_handler($xmlParser, "startElement", "endElement");
      xml_set_character_data_handler($xmlParser, "characterData");

      if (!($fp = fopen($file, "r"))) {
          die("Cannot open XML data file: $file");
      }

     while ($data = fread($fp, 4096)) {
          if (!xml_parse($xmlParser, $data, feof($fp))) {
              die(sprintf("XML error: %s at line %d",
                          xml_error_string(xml_get_error_code($xmlParser)),
                          xml_get_current_line_number($xmlParser)));
              xml_parser_free($xmlParser);
          }
      }
      xml_parser_free($xmlParser);
      ?>
    </table>
  </body>
</html>
13-Mar-2005 01:34
In response to aw at avatartechnology dot com...
In response to landb at mail dot net...

When your functions are in an object:
Careful ! Don't forget to add: & (reference) to your parameters.

xml_set_element_handler($parser, array(&$this,"_startElement"), array(&$this,"_endElement"));
--> xmlparse will work on your object (good).

instead of:
xml_set_element_handler($parser, array($this,"_startElement"), array($this,"_endElement"));
---> xmlparse will work on a COPY of your object (often bad)

Vin-s
(sorry for my english)
aw at avatartechnology dot com 21-Oct-2004 08:40
In response to landb at mail dot net...

As the notes mention, you can pass an array that contains the reference to an object and a method name when you need... so you can call methods in your own class as handlers like this:

xml_set_element_handler($parser, array($this,"_startElement"), array($this,"_endElement"));

Hope it helps...
tj at tobyjoe dot com 31-Jan-2003 11:22
It seems that the tag handlers don't block on one another (the end handler is called whether or not the begin handler has finished). this can put you in a tight spot if you don't realize it while planning your app.
11-Oct-2001 04:09
You CAN use classes to parse XML. Just take a look at the following function:

xml_set_object
jg at jmkg dot net 07-May-2001 11:08
If you are using a class for xml parsing, and want to check the return value of xml_set_element_handler in case it  fails, you must do this outside of the class's constructor. Inside the constructor, PHP-4.0.5 will die.

Basically, put all your xml initialisation code in another function of the class, and keep it out of the constructor.


名前空間終了ハンドラを設定する

  • ≪ xml_set_element_handler
  • xml_set_external_entity_ref_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • 名前空間終了ハンドラを設定する

xml_set_end_namespace_decl_handler

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

xml_set_end_namespace_decl_handler — 名前空間終了ハンドラを設定する

説明

xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler): true

名前空間宣言のスコープを抜けるときにコールされるハンドラを設定します。 これがコールされるのは、各名前空間宣言において、 名前空間が宣言された要素の終了タグのハンドラがコールされた後のことです。

警告

このイベントは libXML ではサポートされていません。 そのため、登録されたハンドラは呼ばれません。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

handler のシグネチャは、以下でなければいけません:

handler(XMLParser $parser, string|false $prefix)
parser
ハンドラをコールするXMLパーサ
prefix
XML オブジェクト内の名前空間を参照する際に使う文字列。 prefix が存在しない場合は、false になります。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

参考

  • xml_set_start_namespace_decl_handler() - 名前空間開始ハンドラを設定する

User Contributed Notes

There are no user contributed notes for this page.


外部エンティティリファレンスハンドラを設定する

  • ≪ xml_set_end_namespace_decl_handler
  • xml_set_notation_decl_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • 外部エンティティリファレンスハンドラを設定する

xml_set_external_entity_ref_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_external_entity_ref_handler — 外部エンティティリファレンスハンドラを設定する

説明

xml_set_external_entity_ref_handler(XMLParser $parser, callable $handler): true

XML パーサ parser の外部エンティティ参照用ハンドラ関数を設定します。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

handler のシグネチャは、以下でなければいけません:

handler(
XMLParser $parser,
string $open_entity_names,
string|false $base,
string $system_id,
string|false $public_id
): bool
parser
ハンドラをコールするXMLパーサ
open_entity_names
エンティティの処理を行うためにオープンされたエンティティの 名前のスペース区切りのリストです (参照されるエンティティの名前を含みます)。
base
これは外部エンティティのシステム ID (systemid) のベースとして解決されます。
system_id
エンティティ宣言で指定されたシステム ID です。
public_id
エンティティ宣言で 指定されたパブリック ID または指定されない場合は空の 文字列です。パブリック ID の中の空白文字は、XML 仕様で規定された 正規化を行っています。

ハンドラは、エンティティを処理された場合、true を返す必要があります。 そうでない場合、false を返すべきです。 ハンドラから返された値が false の場合、XML パーサは処理を中断し、 xml_get_error_code() は XML_ERROR_EXTERNAL_ENTITY_HANDLING を返します。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。
7.3.0 | 拡張モジュールが libxml を使ってビルドされた場合には、コールバック handler の戻り値が無視されることはなくなりました。 このバージョン以前はコールバックの戻り値が無視され、パースが止まりませんでした。

変更履歴

バージョン | 説明
7.3.0 | 拡張モジュールが libxml を使ってビルドされていた場合、 handler の戻り値は無視されることはなくなりました。 これより前のバージョンでは、戻り値が無視されていた上、パースが止まりませんでした。

User Contributed Notes

There are no user contributed notes for this page.


表記法宣言ハンドラを設定する

  • ≪ xml_set_external_entity_ref_handler
  • xml_set_object ≫
  • PHP Manual
  • XML パーサ 関数
  • 表記法宣言ハンドラを設定する

xml_set_notation_decl_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_notation_decl_handler — 表記法宣言ハンドラを設定する

説明

xml_set_notation_decl_handler(XMLParser $parser, callable $handler): true

XML パーサ parser の表記法宣言用ハンドラ関数を設定します。

表記法の宣言は、ドキュメントの DTD の一部であり、 次のようなフォーマットとなります。

<!NOTATION <parameter>name</parameter>
{ <parameter>systemId</parameter> | <parameter>publicId</parameter>?>
表記法宣言の定義に関しては、 » XML 1.0 仕様の 4.7 節 を参照ください。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

ハンドラのシグネチャは、以下でなければいけません:

handler(
XMLParser $parser,
string $notation_name,
string|false $base,
string $system_id,
string|false $public_id
): void
parser
ハンドラをコールするXMLパーサ
notation_name
これは、前述の表記用フォーマットに示すように表記法の名前です。
base
外部エンティティのシステムID(system_id)を 取得する際の基本となります。
system_id
外部表記用宣言のシステム ID
public_id
外部表記用宣言のパブリック ID

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

User Contributed Notes

There are no user contributed notes for this page.


オブジェクト内部で XML パーサを使用する

  • ≪ xml_set_notation_decl_handler
  • xml_set_processing_instruction_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • オブジェクト内部で XML パーサを使用する

xml_set_object

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_object — オブジェクト内部で XML パーサを使用する

説明

xml_set_object(XMLParser $parser, object $object): true

この関数は、object の内部から parser を使用可能にします。 xml_set_element_handler() 等により設定される 全てのコールバック関数は、object のメソッドであると仮定されます。

パラメータ

parser

オブジェクト内部で使う XML パーサへの参照。

object

XML パーサを使うオブジェクト。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

例

例1 xml_set_object() の例

<?php
class CustomXMLParser
{
private $parser;

function __construct()
{
$this->parser = xml_parser_create();

xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "tag_open", "tag_close");
xml_set_character_data_handler($this->parser, "cdata");
}

function parse($data)
{
xml_parse($this->parser, $data);
}

function tag_open($parser, $tag, $attributes)
{
var_dump($tag, $attributes);
}

function cdata($parser, $cdata)
{
var_dump($cdata);
}

function tag_close($parser, $tag)
{
var_dump($tag);
}
}

$xml_parser = new CustomXMLParser();
$xml_parser->parse("<A ID='hallo'>PHP</A>");
?>

上の例の出力は以下となります。

string(1) "A"
array(1) {
  ["ID"]=>
  string(5) "hallo"
}
string(3) "PHP"
string(1) "A"

User Contributed Notes

joey at gimo dot co dot uk 10-Aug-2016 10:32
This function seems to be of very limited use when [$object_instance, "method_name"] is a callable.
wake dot shinigami at gmail dot com 23-Nov-2005 08:28
I finally managed to get xml_set_object() to work, after much documentation searching.  As the solution I found has been hinted at, the focus has been wrong.

There have been many problems getting class contained XML parsers to make changes to the members of an instance.  This is because, from what I'm guessing, the functions are using a either a new annonymous instance of the class or an uninstanced version of the class.

What we want to make sure it does it that the parser is accessing its handlers as member methods of a particular instance of a class.  This can be done using the array method for passing a callback, setting the object as a reference to this instance.  This way, you know that the parser is going to call the function properly.

Ex:
<?php
class Parser {

 private $parser;
 private $data;

 public function __construct() {
  $this->parser = NULL;
  $this->data = '';
 }

 private function ParseElementStart($parser, $name, $attrs) {
  // Code
 }
 private function ParseElementEnd($parser, $name) {
  // Code
 }

 public function Parse($XMLdata) {
  $this->parser = xml_parser_create();
  xml_set_object($this->parser, $this);
  xml_set_element_handler($this->parser,
                          array(&$this, 'ParseElementStart'),
                          array(&$this, 'ParseElementEnd'));
  xml_parse($this->parser, $XMLdata);
  xml_parser_free($this->parser);
 }
}
?>

With this, when you call the Parse method, the data in that instance can be modified.  I'm not sure if xml_set_object becomes unneccissary when using the array callbacks, but I leave it in just to make sure that the xml_parse function knows it's in the object.

As above, I'd recommend for memory sake, that the XML parser be created, used, and freed all in the same function, to ensure that everything is cleaned up correctly.
bettmenn at gmx dot de 16-Oct-2004 02:03
Adding to 'lmfe at mega dot ist dot utl dot pt' contribution below, I have to say that this behaviour is very usual for PHP if MemberVars of an Object arent initialized from the constructor.
What worked best for me so far was something like this:
<?php
class foo {
  var $bar
  // the constructor
  function foo() {
    unset($this->bar);  // with every instanciation, the variable is cleared for the object
  }
}
?>
lmfe at mega dot ist dot utl dot pt 29-Sep-2004 10:51
Using PHP 4.3.0, I got this strange behaviour:

<?php
class xml  {

     /* (as specified in the documentation above) */

} // end of class xml

/* This code works */
$xml_parser = new xml();
$xml_parser->parse("<A ID='hallo'>PHP</A>");

/* This code works */
$xml_parser2 = new xml();
$xml_parser2->parse("<A ID='hallo2'>PHP2</A>");

/* This code DON'T work */
$xml_parser = new xml();
$xml_parser->parse("<A ID='hallo3'>PHP3</A>");
?>

In the third block of code, php complains it can't find the handlers it needs.
It seems this problem only happens if the variable is used more than once.
Calling xml_parser_free doesn't help
hwheinzen at t-online dot de 14-Aug-2004 03:38
(Adding to zitan's note)
It seems easy enough to provide output functions for callback handler classes too.

Example:

<?php
class CallBack {
    var $name = 'Callback';
    var $info = 'Information!';
    function toString() {
        return $this->name.': '.$this->info;
    }
}
class Main {
    var $name = 'Main';
    var $callBackObject;
    function setCallBack(&$cBIn) { $this->callBackObject = $cBIn; }
    function toString() {
        return $this->name.': '.$this->callBackObject->toString();
    }
}

$cb = & new CallBack;
$m = & new Main;
$m->setCallBack(&$cb);
echo $cb->toString();
echo $m->toString();
?>

So, after collecting information during the parse operation within the callback handler class, e.g. in tag_close(), retrieving them is possible.
zitan at mediasculpt dot net 01-Sep-2003 09:05
Just a note about creating abstract "call back handlers" as mentioned in some of the other notes.  In this case I recommend extending the base XML class and overwritting the handler methods.  The reason I wanted to do this, is that if you have a separate callback method class it causes problems, for example if you want to collect information out of the XML file and store it in an array.  You can get around it with global variables, but I prefer to use them only when required ;)

Example:

<?php
class xml_output extends xml{

  var $output = array();

   function xml_output(){
    $this->xml();
   }

    //overwrite base methods
    function tag_open($parser, $tag, $attributes)
    {
        array_push($this->output, "<$tag, attributes>");
    }

    function cdata($parser, $cdata)
    {
         array_push($this->output, "$cdata");
    }

    function tag_close($parser, $tag)
    {
         array_push($this->output, "</$tag>");
    }

}

$xml_parser = & new xml_output();
$xml_parser->parse("<A ID='hallo'>PHP</A>");
echo("$xml_parser->output");
?>
sbeam at syxyz dot net 12-Nov-2002 09:34
passing the object as a call-time ref (&$this) as in the example will create a warning in php 4.1+. Pass xml_set_object($xp,$this); instead. This does not seem to break anything - but I dont know for sure.
chiefgeek at ecodedesign.com 04-Aug-2002 10:37
Just adding a little note about my above written example.  It needs some improvements.

Because PHP passes by VALUE by default, when you pass an array like this:
array($callback_handler, 'handler_method')
PHP makes a copy of the callback_handler object and uses the handler_method in the copy.

This is not an ideal situation for many reasons...which I will not get into here...but you should have an idea by now.

The best way to fix this is to change a few things. In the function declaration change the parameter from $callback_handler to &$callback_handler. So now your declaration should look like this

function set_callback_handler(&$callback_handler)
{
  ...
}

Now each time you reference $callback_handler change it to &$callback_handler.  For example:

xml_set_element_handler(
          $this->xml_parser,
          array(&$callback_handler, 'start_element'),
          array(&$callback_handler, 'close_Element' ));

This ensures that PHP will always use the same object.
chiefgeek at ecodedesign.com 03-Aug-2002 08:25
xml_set_object is great, if you want to hard code your start_element, end_element, etc functions within your xml class.

But what if you want to increase the modularity of your application?

Solution, create one generic XMLParser class that handles everything *except* the callback funtions.  Then create an abstract XMLCallbackHandler class which you can extend to provide any customization you want.

So how do you tell the php's xml_parser that you want to use this other class to handle the callback functions.

xml_set_object?  This only works if the functions are *within* the object you called this method from.

The solution lies in the xml_set_element_handler() function.
Take a look at this sample source...

class XMLParser
{

  ...

  function set_callback_handler($callback_handler)
  {
    // Assign the startElement endElement functions
    xml_set_element_handler(
          $this->xml_parser,
          array($callback_handler, 'start_element'),
          array($callback_handler, 'close_Element' ));

    /* By passing an array with this ($object, 'function_name') structure
       to the 2nd and 3rd parameters.  We are able to tell the parser to
       look in another object for these callback functions.
    */

    // Assign the character data function
    xml_set_character_data_handler(
          $this->xml_parser,
          array($callback_handler, 'character_data'));
    }
}

class myCallBackHandler
{
  function start_element(...)
  {
    //code goes here
  }

  function end_element(...)
  {
    //code goes here
  }

  function character_data(...)
  {
    //code goes here
  }
}

Now all thats left to do is use these classes..

$parser = new XMLParser();
$parser->set_callback_handler(new myCallbackHandler());
dfoesch at cs dot nmsu dot edu 12-Apr-2002 05:38
English explaination of why you do: $xml = & new xml();

Ok, when PHP executes "new xml()" it creates an anonymous variable (one that you can't reference with any name) which it then runs the constructor function on.  Ok, now once that's done, it then assigns by VALUE in the example above.  This means that that lovely pointer to your parser is pointing to the anonymous instance of your class, and not the used instance of your class... thus making a "shadow" of all your variables, where assignments inside the parser access different variables than outside the parser.  What PHP _SHOULD_ be doing (similar to C++) is have this statement execute such that the assignment is done by REFERENCE, so that you assign the new name to the class that actually got constructed, and not just a copy of the class that you constructed.

If they did it right, this code wouldn't be broken.
14-Feb-2002 11:10
Call-time pass-by-reference has been deprecated, so the example is buggy as was already mentionned. However since 4.04 (I think) "new" can return objects by reference. So the clean way to have both the parser initialised in the constructor, and to save the result in your object is to do

$xml_parser = & new xml();

see http://www.php.net/manual/en/language.oop.newref.php

Ivan
pete dot nelson at serverSXPYAZMsolved dot com 27-Aug-2001 10:15
<p>in reply to jon9mm's question, I have found the same problem (function 'startElement' does not exist).  I finally found the way around this, by re-reading this doc for xml_set_object.  You HAVE to use the xml_set_object($this->parser, &$this) within your parser function.</p> <p>When that function is called, your object temporarily becomes the parser object and shares scope (so it can see 'startElement', etc).   Once that function is done, the xml_set_object(...) call goes out of scope, and your object is no longer bound to the parser.  So the simplist solution is to call xml_set_object(...), do any parsing, and then call xml_parser_free(...) all within the same function.</p>
<p>And remember, don't call xml_set_object(...) in your object's constructor - your object will be forever bound to the parser object and you'll loose all access to your object's member functions.</p>
<p>This is all explained in the examples above, but it took me reading it a couple of times to grok how it all works.</p>
nick at category4 dot com 14-May-2001 01:45
If you're using the XML parser within an object, be careful not to accidentally call any methods that don't exist within the object. Instead of complaining that the missing method doesn't exist, PHP will say it's not able to find the handler routines, even if you've indicated them correctly. (PHP version 4.0.5 on FreeBSD).
williams at cse dot unl dot edu 06-Dec-2000 12:42
If xml_set_object is not called in the constructor of an object, the values that the parser modifies will be saved. Else, the values do not seem to be saved as stated by "i_sofer" above.
--- Start Example Code ---
class foo {
var xmlparser;
function foo() { \\the constructor
$this->xmlparser=xmlparser_create();
}
function parse() {
xml_set_object($this->xmlparser,&$this);
\\also include data handler
\\and element handlers here
}
}
--- End Example Code ---
i_sofer at yahoo dot com 18-Nov-2000 04:15
Using xml parser in objects seem to have a problem that values modified(even of the object itself) get lost as soon as parsing ends...
malcontent at msgto dot com 20-Aug-2000 12:11
The example will generate a warning unless allow_call_time_pass_reference is set to true in your INI file. It also will not accept a call by value.
robert at webmotion dot com 18-Apr-2000 10:58
While true that there is no automatic destructor for PHP class objects, it is quite simple to create a method called destroy and perform the destruction manually. In the example above it may not be necessary to free the xml parser immediately... it would appear from the example that the object is re-useable.


処理命令 (PI) 用ハンドラを設定する

  • ≪ xml_set_object
  • xml_set_start_namespace_decl_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • 処理命令 (PI) 用ハンドラを設定する

xml_set_processing_instruction_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_processing_instruction_handler — 処理命令 (PI) 用ハンドラを設定する

説明

xml_set_processing_instruction_handler(XMLParser $parser, callable $handler): true

XML パーサ parserの処理命令 (PI) 用ハンドラ関数を設定します。

処理命令のフォーマットは以下のとおりです:

<?target
data
?>

警告

PHP コードは、処理命令 <?php によって区切られます。 よって、XMLドキュメントに PHP コードを入れることが可能です。 しかし、PI 終了タグ (?>) をデータに含めてはいけません。 PI 終了タグ が埋め込まれたPHPコードの一部として存在していた場合、 残りの PHP コードは、"真の" PI 終了タグと同じく文字データとして処理されます。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

handler のシグネチャは、下記でなければいけません:

handler(XMLParser $parser, string $target, string $data): void
parser
ハンドラをコールするXMLパーサ
target
処理命令のターゲット
data
処理命令のデータ

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

User Contributed Notes

There are no user contributed notes for this page.


名前空間開始ハンドラを設定する

  • ≪ xml_set_processing_instruction_handler
  • xml_set_unparsed_entity_decl_handler ≫
  • PHP Manual
  • XML パーサ 関数
  • 名前空間開始ハンドラを設定する

xml_set_start_namespace_decl_handler

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

xml_set_start_namespace_decl_handler — 名前空間開始ハンドラを設定する

説明

xml_set_start_namespace_decl_handler(XMLParser $parser, callable $handler): true

名前空間を宣言したところでコールされるハンドラを設定します。 名前空間の宣言は、開始タグの中で行います。 しかし、名前空間宣言の開始ハンドラがコールされるのは、 その開始タグのハンドラがコールされるより前になります。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

handler のシグネチャは、以下でなければいけません:

handler(XMLParser $parser, string|false $prefix, string $uri): void
parser
ハンドラをコールするXMLパーサ
prefix
XML オブジェクト内の名前空間を参照する際に使う文字列。 存在しない場合は false になります。
uri
名前空間の URI。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

参考

  • xml_set_end_namespace_decl_handler() - 名前空間終了ハンドラを設定する

User Contributed Notes

There are no user contributed notes for this page.


処理されないエンティティ宣言用ハンドラを設定する

  • ≪ xml_set_start_namespace_decl_handler
  • XMLParser ≫
  • PHP Manual
  • XML パーサ 関数
  • 処理されないエンティティ宣言用ハンドラを設定する

xml_set_unparsed_entity_decl_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_unparsed_entity_decl_handler — 処理されないエンティティ宣言用ハンドラを設定する

説明

xml_set_unparsed_entity_decl_handler(XMLParser $parser, callable $handler): true

XML パーサ parser の、 処理されないエンティティ宣言用ハンドラ関数を設定します。

このハンドラは、XML パーサが次のような NDATA 宣言を有する 外部エンティティ宣言を処理する際にコールされます。

<!ENTITY <parameter>name</parameter> {<parameter>publicId</parameter> | <parameter>systemId</parameter>}
        NDATA <parameter>notationName</parameter>

外部エンティティ宣言の記述用定義に関しては、 » XML 1.0 仕様の 4.2.2 節を参照ください。

パラメータ

parser

XMLパーサ

handler

null や空文字列を渡すと、ハンドラはデフォルトの状態にリセットされます。

handler が callable の場合、その callable がハンドラとして設定されます。

handler が文字列の場合、xml_set_object() で設定されたオブジェクトのメソッド名になります。

handler のシグネチャは、以下でなければいけません:

handler(
XMLParser $parser,
string $entity_name,
string|false $base,
string $system_id,
string|false $public_id,
string|false $notation_name
): void
parser
ハンドラをコールするXMLパーサ
entity_name
定義しようとするエンティティの名前。
base
外部エンティティのシステム ID(systemId) を取得する際のベースになります。
system_id
外部エンティティのシステム ID。
public_id
外部エンティティのパブリック ID。
notation_name
このエンティティの表記法の名前 (xml_set_notation_decl_handler() を参照ください)。

戻り値

常に true を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 parser は、 XMLParser インスタンスを期待するようになりました。 これより前のバージョンでは、有効な xml resource が期待されていました。

User Contributed Notes

There are no user contributed notes for this page.


XMLParser クラス

(PHP 8)

はじめに

PHP 8.0.0 以降、 xml リソースを置き換える完全不透明クラスです。

クラス概要

final class XMLParser {
}

User Contributed Notes

There are no user contributed notes for this page.


XMLReader

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
  • XMLReader — XMLReader クラス
    • XMLReader::close — XMLReader の入力を閉じる
    • XMLReader::expand — 現在のノードのコピーを DOM オブジェクトとして返す
    • XMLReader::getAttribute — 名前をもとに、属性の値を取得する
    • XMLReader::getAttributeNo — インデックスをもとに、属性の値を取得する
    • XMLReader::getAttributeNs — 名前および URI をもとに、属性の値を取得する
    • XMLReader::getParserProperty — 指定したプロパティが設定されているかどうかを示す
    • XMLReader::isValid — パースしているドキュメントの妥当性を示す
    • XMLReader::lookupNamespace — プレフィックスから、名前空間を検索する
    • XMLReader::moveToAttribute — 指定した名前の属性にカーソルを移動する
    • XMLReader::moveToAttributeNo — 指定したインデックスの属性にカーソルを移動する
    • XMLReader::moveToAttributeNs — 指定した名前の属性にカーソルを移動する
    • XMLReader::moveToElement — 現在の属性の親要素にカーソルを移動する
    • XMLReader::moveToFirstAttribute — 最初の属性にカーソルを移動する
    • XMLReader::moveToNextAttribute — 次の属性にカーソルを移動する
    • XMLReader::next — すべてのサブツリーを飛ばして、次のノードにカーソルを移動する
    • XMLReader::open — パースする XML を含む URI を設定する
    • XMLReader::read — ドキュメント内の次のノードに移動する
    • XMLReader::readInnerXml — 現在のノードから XML を取得する
    • XMLReader::readOuterXml — 現在のノードから自分自身も含めた XML を取得する
    • XMLReader::readString — 現在のノードの内容を文字列で読み込む
    • XMLReader::setParserProperty — パーサのオプションを設定する
    • XMLReader::setRelaxNGSchema — RelaxNG スキーマのファイル名あるいは URI を設定する
    • XMLReader::setRelaxNGSchemaSource — RelaxNG スキーマを含むデータを設定する
    • XMLReader::setSchema — ドキュメントを XSD で検証する
    • XMLReader::XML — パースする XML を含むデータを設定する

User Contributed Notes

Anonymous 10-May-2024 01:26
Allright, I'll do it myself:

$xmlreader = XMLReader::open('xml_file.xml');
$indent = 0;
while ($xmlreader->read() !== FALSE)
{
    switch ($xmlreader->nodeType)
    {
        case XMLReader::ELEMENT:
            echo str_repeat("\t", ($xmlreader->isEmptyElement ? $indent : $indent++)), '[element]: ', $xmlreader->name, "\n";
            break;
        case XMLReader::TEXT:
            echo str_repeat("\t", $indent), $xmlreader->value, "\n";
            break;
        case XMLReader::END_ELEMENT:
            echo str_repeat("\t", --$indent), '[end element]: ', $xmlreader->name, "\n";
            break;
    }
}


はじめに

XMLReader 拡張モジュールは、プル型の XML パーサです。ドキュメント ストリーム内をカーソル風に進んでいき、その途中の各ノードで立ち止まります。

エンコーディング

内部的には、libxml は UTF-8 エンコーディングを使用しています。 したがって、取得したデータはすべて UTF-8 エンコーディングに変換されます。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

XMLReader 拡張モジュールは、PHP にバンドルされています。 この拡張モジュールはデフォルトで有効になっています。無効にしたい場合は、次のオプションを指定してコンパイルします。 --disable-xmlreader

User Contributed Notes

Miguel Cruz 11-Jun-2012 01:06
If you are having trouble loading this extension (perhaps with a log message like 'Undefined symbol "dom_node_class_entry"'), make sure that you have xmlreader.so listed AFTER dom.so in php.ini.
alvaro at digdib dot com 02-Jan-2009 02:33
Gentoo users: emerge does not compile dev-lang/php with --enable-xmlreader by default. To enable this option, add the flag xmlreader to your USE variable and recompile php.


XMLReader クラス

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

はじめに

XMLReader 拡張モジュールは、プル型の XML パーサです。ドキュメント ストリーム内をカーソル風に進んでいき、その途中の各ノードで立ち止まります。

クラス概要

class XMLReader {
/* 定数 */
public const int NONE;
public const int ELEMENT;
public const int ATTRIBUTE;
public const int TEXT;
public const int CDATA;
public const int ENTITY_REF;
public const int ENTITY;
public const int PI;
public const int COMMENT;
public const int DOC;
public const int DOC_TYPE;
public const int DOC_FRAGMENT;
public const int NOTATION;
public const int WHITESPACE;
public const int SIGNIFICANT_WHITESPACE;
public const int END_ELEMENT;
public const int END_ENTITY;
public const int XML_DECLARATION;
public const int LOADDTD;
public const int DEFAULTATTRS;
public const int VALIDATE;
public const int SUBST_ENTITIES;
/* プロパティ */
public int $attributeCount;
public string $baseURI;
public int $depth;
public bool $hasAttributes;
public bool $hasValue;
public bool $isDefault;
public bool $isEmptyElement;
public string $localName;
public string $name;
public string $namespaceURI;
public int $nodeType;
public string $prefix;
public string $value;
public string $xmlLang;
/* メソッド */
public close(): true
public expand(?DOMNode $baseNode = null): DOMNode|false
public getAttribute(string $name): ?string
public getAttributeNo(int $index): ?string
public getAttributeNs(string $name, string $namespace): ?string
public getParserProperty(int $property): bool
public isValid(): bool
public lookupNamespace(string $prefix): ?string
public moveToAttribute(string $name): bool
public moveToAttributeNo(int $index): bool
public moveToAttributeNs(string $name, string $namespace): bool
public moveToElement(): bool
public moveToFirstAttribute(): bool
public moveToNextAttribute(): bool
public next(?string $name = null): bool
public static open(string $uri, ?string $encoding = null, int $flags = 0): XMLReader
public open(string $uri, ?string $encoding = null, int $flags = 0): bool
public read(): bool
public readInnerXml(): string
public readOuterXml(): string
public readString(): string
public setParserProperty(int $property, bool $value): bool
public setRelaxNGSchema(?string $filename): bool
public setRelaxNGSchemaSource(?string $source): bool
public setSchema(?string $filename): bool
public static XML(string $source, ?string $encoding = null, int $flags = 0): XMLReader
public XML(string $source, ?string $encoding = null, int $flags = 0): bool
}

プロパティ

attributeCount

ノード上の属性の数

baseURI

ノードのベース URI

depth

ツリー内でのノードの階層 (0 から数える)

hasAttributes

ノードが属性を保持しているかどうか

hasValue

ノードがテキストの値を保持しているかどうか

isDefault

属性が DTD のデフォルトかどうか

isEmptyElement

ノードが空要素のタグかどうか

localName

ノードのローカル名

name

ノードの限定名

namespaceURI

ノードに関連付けられた名前空間の URI

nodeType

ノードの型

prefix

ノードに関連付けられた名前空間のプレフィックス

value

ノードのテキスト値

xmlLang

ノードが存在する xml:lang スコープ

定義済み定数

XMLReader ノード型

XMLReader::NONE

ノード型なし

XMLReader::ELEMENT

開始要素

XMLReader::ATTRIBUTE

属性ノード

XMLReader::TEXT

テキストノード

XMLReader::CDATA

CDATA ノード

XMLReader::ENTITY_REF

エンティティ参照ノード

XMLReader::ENTITY

エンティティ宣言ノード

XMLReader::PI

処理命令 (Processing Instruction) ノード

XMLReader::COMMENT

コメントノード

XMLReader::DOC

文書ノード

XMLReader::DOC_TYPE

文書型ノード

XMLReader::DOC_FRAGMENT

文書片ノード

XMLReader::NOTATION

記法ノード

XMLReader::WHITESPACE

Whitespace ノード

XMLReader::SIGNIFICANT_WHITESPACE

Significant Whitespace ノード

XMLReader::END_ELEMENT

終了要素

XMLReader::END_ENTITY

終了エンティティ

XMLReader::XML_DECLARATION

XML 宣言ノード

XMLReader パーサオプション

XMLReader::LOADDTD

DTD を読み込むが、妥当性は検証しない

XMLReader::DEFAULTATTRS

DTD およびデフォルト属性を読み込むが、妥当性は検証しない

XMLReader::VALIDATE

DTD を読み込み、パース時に妥当性を検証する

XMLReader::SUBST_ENTITIES

エンティティを参照で置き換える

目次

  • XMLReader::close — XMLReader の入力を閉じる
  • XMLReader::expand — 現在のノードのコピーを DOM オブジェクトとして返す
  • XMLReader::getAttribute — 名前をもとに、属性の値を取得する
  • XMLReader::getAttributeNo — インデックスをもとに、属性の値を取得する
  • XMLReader::getAttributeNs — 名前および URI をもとに、属性の値を取得する
  • XMLReader::getParserProperty — 指定したプロパティが設定されているかどうかを示す
  • XMLReader::isValid — パースしているドキュメントの妥当性を示す
  • XMLReader::lookupNamespace — プレフィックスから、名前空間を検索する
  • XMLReader::moveToAttribute — 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToAttributeNo — 指定したインデックスの属性にカーソルを移動する
  • XMLReader::moveToAttributeNs — 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToElement — 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToFirstAttribute — 最初の属性にカーソルを移動する
  • XMLReader::moveToNextAttribute — 次の属性にカーソルを移動する
  • XMLReader::next — すべてのサブツリーを飛ばして、次のノードにカーソルを移動する
  • XMLReader::open — パースする XML を含む URI を設定する
  • XMLReader::read — ドキュメント内の次のノードに移動する
  • XMLReader::readInnerXml — 現在のノードから XML を取得する
  • XMLReader::readOuterXml — 現在のノードから自分自身も含めた XML を取得する
  • XMLReader::readString — 現在のノードの内容を文字列で読み込む
  • XMLReader::setParserProperty — パーサのオプションを設定する
  • XMLReader::setRelaxNGSchema — RelaxNG スキーマのファイル名あるいは URI を設定する
  • XMLReader::setRelaxNGSchemaSource — RelaxNG スキーマを含むデータを設定する
  • XMLReader::setSchema — ドキュメントを XSD で検証する
  • XMLReader::XML — パースする XML を含むデータを設定する

User Contributed Notes

eef dot vreeland at gmail dot com 10-Aug-2017 05:43
Please discard my previous note; I pressed 'Add Note' too quickly

About (non-)self-closing tags:

 A) <tag></tag>
    $xmlRdr->isEmptyElement => false
    $xmlRdr->hasValue       => false
    $xmlRdr->value          => ''
    $xmlRdr->hasAttributes  => false

 B) <tag />
    $xmlRdr->isEmptyElement => true
    $xmlRdr->hasValue       => false
    $xmlRdr->value          => ''
    $xmlRdr->hasAttributes  => false

 C) <tag attribute="value"></tag>
    $xmlRdr->isEmptyElement => false
    $xmlRdr->hasValue       => false
    $xmlRdr->value          => ''
    $xmlRdr->hasAttributes  => true

 D) <tag attribute="value" />
    $xmlRdr->isEmptyElement => true
    $xmlRdr->hasValue       => false
    $xmlRdr->value          => ''
    $xmlRdr->hasAttributes  => true

... and always use the '===' operator when testing properties
eef dot vreeland at gmail dot com 10-Aug-2017 05:08
Note that when:

A) <tag></tag>
   $xmlRdr->isEmptyElement => false
   $xmlRdr->hasValue       => true
   $xmlRdr->value          => ''
   $xmlRdr->hasAttributes  => false

B) <tag />
   $xmlRdr->isEmptyElement => true
   $xmlRdr->hasValue       => false
   $xmlRdr->value          => ''
   $xmlRdr->hasAttributes  => false

C) <tag attribute="value"></tag>
   $xmlRdr->isEmptyElement => false
   $xmlRdr->hasValue       => false
   $xmlRdr->value          => ''
   $xmlRdr->hasAttributes  => true

D) <tag attribute="value" />
   $xmlRdr->isEmptyElement => true
   $xmlRdr->hasValue       => false
   $xmlRdr->value          => ''
   $xmlRdr->hasAttributes  => true
Sean Colin Ruiz 08-Jan-2017 03:11
As japos mentioned. Take care how you use isEmptyElement. After you are done looping through the attributes: isEmptyElement will be false.  You can use moveToElement() to move the cursor back to the element and then you can use isEmptyElement like normal again.
dkrnl at yandex dot ru 04-Oct-2013 04:10
Wrapper XMLReader class, for simple SAX-reading huge xml:
https://github.com/dkrnl/SimpleXMLReader

Usage example: http://github.com/dkrnl/SimpleXMLReader/blob/master/examples/example1.php

<?php

/**
 * Simple XML Reader
 *
 * @license Public Domain
 * @author Dmitry Pyatkov(aka dkrnl) <dkrnl@yandex.ru>
 * @url http://github.com/dkrnl/SimpleXMLReader
 */
class SimpleXMLReader extends XMLReader
{

    /**
     * Callbacks
     *
     * @var array
     */
    protected $callback = array();

    /**
     * Add node callback
     *
     * @param  string   $name
     * @param  callback $callback
     * @param  integer  $nodeType
     * @return SimpleXMLReader
     */
    public function registerCallback($name, $callback, $nodeType = XMLREADER::ELEMENT)
    {
        if (isset($this->callback[$nodeType][$name])) {
            throw new Exception("Already exists callback $name($nodeType).");
        }
        if (!is_callable($callback)) {
            throw new Exception("Already exists parser callback $name($nodeType).");
        }
        $this->callback[$nodeType][$name] = $callback;
        return $this;
    }

    /**
     * Remove node callback
     *
     * @param  string  $name
     * @param  integer $nodeType
     * @return SimpleXMLReader
     */
    public function unRegisterCallback($name, $nodeType = XMLREADER::ELEMENT)
    {
        if (!isset($this->callback[$nodeType][$name])) {
            throw new Exception("Unknow parser callback $name($nodeType).");
        }
        unset($this->callback[$nodeType][$name]);
        return $this;
    }

    /**
     * Run parser
     *
     * @return void
     */
    public function parse()
    {
        if (empty($this->callback)) {
            throw new Exception("Empty parser callback.");
        }
        $continue = true;
        while ($continue && $this->read()) {
            if (isset($this->callback[$this->nodeType][$this->name])) {
                $continue = call_user_func($this->callback[$this->nodeType][$this->name], $this);
            }
        }
    }

    /**
     * Run XPath query on current node
     *
     * @param  string $path
     * @param  string $version
     * @param  string $encoding
     * @return array(SimpleXMLElement)
     */
    public function expandXpath($path, $version = "1.0", $encoding = "UTF-8")
    {
        return $this->expandSimpleXml($version, $encoding)->xpath($path);
    }

    /**
     * Expand current node to string
     *
     * @param  string $version
     * @param  string $encoding
     * @return SimpleXMLElement
     */
    public function expandString($version = "1.0", $encoding = "UTF-8")
    {
        return $this->expandSimpleXml($version, $encoding)->asXML();
    }

    /**
     * Expand current node to SimpleXMLElement
     *
     * @param  string $version
     * @param  string $encoding
     * @param  string $className
     * @return SimpleXMLElement
     */
    public function expandSimpleXml($version = "1.0", $encoding = "UTF-8", $className = null)
    {
        $element = $this->expand();
        $document = new DomDocument($version, $encoding);
        $node = $document->importNode($element, true);
        $document->appendChild($node);
        return simplexml_import_dom($node, $className);
    }

    /**
     * Expand current node to DomDocument
     *
     * @param  string $version
     * @param  string $encoding
     * @return DomDocument
     */
    public function expandDomDocument($version = "1.0", $encoding = "UTF-8")
    {
        $element = $this->expand();
        $document = new DomDocument($version, $encoding);
        $node = $document->importNode($element, true);
        $document->appendChild($node);
        return $document;
    }

}
?>
kula_shakerz 03-Apr-2013 02:27
Found this in the IXmlReader docs at msdn but it's also valid for XMLReader in PHP.

You should save the value of $isEmptyElement before processing attributes, or call moveToElement to make $isEmptyElement valid after processing attributes.

$isEmptyElement returns FALSE when XMLReader is positioned on an attribute node, even if attribute's parent element is empty.
casella dot email at google dot mail dot com 22-Sep-2012 03:59
To verify that all nodes are read without error/warning you can use this code:
<?php
$endofxml = false;
$xml_url = "example.xml";
$reader = new XMLReader();
if(!$reader->open($xml_url)){
    print "Error to open XML: $xml_url\n";
} else {
    while ($reader->read()) {
        $firstnode = (!isset($firstnode)) ? $reader->name : $firstnode;
/*
DO SOMETHING
*/
        if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == $firstnode) {
            $endofxml = true;
        }
    }
}
if($endofxml) {
    print "no error found";
} else {
    print "error found";
}
?>

This code is useful to trap $reader->read() error/warning.
lee8oi at gmail dot com 21-Mar-2012 01:54
Sometimes you have an unusual URL that doesn't actually point to an xml file but still returns xml as output (Like the Battlefield Heroes generated syndication urls). Using get_file_contents(url) you can retrieve the xml data from these urls and pass it as a variable for processing as an XML String.

Unfortunately simpleXML or xml DOM cannot process all xml strings. Some have error boxes added to the end of them (such as Battlefield Heroes syndicated news). These boxes cause an end of file sort of error and closes out the script. XMLReader grabs data from these strings without error.
japos dot trash at googlemail dot com 09-Oct-2010 02:17
Take care about how to use XMLReader::$isElementEmpty. I don't know if it is a bug or not, but $isElementEmpty is set for the current context and NOT just for the element. If you move your cursor to an attribute, $isElementEmpty will ALWAYS be false.

<?php
 $xml = new XMLReader();
 $xml->XML('<tag attr="value" />');
 $xml->read();
 var_dump($xml->isEmptyElement);
 $xml->moveToNextAttribute();
 var_dump($xml->isEmptyElement);
?>

will output

(bool) true
(bool) false

So be sure to store $isEmptyElement before moving the cursor.
jart (at) mail.ru 23-Sep-2010 06:59
Guys, I hope this example will help
you can erase prints showing the process-
and it will be a piece of nice code.

<?php
function xml2assoc($xml, $name)
{
    print "<ul>";

    $tree = null;
    print("I'm inside " . $name . "<br>");

    while($xml->read())
    {
        if($xml->nodeType == XMLReader::END_ELEMENT)
        {
            print "</ul>";
            return $tree;
        }

        else if($xml->nodeType == XMLReader::ELEMENT)
        {
            $node = array();

            print("Adding " . $xml->name ."<br>");
            $node['tag'] = $xml->name;

            if($xml->hasAttributes)
            {
                $attributes = array();
                while($xml->moveToNextAttribute())
                {
                    print("Adding attr " . $xml->name ." = " . $xml->value . "<br>");
                    $attributes[$xml->name] = $xml->value;
                }
                $node['attr'] = $attributes;
            }

            if(!$xml->isEmptyElement)
            {
                $childs = xml2assoc($xml, $node['tag']);
                $node['childs'] = $childs;
            }

            print($node['tag'] . " added <br>");
            $tree[] = $node;
        }

        else if($xml->nodeType == XMLReader::TEXT)
        {
            $node = array();
            $node['text'] = $xml->value;
            $tree[] = $node;
            print "text added = " . $node['text'] . "<br>";
        }
    }

    print "returning " . count($tree) . " childs<br>";
    print "</ul>";

    return $tree;
}

echo "<PRE>";

$xml = new XMLReader();
$xml->open('test.xml');
$assoc = xml2assoc($xml, "root");
$xml->close();

print_r($assoc);
echo "</PRE>";

?>

It reads this xml:

<test>
    <hallo volume="loud"> me <br/> lala </hallo>
    <hallo> me </hallo>
</test>
james dot ellis at example dot com 25-Mar-2009 03:16
The "XML2Assoc" functions noted here should be used with caution... basically they are duplicating the functionality already present in SimpleXML. They may work but they won't scale.

Their are two main uses cases for parsing XML, each suited to either XMLReader or SimpleXML.

1. SimpleXML is an excellent tool for easy access to an XML document tree using native PHP data types. It starts to flounder with massive (> 50M or so) XML documents, as it reads the entire document into memory before it can be processed. SimpleXML will just laugh at you then die when your server runs out of memory (or it will cause a load spike).

2. Aside from the reasoning behind massive XML documents, if you have to deal with massive XML documents, use XMLReader to process them. Don't try and gather an entire XML document into a PHP data structure using XMLReader and a PHP xml2assoc() function, you are reinventing the SimpleXML wheel.
When parsing massive XML documents using XMLReader, gather the data you need to perform an operation then perform it before skipping to the next node. Do not build massive data structures from a massive XML document, your server (and it's admins) will not like you.
PxL 23-Jan-2009 03:36
A basic parser

<?php
function xml2assoc($xml) {
    $arr = array();
    if (!preg_match_all('|\<\s*?(\w+).*?\>(.*)\<\/\s*\\1.*?\>|s', $xml, $m)) return $xml;
    if (is_array($m[1]))
        for ($i = 0;$i < sizeof($m[1]); $i++) $arr[$m[1][$i]] = xml2assoc($m[2][$i]);
    else $arr[$m[1]] = xml2assoc($m[2]);

    return $arr;
}
?>
boukeversteegh at gmail dot com 18-Jan-2009 02:06
XML to ASSOCIATIVE ARRAY

Improved algorithm based on Sergey Aikinkulov's. The problem was that it would overwrite nodes if they had the same tag name. Because of that <a><b/><b/><a> would be read as if <a><b/><a/>. This algorithm handles it better and outputs an easy to understand array:

<?php
function xml2assoc($xml) {
    $tree = null;
    while($xml->read())
        switch ($xml->nodeType) {
            case XMLReader::END_ELEMENT: return $tree;
            case XMLReader::ELEMENT:
                $node = array('tag' => $xml->name, 'value' => $xml->isEmptyElement ? '' : xml2assoc($xml));
                if($xml->hasAttributes)
                    while($xml->moveToNextAttribute())
                        $node['attributes'][$xml->name] = $xml->value;
                $tree[] = $node;
            break;
            case XMLReader::TEXT:
            case XMLReader::CDATA:
                $tree .= $xml->value;
        }
    return $tree;
}

?>

Usage:

myxml.xml:
------
<PERSON>
    <NAME>John</NAME>
    <PHONE type="home">555-555-555</PHONE>
</PERSON>
----

<?
    $xml = new XMLReader();
    $xml->open('myxml.xml');
    $assoc = xml2assoc($xml);
    $xml->close();
    print_r($assoc);
?>

Outputs:
Array
(
    [0] => Array
        (
            [tag] => PERSON
            [value] => Array
                (
                    [0] => Array
                        (
                            [tag] => NAME
                            [value] => John
                        )

                    [1] => Array
                        (
                            [tag] => PHONE
                            [value] => 555-555-555
                            [attributes] => Array
                                (
                                    [type] => home
                                )

                        )

                )

        )

)

For reasons that have to do with recursion, it returns an array with the ROOT xml node as the first childNode, rather than to return only the ROOT node.
andrei_antal at yahoo dot com 08-Jan-2009 08:25
<?php
//Pull certain elements
 $reader = new XMLReader();
  $reader->open($xmlfile);
while ($reader->read()) {
 switch ($reader->nodeType) {
   case (XMLREADER::ELEMENT):

if ($reader->name == "Code")
     {
       $reader->read();
       $code = trim($reader->value);
       echo "$code\n";
       break;
     }

 if ($reader->name == "Name")
     {
       $reader->read();
       $customername = trim( $reader->value );
       echo "$name\n";
       break;
     }

 if ($reader->name == "Camp")
    {
      $camp = trim($reader->getAttribute("ID"));
       echo "$camp\n";
      break;
    }
  }
}
?>
godseth at o2 dot pl 28-Nov-2008 02:34
Thanks rein_baarsma33 AT hotmail DOT com for bugfixes.

This is my new child of XML parsing method  based on my and yours modification.

XML2ASSOC Is a complete solution for parsing ordinary XML

<?php
/**
 * XML2Assoc Class to creating
 * PHP Assoc Array from XML File
 *
 * @author godseth (AT) o2.pl & rein_baarsma33 (AT) hotmail.com (Bugfixes in parseXml Method)
 * @uses XMLReader
 *
 */

class Xml2Assoc {

    /**
     * Optimization Enabled / Disabled
     *
     * @var bool
     */
    protected $bOptimize = false;

    /**
     * Method for loading XML Data from String
     *
     * @param string $sXml
     * @param bool $bOptimize
     */

    public function parseString( $sXml , $bOptimize = false) {
        $oXml = new XMLReader();
        $this -> bOptimize = (bool) $bOptimize;
        try {

            // Set String Containing XML data
            $oXml->XML($sXml);

            // Parse Xml and return result
            return $this->parseXml($oXml);

        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    /**
     * Method for loading Xml Data from file
     *
     * @param string $sXmlFilePath
     * @param bool $bOptimize
     */
    public function parseFile( $sXmlFilePath , $bOptimize = false ) {
        $oXml = new XMLReader();
        $this -> bOptimize = (bool) $bOptimize;
        try {
            // Open XML file
            $oXml->open($sXmlFilePath);

            // // Parse Xml and return result
            return $this->parseXml($oXml);

        } catch (Exception $e) {
            echo $e->getMessage(). ' | Try open file: '.$sXmlFilePath;
        }
    }

    /**
     * XML Parser
     *
     * @param XMLReader $oXml
     * @return array
     */
    protected function parseXml( XMLReader $oXml ) {

        $aAssocXML = null;
        $iDc = -1;

        while($oXml->read()){
            switch ($oXml->nodeType) {

                case XMLReader::END_ELEMENT:

                    if ($this->bOptimize) {
                        $this->optXml($aAssocXML);
                    }
                    return $aAssocXML;

                case XMLReader::ELEMENT:

                    if(!isset($aAssocXML[$oXml->name])) {
                        if($oXml->hasAttributes) {
                            $aAssocXML[$oXml->name][] = $oXml->isEmptyElement ? '' : $this->parseXML($oXml);
                        } else {
                            if($oXml->isEmptyElement) {
                                $aAssocXML[$oXml->name] = '';
                            } else {
                                $aAssocXML[$oXml->name] = $this->parseXML($oXml);
                            }
                        }
                    } elseif (is_array($aAssocXML[$oXml->name])) {
                        if (!isset($aAssocXML[$oXml->name][0]))
                        {
                            $temp = $aAssocXML[$oXml->name];
                            foreach ($temp as $sKey=>$sValue)
                            unset($aAssocXML[$oXml->name][$sKey]);
                            $aAssocXML[$oXml->name][] = $temp;
                        }

                        if($oXml->hasAttributes) {
                            $aAssocXML[$oXml->name][] = $oXml->isEmptyElement ? '' : $this->parseXML($oXml);
                        } else {
                            if($oXml->isEmptyElement) {
                                $aAssocXML[$oXml->name][] = '';
                            } else {
                                $aAssocXML[$oXml->name][] = $this->parseXML($oXml);
                            }
                        }
                    } else {
                        $mOldVar = $aAssocXML[$oXml->name];
                        $aAssocXML[$oXml->name] = array($mOldVar);
                        if($oXml->hasAttributes) {
                            $aAssocXML[$oXml->name][] = $oXml->isEmptyElement ? '' : $this->parseXML($oXml);
                        } else {
                            if($oXml->isEmptyElement) {
                                $aAssocXML[$oXml->name][] = '';
                            } else {
                                $aAssocXML[$oXml->name][] = $this->parseXML($oXml);
                            }
                        }
                    }

                    if($oXml->hasAttributes) {
                        $mElement =& $aAssocXML[$oXml->name][count($aAssocXML[$oXml->name]) - 1];
                        while($oXml->moveToNextAttribute()) {
                            $mElement[$oXml->name] = $oXml->value;
                        }
                    }
                    break;
                case XMLReader::TEXT:
                case XMLReader::CDATA:

                    $aAssocXML[++$iDc] = $oXml->value;

            }
        }

        return $aAssocXML;
    }

    /**
     * Method to optimize assoc tree.
     * ( Deleting 0 index when element
     *  have one attribute / value )
     *
     * @param array $mData
     */
    public function optXml(&$mData) {
        if (is_array($mData)) {
            if (isset($mData[0]) && count($mData) == 1 ) {
                $mData = $mData[0];
                if (is_array($mData)) {
                    foreach ($mData as &$aSub) {
                        $this->optXml($aSub);
                    }
                }
            } else {
                foreach ($mData as &$aSub) {
                    $this->optXml($aSub);
                }
            }
        }
    }

}

?>

[EDIT BY danbrown AT php DOT net:  Fixes were also provided by "Alex" and (qdog AT qview DOT org) in user notes on this page (since removed).]
Sergey Aikinkulov 19-Jun-2008 03:51
Next version xml2assoc with some improve fixes:
 - no doubled data
 - no buffer arrays

<?php
/*
    Read XML structure to associative array
    --
    Using:
    $xml = new XMLReader();
    $xml->open([XML file]);
    $assoc = xml2assoc($xml);
    $xml->close();
*/
    function xml2assoc($xml) {
      $assoc = null;
      while($xml->read()){
        switch ($xml->nodeType) {
          case XMLReader::END_ELEMENT: return $assoc;
          case XMLReader::ELEMENT:
            $assoc[$xml->name][] = array('value' => $xml->isEmptyElement ? '' : xml2assoc($xml));
            if($xml->hasAttributes){
              $el =& $assoc[$xml->name][count($assoc[$xml->name]) - 1];
              while($xml->moveToNextAttribute()) $el['attributes'][$xml->name] = $xml->value;
            }
            break;
          case XMLReader::TEXT:
          case XMLReader::CDATA: $assoc .= $xml->value;
        }
      }
      return $assoc;
    }
?>
desk_ocean at msn dot com 16-Mar-2008 10:03
make some modify from Sergey Aikinkulov's note

<?php
function xml2assoc(&$xml){
    $assoc = NULL;
    $n = 0;
    while($xml->read()){
        if($xml->nodeType == XMLReader::END_ELEMENT) break;
        if($xml->nodeType == XMLReader::ELEMENT and !$xml->isEmptyElement){
            $assoc[$n]['name'] = $xml->name;
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
            $assoc[$n]['val'] = xml2assoc($xml);
            $n++;
        }
        else if($xml->isEmptyElement){
            $assoc[$n]['name'] = $xml->name;
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
            $assoc[$n]['val'] = "";
            $n++;
        }
        else if($xml->nodeType == XMLReader::TEXT) $assoc = $xml->value;
    }
    return $assoc;
}
?>

add else if($xml->isEmptyElement)
may be some xml has emptyelement
itari 15-Feb-2008 08:30
<?php
function parseXML($node,$seq,$path) {
global $oldpath;
    if (!$node->read())
      return;
    if ($node->nodeType != 15) {
      print '<br/>'.$node->depth;
      print '-'.$seq++;
      print '  '.$path.'/'.($node->nodeType==3?'text() = ':$node->name);
      print $node->value;
      if ($node->hasAttributes) {
        print ' [hasAttributes: ';
        while ($node->moveToNextAttribute()) print '@'.$node->name.' = '.$node->value.' ';
        print ']';
        }
      if ($node->nodeType == 1) {
        $oldpath=$path;
        $path.='/'.$node->name;
        }
      parseXML($node,$seq,$path);
      }
    else parseXML($node,$seq,$oldpath);
}

$source = "<tag1>this<tag2 id='4' name='foo'>is</tag2>a<tag2 id='5'>common</tag2>record</tag1>";
$xml = new XMLReader();
$xml->XML($source);
print htmlspecialchars($source).'<br/>';
parseXML($xml,0,'');
?>

Output:

<tag1>this<tag2 id='4' name='foo'>is</tag2>a<tag2 id='5'>common</tag2>record</tag1>

0-0 /tag1
1-1 /tag1/text() = this
1-2 /tag1/tag2 [hasAttributes: @id = 4 @name = foo ]
2-3 /tag1/text() = is
1-4 /text() = a
1-5 /tag2 [hasAttributes: @id = 5 ]
2-6 /text() = common
1-7 /text() = record


XMLReader の入力を閉じる

  • ≪ XMLReader
  • XMLReader::expand ≫
  • PHP Manual
  • XMLReader
  • XMLReader の入力を閉じる

XMLReader::close

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::close — XMLReader の入力を閉じる

説明

public XMLReader::close(): true

XMLReader オブジェクトが現在パースしている入力を閉じます。

パラメータ

この関数にはパラメータはありません。

戻り値

常に true を返します。

参考

  • XMLReader::open() - パースする XML を含む URI を設定する
  • XMLReader::xml() - パースする XML を含むデータを設定する

User Contributed Notes

There are no user contributed notes for this page.


現在のノードのコピーを DOM オブジェクトとして返す

  • ≪ XMLReader::close
  • XMLReader::getAttribute ≫
  • PHP Manual
  • XMLReader
  • 現在のノードのコピーを DOM オブジェクトとして返す

XMLReader::expand

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::expand — 現在のノードのコピーを DOM オブジェクトとして返す

説明

public XMLReader::expand(?DOMNode $baseNode = null): DOMNode|false

このメソッドは、現在のノードをコピーして適切な DOM オブジェクトを返します。

パラメータ

baseNode

DOM オブジェクトを作る対象の DOMDocument を示す DOMNode。

戻り値

DOMNode か、エラー時には false を返します。

User Contributed Notes

Sbastien 02-Jan-2022 01:29
XMLReader::expand() expands the current subtree to DOM. SimpleXML is good too. To avoid a warning like "Imported Node must have associated Document" when using simplexml_import_dom(), we can do :

<?php

// Huge XML compressed file
$xml = XMLReader::open('compress.zlib:///path/to/my-data.xml.gz');

// Targeting a tiny subtree
while ($xml->name !== 'my-targeted-element') {
    $xml->read();
}

// The trick is here...
// Subtree is expanded in an empty document...
$dom = $xml->expand(new DOMDocument());

// ... which can be imported by SimpleXML
$sx = simplexml_import_dom($dom);

// We can now process our tiny subtree with SimpleXML $sx


名前をもとに、属性の値を取得する

  • ≪ XMLReader::expand
  • XMLReader::getAttributeNo ≫
  • PHP Manual
  • XMLReader
  • 名前をもとに、属性の値を取得する

XMLReader::getAttribute

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::getAttribute — 名前をもとに、属性の値を取得する

説明

public XMLReader::getAttribute(string $name): ?string

指定した名前の属性の値を返します。属性が存在しなかったり 現在位置が要素ノードでなかったりした場合には null を返します。

パラメータ

name

属性の名前。

戻り値

属性の値を返します。指定した名前 name の 属性が見つからなかったり、現在位置が要素ノードではなかったりした場合には null を返します。

変更履歴

バージョン | 説明
8.0.0 | この関数は false を返さなくなりました。

参考

  • XMLReader::getAttributeNo() - インデックスをもとに、属性の値を取得する
  • XMLReader::getAttributeNs() - 名前および URI をもとに、属性の値を取得する

User Contributed Notes

sven at e7o dot de 08-Nov-2023 02:44
To get all attributes and their names, use something like this:

<?php
function getAttributes($reader)
{
    $attributes = [];
    for ($i = 0; $i < $reader->attributeCount; $i++) {
        $reader->moveToAttributeNo($i);
        $attributes[$reader->name] = $reader->value;
    }
    return $attributes;
}
?>
Anonymous 16-Feb-2011 09:02
Or use XMLReader::ELEMENT and XMLReader::END_ELEMENT rather than the numbers 1 and 15.
Gabi 02-Jul-2007 08:15
might be obvious, but not to everyone ;-) ... when reading attributes from a node that has sub-nodes (and creating an output from this node), the output will be issued twice, once on the <ELEMENT> tag and once on the end tag </ELEMENT>. To avoid this, you can test on which part of the node you are using the property nodeType.
It'll be 1 for the element, 15 for the end element.


インデックスをもとに、属性の値を取得する

  • ≪ XMLReader::getAttribute
  • XMLReader::getAttributeNs ≫
  • PHP Manual
  • XMLReader
  • インデックスをもとに、属性の値を取得する

XMLReader::getAttributeNo

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::getAttributeNo — インデックスをもとに、属性の値を取得する

説明

public XMLReader::getAttributeNo(int $index): ?string

その位置をもとにして属性の値を返します。属性が存在しなかったり 現在位置が要素ノードでなかったりした場合には空の文字列を返します。

パラメータ

index

属性の位置。

戻り値

属性の値を返します。指定した位置 index に 属性が見つからなかったり、現在位置が要素ではなかったりした場合には null を返します。

参考

  • XMLReader::getAttribute() - 名前をもとに、属性の値を取得する
  • XMLReader::getAttributeNs() - 名前および URI をもとに、属性の値を取得する

User Contributed Notes

There are no user contributed notes for this page.


名前および URI をもとに、属性の値を取得する

  • ≪ XMLReader::getAttributeNo
  • XMLReader::getParserProperty ≫
  • PHP Manual
  • XMLReader
  • 名前および URI をもとに、属性の値を取得する

XMLReader::getAttributeNs

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::getAttributeNs — 名前および URI をもとに、属性の値を取得する

説明

public XMLReader::getAttributeNs(string $name, string $namespace): ?string

名前および名前空間 URI をもとにして属性の値を返します。 属性が存在しなかったり、現在位置が要素ノードでなかったりした場合には 空の文字列を返します。

パラメータ

name

ローカルの名前。

namespace

名前空間の URI。

戻り値

属性の値を返します。指定した name および namespace に属性が見つからなかったり、 現在位置が要素ではなかったりした場合には null を返します。

変更履歴

バージョン | 説明
8.0.0 | この関数は false を返さなくなりました。

参考

  • XMLReader::getAttribute() - 名前をもとに、属性の値を取得する
  • XMLReader::getAttributeNo() - インデックスをもとに、属性の値を取得する

User Contributed Notes

There are no user contributed notes for this page.


指定したプロパティが設定されているかどうかを示す

  • ≪ XMLReader::getAttributeNs
  • XMLReader::isValid ≫
  • PHP Manual
  • XMLReader
  • 指定したプロパティが設定されているかどうかを示す

XMLReader::getParserProperty

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::getParserProperty — 指定したプロパティが設定されているかどうかを示す

説明

public XMLReader::getParserProperty(int $property): bool

指定したプロパティが設定されているかどうかを示します。

パラメータ

property

パーサオプション定数 のうちのひとつ。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::setParserProperty() - パーサのオプションを設定する

User Contributed Notes

There are no user contributed notes for this page.


パースしているドキュメントの妥当性を示す

  • ≪ XMLReader::getParserProperty
  • XMLReader::lookupNamespace ≫
  • PHP Manual
  • XMLReader
  • パースしているドキュメントの妥当性を示す

XMLReader::isValid

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::isValid — パースしているドキュメントの妥当性を示す

説明

public XMLReader::isValid(): bool

DTD や RelaxNG schema を参照し、 パースしているドキュメントが妥当なものであるかどうかを論理型で返します。 schema がない場合、かつ DTD の検証オプションが指定されない場合、 このメソッドは false を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

ドキュメントが妥当である場合は true を返します。 そうでない場合、false を返します。

例

例1 XML の妥当性の検証

<?php
$xml = XMLReader::open('test.xml');

// validate オプションを有効にしておかないと、
// このメソッドは正しく動作しません
$xml->setParserProperty(XMLReader::VALIDATE, true);

var_dump($xml->isValid());
?>

注意

注意: このメソッドは、現在のノードだけをチェックします。ドキュメント全体をチェックするわけではありません。

参考

  • XMLReader::setParserProperty() - パーサのオプションを設定する
  • XMLReader::setRelaxNGSchema() - RelaxNG スキーマのファイル名あるいは URI を設定する
  • XMLReader::setRelaxNGSchemaSource() - RelaxNG スキーマを含むデータを設定する
  • XMLReader::setSchema() - ドキュメントを XSD で検証する

User Contributed Notes

me at lubu dot ch 31-May-2022 09:54
Be aware that $xml->isValid() will return validity only for currently active node, so you have to loop trough the nodes.

Here is a example how to validate a entire XML file against a XSD schema:

<?php

$xmlReader = new \XMLReader();
$xmlReader->open('./example.xml');
$xmlReader->setParserProperty(\XMLReader::VALIDATE, true);
$xmlReader->setSchema('./schema.xsd');

\libxml_use_internal_errors(true);

$msgs = [];

while ($xmlReader->read()) {
    if (!$xmlReader->isValid()) {
        $err = \libxml_get_last_error();
        if ($err && $err instanceof \libXMLError) {
            $msgs[] = \trim($err->message) . ' on line ' . $err->line;
        }
    }
}

if ($msgs) {
    throw new \Exception("XML schema validation errors:\n - " . implode("\n - ", array_unique($msgs)));
}
?>
zubin at trattonuovo dot com 20-Jan-2010 03:00
I encountered some problems to use isValid method with xml2assoc function.
I use this way to validate the entire xml file and put it into an associative array.

$xml = new XMLReader();
if (!$xml->xml($xml_string, NULL, LIBXML_DTDVALID)) {
  echo "XML not valid: load error";
  exit();
}

libxml_use_internal_errors(TRUE);

$xml_array = xml2assoc($xml);

$arErrors = libxml_get_errors();
$xml_errors = "";
foreach ($arErrors AS $xmlError) $xml_errors .= $xmlError->message;
if ($xml_errors != "") {
  echo "XML not valid: ".$xml_errors;
  exit();
}

//all ok
remy dot damour at laposte dot net 31-Dec-2008 03:27
1. If you validate against relax-ng, no need to call $xml->setParserProperty(XMLReader::VALIDATE, true);

2. Be aware that $xml->isValid() will return validity for currently active node (ie. node currently positioned using $xml->read()). It won't check validity of your entire tree at once, but rather on a step by step basis
anzenews at volja dot net 22-Jan-2008 10:50
This comment is only partially correct:
"isValid() always returns false unless you enable checking for validity by $reader->setParserProperty(XMLReader::VALIDATE, true);"
This enables DTD checking, but you can also check by using RelaxNG (see setRelaxNGSchema() and setRelaxNGSchemaSource()).

And also, this is NOT correct:
"If you just need to check if XML file is well formed, successful loading into XMLReader object is usually enough."
It is not enough. Pull parsers operate on stream and if you have a large enough file they will not know it is well formed until it is read to the end. If you need to know if it is well formed or/and valid, read it till the end or validation error (you can use next() for fast reading if you don't care about contents).


プレフィックスから、名前空間を検索する

  • ≪ XMLReader::isValid
  • XMLReader::moveToAttribute ≫
  • PHP Manual
  • XMLReader
  • プレフィックスから、名前空間を検索する

XMLReader::lookupNamespace

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::lookupNamespace — プレフィックスから、名前空間を検索する

説明

public XMLReader::lookupNamespace(string $prefix): ?string

指定したプレフィックスをもとに、スコープの名前空間を検索します。

パラメータ

prefix

プレフィックスを含む文字列。

戻り値

名前空間の値を返します。 見つからなかった場合は、null を返します。

変更履歴

バージョン | 説明
8.0.0 | この関数は false を返さなくなりました。

User Contributed Notes

There are no user contributed notes for this page.


指定した名前の属性にカーソルを移動する

  • ≪ XMLReader::lookupNamespace
  • XMLReader::moveToAttributeNo ≫
  • PHP Manual
  • XMLReader
  • 指定した名前の属性にカーソルを移動する

XMLReader::moveToAttribute

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::moveToAttribute — 指定した名前の属性にカーソルを移動する

説明

public XMLReader::moveToAttribute(string $name): bool

指定した名前の属性にカーソルを移動します。

パラメータ

name

属性の名前。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::moveToElement() - 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToAttributeNo() - 指定したインデックスの属性にカーソルを移動する
  • XMLReader::moveToAttributeNs() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToFirstAttribute() - 最初の属性にカーソルを移動する

User Contributed Notes

There are no user contributed notes for this page.


指定したインデックスの属性にカーソルを移動する

  • ≪ XMLReader::moveToAttribute
  • XMLReader::moveToAttributeNs ≫
  • PHP Manual
  • XMLReader
  • 指定したインデックスの属性にカーソルを移動する

XMLReader::moveToAttributeNo

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::moveToAttributeNo — 指定したインデックスの属性にカーソルを移動する

説明

public XMLReader::moveToAttributeNo(int $index): bool

指定した位置の属性にカーソルを移動します。

パラメータ

index

属性の位置。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::moveToElement() - 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToAttribute() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToAttributeNs() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToFirstAttribute() - 最初の属性にカーソルを移動する

User Contributed Notes

There are no user contributed notes for this page.


指定した名前の属性にカーソルを移動する

  • ≪ XMLReader::moveToAttributeNo
  • XMLReader::moveToElement ≫
  • PHP Manual
  • XMLReader
  • 指定した名前の属性にカーソルを移動する

XMLReader::moveToAttributeNs

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::moveToAttributeNs — 指定した名前の属性にカーソルを移動する

説明

public XMLReader::moveToAttributeNs(string $name, string $namespace): bool

指定した名前空間内で、指定した名前の属性にカーソルを移動します。

パラメータ

name

ローカル名。

namespace

名前空間の URI。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::moveToElement() - 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToAttribute() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToAttributeNo() - 指定したインデックスの属性にカーソルを移動する
  • XMLReader::moveToFirstAttribute() - 最初の属性にカーソルを移動する

User Contributed Notes

There are no user contributed notes for this page.


現在の属性の親要素にカーソルを移動する

  • ≪ XMLReader::moveToAttributeNs
  • XMLReader::moveToFirstAttribute ≫
  • PHP Manual
  • XMLReader
  • 現在の属性の親要素にカーソルを移動する

XMLReader::moveToElement

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::moveToElement — 現在の属性の親要素にカーソルを移動する

説明

public XMLReader::moveToElement(): bool

現在の属性の親要素にカーソルを移動します。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true、失敗した場合、 あるいはメソッドがコールされた際の位置が属性ノードではなかった場合に false を返します。

参考

  • XMLReader::moveToAttribute() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToAttributeNo() - 指定したインデックスの属性にカーソルを移動する
  • XMLReader::moveToAttributeNs() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToFirstAttribute() - 最初の属性にカーソルを移動する

User Contributed Notes

Sean Colin Ruiz 08-Jan-2017 08:54
On an element like this: <self_closing attribute="1" /> isEmptyElement will return FALSE after you have iterated through the attributes.  So you need to use implicitly call moveToElement(), in order to move the cursor back to the parent element and use isEmptyElement again.


最初の属性にカーソルを移動する

  • ≪ XMLReader::moveToElement
  • XMLReader::moveToNextAttribute ≫
  • PHP Manual
  • XMLReader
  • 最初の属性にカーソルを移動する

XMLReader::moveToFirstAttribute

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::moveToFirstAttribute — 最初の属性にカーソルを移動する

説明

public XMLReader::moveToFirstAttribute(): bool

最初の属性にカーソルを移動します。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::moveToElement() - 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToAttribute() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToAttributeNo() - 指定したインデックスの属性にカーソルを移動する
  • XMLReader::moveToAttributeNs() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToNextAttribute() - 次の属性にカーソルを移動する

User Contributed Notes

There are no user contributed notes for this page.


次の属性にカーソルを移動する

  • ≪ XMLReader::moveToFirstAttribute
  • XMLReader::next ≫
  • PHP Manual
  • XMLReader
  • 次の属性にカーソルを移動する

XMLReader::moveToNextAttribute

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::moveToNextAttribute — 次の属性にカーソルを移動する

説明

public XMLReader::moveToNextAttribute(): bool

現在位置が属性ノードの場合は次の属性にカーソルを移動します。 現在位置が要素ノードの場合は最初の属性にカーソルを移動します。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::moveToElement() - 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToAttribute() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToAttributeNo() - 指定したインデックスの属性にカーソルを移動する
  • XMLReader::moveToAttributeNs() - 指定した名前の属性にカーソルを移動する
  • XMLReader::moveToFirstAttribute() - 最初の属性にカーソルを移動する

User Contributed Notes

There are no user contributed notes for this page.


すべてのサブツリーを飛ばして、次のノードにカーソルを移動する

  • ≪ XMLReader::moveToNextAttribute
  • XMLReader::open ≫
  • PHP Manual
  • XMLReader
  • すべてのサブツリーを飛ばして、次のノードにカーソルを移動する

XMLReader::next

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::next — すべてのサブツリーを飛ばして、次のノードにカーソルを移動する

説明

public XMLReader::next(?string $name = null): bool

すべてのサブツリーを飛ばして、カーソルを次のノードに移動します。 次のノードが存在しない場合、カーソルは文書の一番最後に移動します。

パラメータ

name

移動先のノードの名前。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | name は、nullable になりました。

参考

  • XMLReader::moveToNextAttribute() - 次の属性にカーソルを移動する
  • XMLReader::moveToElement() - 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToAttribute() - 指定した名前の属性にカーソルを移動する

User Contributed Notes

Quiet Noise 13-Apr-2019 01:39
next() without parameters will bring you to the next sibling node on the same depth as the depth where the current cursor is.
Examples:
1. If you are on an opening ELEMENT node next() will bring you to the new line node next to the closing tag of that element (i.e. if you have each tag in separate line) or it will bring you to the opening tag of next node on the same depth.
2. If you are on a TEXT node next() will bring you to the opening tag if there is one next to it.

If there are no more nodes on the given depth next() will bring you to the closing tag (END_ELEMENT) of the wrapping parent.
ppp dot BOTSNEEDNOTAPPLY at salesfloor dot net 08-Sep-2015 09:48
This method appears to follow these rules:

 - if $localName names a sibling node, the cursor is moved to that node;
 - if $localName names an ancestor node, the cursor is moved to the end of that node;
 - if $localName names a node that is a sibling of any of the current node's ancestors, the cursor is moved to that node;
 - otherwise the cursor is moved outside the document.

Note especially that this method never moves the cursor to child nodes.

For example, given this XML document

<?xml version="1.0" encoding="UTF-8"?>
<root id="root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <aaa id="1">
    <bbb id="1.1"></bbb>
    <bbb id="1.2"></bbb>
  </aaa>
  <ccc id="2" />
  <aaa id="3">
    <ddd id="3.1">
      <aaa id="3.1.1"></aaa>
    </ddd>
    <aaa id="3.2"></aaa>
  </aaa>
  <aaa id="4">
    <eee id="4.1"></eee>
  </aaa>
</root>

going from <root id="root"> to "bbb" places the cursor outside the document;
going from <aaa id="1"> to "bbb" places the cursor outside the document;
going from <aaa id="1"> to "aaa" places the cursor on <aaa id="3">;
going from <bbb id="1.1"> to "bbb" places the cursor on <bbb id="1.2">;
going from <bbb id="1.2"> to "bbb" places the cursor outside the document;
going from <bbb id="1.1"> to "ddd" places the cursor outside the document;
going from <bbb id="1.1"> to "aaa" places the cursor on </aaa>;
going from <bbb id="1.1"> to "ccc" places the cursor on <ccc id="2">;
going from <bbb id="1.1"> to "nonsuch" places the cursor outside the document;
going from <bbb id="1.1"> to "root" places the cursor on </root>;
going from <ddd id="3.1"> to "aaa" places the cursor on <aaa id="3.2">;
going from <ddd id="3.1"> to "eee" places the cursor outside the document;

Try it yourself:

<?php

$document = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<root id="root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <aaa id="1">
    <bbb id="1.1"></bbb>
    <bbb id="1.2"></bbb>
  </aaa>
  <ccc id="2" />
  <aaa id="3">
    <ddd id="3.1">
      <aaa id="3.1.1"></aaa>
    </ddd>
    <aaa id="3.2"></aaa>
  </aaa>
  <aaa id="4">
    <eee id="4.1"></eee>
  </aaa>
</root>
XML;

$filename = "/tmp/xmlreader.php.xml";
file_put_contents($filename, $document);

echo "given this XML document\n\n$document\n\n";

showNext("root", "bbb");
showNext("1", "bbb");
showNext("1", "aaa");
showNext("1.1", "bbb");
showNext("1.2", "bbb");
showNext("1.1", "ddd");
showNext("1.1", "aaa");
showNext("1.1", "ccc");
showNext("1.1", "nonsuch");
showNext("1.1", "root");
showNext("3.1", "aaa");
showNext("3.1", "eee");

function showNext($from, $to) {
  global $filename;

  $xml = new \XmlReader();
  $xml->open("file://$filename");
  while ($xml->read()) {
    if ($xml->nodeType === \XmlReader::ELEMENT) {
      if ($xml->getAttribute("id") == $from) {
        echo "going from <$xml->name id=\"$from\">";
        break;
      }
    }
  }

  $xml->next($to);
  $destination = "";
  if($xml->nodeType === \XmlReader::NONE) {
    if(!$xml->read()) {
      $destination = "outside the document";
    }
  }

  if(!$destination) {
    if ($xml->nodeType === \XmlReader::END_ELEMENT) {
      $destination = "on </$xml->name>";
    } else if ($xml->nodeType === \XmlReader::ELEMENT) {
      $destination = "on <$xml->name id=\"" . $xml->getAttribute("id") . "\">";
    }
  }

  echo " to \"$to\" places the cursor $destination;\n";

  $xml->close();
}
?>
gholson19 at gmail dot com 13-May-2015 09:21
To skip over deletion nodes in the xml extracted from a word document, do something like this:

if ($paragraph->nodeType == XMLREADER::ELEMENT && $paragraph->name === 'w:del'){$paragraph->next();}


パースする XML を含む URI を設定する

  • ≪ XMLReader::next
  • XMLReader::read ≫
  • PHP Manual
  • XMLReader
  • パースする XML を含む URI を設定する

XMLReader::open

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::open — パースする XML を含む URI を設定する

説明

public static XMLReader::open(string $uri, ?string $encoding = null, int $flags = 0): XMLReader
public XMLReader::open(string $uri, ?string $encoding = null, int $flags = 0): bool

パースされる XML ドキュメントを含む URI を設定します。

パラメータ

uri

ドキュメントを指す URI。

encoding

ドキュメントのエンコーディングあるいは null。

flags

LIBXML_* 定数のビットマスク。

戻り値

成功した場合に true を、失敗した場合に false を返します。 static メソッドとしてコールされた場合には XMLReader を返します。 失敗した場合に false を返します

エラー / 例外

このメソッドは、staticメソッドとしてコールすることが出来ます。 しかし、PHP 8.0.0 より前のバージョンでは、 staticメソッドとしてコールすると E_DEPRECATED が発生していました。

変更履歴

バージョン | 説明
8.0.0 | XMLReader::open() はstaticメソッドとして宣言されるようになりました。 しかし、XMLReader のインスタンス経由でも呼び出すことが出来ます。

参考

  • XMLReader::xml() - パースする XML を含むデータを設定する
  • XMLReader::close() - XMLReader の入力を閉じる

User Contributed Notes

den at nurfuerspam dot de 29-Apr-2017 10:08
If you like to read the XML from HTTP whit a POST request, you can use libxml_set_streams_context.
Example:

<?php

$param = array('http' => array(
    'method' => 'POST',
    'header' => "Content-type: application/x-www-form-urlencoded\r\n",
    'content' => http_build_query(array(
        'post_param1' => 'value1',
        'post_param2' => 'value2',
    )),
));
libxml_set_streams_context(stream_context_create($param));
$reader = XMLReader::open('https://example.com/get.php?get_param=value3');

?>
dave at sophoservices dot com 02-Dec-2016 07:43
When using the XmlReader to read local XML files, remember it the open function requests a URI. Add 'file://' to the front of the FULL path to the XML. Otherwise you may get:

PHP Warning:  XMLReader::open(): Unable to open source data in ...
mood(_a_)twolate.com 14-Oct-2016 11:03
For some reasons, the open() method keep throwing me this error :

PHP Warning:  XMLReader::open(): Unable to open source data in /var/www/nota/ethamap/fat_xml.php

It doesn't make sense as the xml file target hosted on my server is perfectly reachable. Adding this line before invoking open() fixed it :

libxml_disable_entity_loader(false);

Please view https://bugs.php.net/bug.php?id=62577
It is somehow related.
alvaro at demogracia dot com 14-Nov-2014 12:35
XML can optionally declare its own encoding:

    <?xml version="1.0" encoding="UTF-8"?>

You can use the $encoding parameter to provide this information (if missing) or override it (if wrong).

Output is always UTF-8 (that's how libxml works).
crungmungus at gmail dot com 15-Sep-2008 05:11
Windows users remember to enable php_openssl.dll in your php.ini if you want to be able to use this function (and others) with a HTTPS URL.


ドキュメント内の次のノードに移動する

  • ≪ XMLReader::open
  • XMLReader::readInnerXml ≫
  • PHP Manual
  • XMLReader
  • ドキュメント内の次のノードに移動する

XMLReader::read

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::read — ドキュメント内の次のノードに移動する

説明

public XMLReader::read(): bool

ドキュメント内の次のノードにカーソルを移動します。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::moveToElement() - 現在の属性の親要素にカーソルを移動する
  • XMLReader::moveToAttribute() - 指定した名前の属性にカーソルを移動する
  • XMLReader::next() - すべてのサブツリーを飛ばして、次のノードにカーソルを移動する

User Contributed Notes

peter at 3xe dot co dot uk 13-Oct-2016 12:08
Another approach to the 'also reads closing tags' gotcha:

<?php
$reader = new XMLReader();
$reader->open('users.xml');

while ($reader->read()) {
  if ($reader->nodeType == XMLReader::END_ELEMENT) {
    continue; //skips the rest of the code in this iteration
  }
  //do something with desired node type
  if($reader->name == 'user') {
    //...
  }
}
?>
Anonymous 20-Mar-2015 09:49
> I would have liked to use the next() function instead, but as I needed to parse 2 different subtrees, I couldn't figure out how to find all the columns, reset the pointer, and then find all the rows.

I just use:

$reader->close();
$reader->open($url);

to reset the pointer.
ecziegler at gmail 29-Jan-2014 12:27
If like myself you have been turning the interwebz upside down looking for a solution for this issue:
PHP Warning:  XMLReader::read(): /tmp/xml_feed.xml:4183934: parser error : Input is not proper UTF-8, indicate encoding !

For some reason, this warning breaks the execution - is it a fatal error in disguise?

After days of frustration I found it!!!!
tidy -xml -o output.xml -utf8 -f error.log input.xml

You can invoque tidy using exec, It takes several seconds to convert a 250Mb feed, but it worthy the time.

In my case the issue was with latin1 charset, and for some reason I had to pass the xml through tidy 2 times - first time around creates new errors, second time it fixes everything.

I know invalid xml should be fixed by xml creators, but it works differently in the real world.
Nate 27-Jun-2011 10:49
It is interesting to note that this function will stop on closing tags as well.  I have an XML document similar to the following:

<root>
  <columns>
    <column>columnX</column>
    <column>columnY</column>
  </columns>
  <table>
    <row>
      <columnX>38</columnX>
      <columnY>50</columnY>
    </row>
    <row>
      <columnX>82</columnY>
      <columnY>28</columnY>
    </row>
    ...
  </table>
</root>

I need to parse the <columns> object to know what attributes to check for from each <row> node.  Therefore I was doing the following:

<?php
while ($xml->read()) {
  if ($xml->name === 'column') {
   //parse column node to into $columns array
  }
  elseif ($xml->name === 'row') {
    //parse row node, using constructed $columns array
  }
}
?>

This kind of worked in that I ended up with an array of all the data I wanted, but the array I constructed was twice as large as I expected and every other entry was empty.  Took me a while to debug, but finally figured out that checking <?php $xml->name === 'row' ?> matches both <row> and </row>, so the check should really be something more like:

<?php

if ($xml->name === 'row' && $xml->nodeType == XMLReader::ELEMENT) {
  // parse row node
}

?>

I would have liked to use the next() function instead, but as I needed to parse 2 different subtrees, I couldn't figure out how to find all the columns, reset the pointer, and then find all the rows.
andy at siliconrockstar dot com 16-May-2011 01:01
A very simple way to avoid typing $reader->read() multiple times when you want to skip some nodes:

<?php
class smartXMLReader extends XMLReader {
    public function readTimes($count) {
        $i = 0;
        while($i < $count){
            $this->read();
            $i++;
        }
    }
}
?>

Using this smartXMLReader,

<?php
$reader->readTimes(3);
?>

is equivalent to

<?php
$reader->read();
$reader->read();
$reader->read();
?>

Makes getting around in your XML document a bit easier :)
jirka at kosek dot cz 08-Feb-2006 01:01
libxml2 contains much more useful method readString() that will read and return whole text content of element. You can call it after receiving start tag (XMLReader::ELEMENT). You can use this PHP code to emulate this method until PHP will directly call underlying libxml2 implementation.

<?php
class XMLReader2 extends XMLReader
{
  function readString()
  {
        $depth = 1;
        $text = "";

        while ($this->read() && $depth != 0)
        {
            if (in_array($this->nodeType, array(XMLReader::TEXT, XMLReader::CDATA, XMLReader::WHITESPACE, XMLReader::SIGNIFICANT_WHITESPACE)))
                $text .= $this->value;
            if ($this->nodeType == XMLReader::ELEMENT) $depth++;
            if ($this->nodeType == XMLReader::END_ELEMENT) $depth--;
        }
        return $text;
    }
}
?>

Just use XMLReader2 instead of XMLReader.


現在のノードから XML を取得する

  • ≪ XMLReader::read
  • XMLReader::readOuterXml ≫
  • PHP Manual
  • XMLReader
  • 現在のノードから XML を取得する

XMLReader::readInnerXml

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

XMLReader::readInnerXml — 現在のノードから XML を取得する

説明

public XMLReader::readInnerXml(): string

現在のノードの中身を、子ノードやマークアップも含めて読み込みます。

パラメータ

この関数にはパラメータはありません。

戻り値

現在のノードの中身を文字列で返します。失敗した場合は空文字列を返します。

注意

警告

この関数は、PHP を libxml 20620 以降と組み合わせてコンパイルした場合にのみ使用可能です。

参考

  • XMLReader::readString() - 現在のノードの内容を文字列で読み込む
  • XMLReader::readOuterXml() - 現在のノードから自分自身も含めた XML を取得する
  • XMLReader::expand() - 現在のノードのコピーを DOM オブジェクトとして返す

User Contributed Notes

There are no user contributed notes for this page.


現在のノードから自分自身も含めた XML を取得する

  • ≪ XMLReader::readInnerXml
  • XMLReader::readString ≫
  • PHP Manual
  • XMLReader
  • 現在のノードから自分自身も含めた XML を取得する

XMLReader::readOuterXml

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

XMLReader::readOuterXml — 現在のノードから自分自身も含めた XML を取得する

説明

public XMLReader::readOuterXml(): string

現在のノードの中身を、ノード自身も含めて読み込みます。

パラメータ

この関数にはパラメータはありません。

戻り値

現在のノードの中身を、自分自身も含めて文字列で返します。失敗した場合は空文字列を返します。

注意

警告

この関数は、PHP を libxml 20620 以降と組み合わせてコンパイルした場合にのみ使用可能です。

参考

  • XMLReader::readString() - 現在のノードの内容を文字列で読み込む
  • XMLReader::readInnerXml() - 現在のノードから XML を取得する
  • XMLReader::expand() - 現在のノードのコピーを DOM オブジェクトとして返す

User Contributed Notes

ralf dot horlebein at web dot de 21-Jul-2014 10:57
Please note that empty tags like <span></span> will be automatically converted to the short notation <span />.  This could cause trouble in some cases.
simon at avalon dot net dot nz 16-Mar-2011 04:35
Be aware that when you extract a piece of XML from a larger XML document using the readOuterXML() function, it tries to determine the namespaces (as defined in the original XML document) that apply to the new piece, and inserts them into the appropriate tags as xmlns attributes. This can be disconcerting, but it should be a benign alteration in most cases, and I understand that it causes the new chunk of XML to be correctly formatted so it is valid in it's own right.

As far as I'm aware it's not possible to change this behaviour.


現在のノードの内容を文字列で読み込む

  • ≪ XMLReader::readOuterXml
  • XMLReader::setParserProperty ≫
  • PHP Manual
  • XMLReader
  • 現在のノードの内容を文字列で読み込む

XMLReader::readString

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

XMLReader::readString — 現在のノードの内容を文字列で読み込む

説明

public XMLReader::readString(): string

現在のノードの内容を文字列で読み込みます。

パラメータ

この関数にはパラメータはありません。

戻り値

現在のノードの内容を文字列で返します。失敗した場合は空文字列を返します。

注意

警告

この関数は、PHP を libxml 20620 以降と組み合わせてコンパイルした場合にのみ使用可能です。

参考

  • XMLReader::readOuterXml() - 現在のノードから自分自身も含めた XML を取得する
  • XMLReader::readInnerXml() - 現在のノードから XML を取得する
  • XMLReader::expand() - 現在のノードのコピーを DOM オブジェクトとして返す

User Contributed Notes

alexander_behling at web dot de 25-Jan-2018 03:37
Important:
When using it use -> instead of ::.
You have to use :: only on static functions and then you have not to create a class object.
Lea Hayes 07-Jun-2011 01:51
I would like to reiterate that this does not work when compiled with versions of libxml lower than 20620. I found that it just presents a blank page.

<?php $string = $reader->readString(); ?>

I worked around this issue by adding the following helper function:

<?php
function read_string($reader) {
    $node = $reader->expand();
    return $node->textContent;
}
?>

And then using:

<?php $string = read_string($reader); ?>
Michael Rusch 18-May-2009 10:27
For those who, like me, are having trouble figuring out the difference between getString() an getInnerXML(), the difference is that getString() does NOT include markup.  So, for:

<foo>bar<baz>Hello, world!</baz></foo>

getString() on the <foo> node would return

bar Hello, world!

whereas getInnerXML() would return

bar<baz>Hello, world!</baz>


パーサのオプションを設定する

  • ≪ XMLReader::readString
  • XMLReader::setRelaxNGSchema ≫
  • PHP Manual
  • XMLReader
  • パーサのオプションを設定する

XMLReader::setParserProperty

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::setParserProperty — パーサのオプションを設定する

説明

public XMLReader::setParserProperty(int $property, bool $value): bool

パーサのオプションを設定します。オプションは、
XMLReader::open() あるいは
XMLReader::xml() がコールされた後で、かつ
XMLReader::read() が最初にコールされる前に
設定する必要があります。

パラメータ

property

パーサオプション定数 のひとつ。

value

true を設定するとオプションが有効になり、それ以外を設定すると 無効になります。

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

There are no user contributed notes for this page.


RelaxNG スキーマのファイル名あるいは URI を設定する

  • ≪ XMLReader::setParserProperty
  • XMLReader::setRelaxNGSchemaSource ≫
  • PHP Manual
  • XMLReader
  • RelaxNG スキーマのファイル名あるいは URI を設定する

XMLReader::setRelaxNGSchema

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::setRelaxNGSchema — RelaxNG スキーマのファイル名あるいは URI を設定する

説明

public XMLReader::setRelaxNGSchema(?string $filename): bool

検証の際に使用する RelaxNG スキーマのファイル名あるいは URI を 設定します。

パラメータ

filename

RelaxNG スキーマを指すファイル名あるいは URI。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::setRelaxNGSchemaSource() - RelaxNG スキーマを含むデータを設定する
  • XMLReader::setSchema() - ドキュメントを XSD で検証する
  • XMLReader::isValid() - パースしているドキュメントの妥当性を示す

User Contributed Notes

remy dot damour at laposte dot net 30-Dec-2008 04:40
Make sure to load your data prior to calling ->setRelaxNGSchema() otherwise you will get an error.

<?php
$xml_reader = new XMLReader();
$xml_reader->setRelaxNGSchema($rng_schema);
$xml_reader->xml($xml_data);
?>
Above code generates the following warning: "Warning: XMLReader::setRelaxNGSchemaSource()
[xmlreader.setrelaxngschemasource]: Unable to set schema. This must be
set prior to reading or schema contains errors."

whereas the following does not generate a warning:
<?php
$xml_reader = new XMLReader();
$xml_reader->xml($xml_data); // or $xml_reader->xml($xml_file);
$xml_reader->setRelaxNGSchema($rng_schema);
?>

cf. http://bugs.php.net/bug.php?id=46978


RelaxNG スキーマを含むデータを設定する

  • ≪ XMLReader::setRelaxNGSchema
  • XMLReader::setSchema ≫
  • PHP Manual
  • XMLReader
  • RelaxNG スキーマを含むデータを設定する

XMLReader::setRelaxNGSchemaSource

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::setRelaxNGSchemaSource — RelaxNG スキーマを含むデータを設定する

説明

public XMLReader::setRelaxNGSchemaSource(?string $source): bool

検証の際に使用する RelaxNG スキーマを含むデータを設定します。

パラメータ

source

RelaxNG スキーマを含む文字列。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XMLReader::setRelaxNGSchema() - RelaxNG スキーマのファイル名あるいは URI を設定する
  • XMLReader::setSchema() - ドキュメントを XSD で検証する
  • XMLReader::isValid() - パースしているドキュメントの妥当性を示す

User Contributed Notes

remy dot damour at laposte dot net 30-Dec-2008 04:43
If you get the following warning message when calling ->setRelaxNGSchemaSource(): "Warning: XMLReader::setRelaxNGSchemaSource()
[xmlreader.setrelaxngschemasource]: Unable to set schema. This must be
set prior to reading or schema contains errors."

Make sure to load data using XMLReader::open() or XMLReader::xml() prior to calling XMLReader::setRelaxNGSchemaSource().

Cf. comment on XMLReader::setRelaxNGSchema for more details.
anzenews at volja dot net 21-Jan-2008 12:18
This function and setRelaxNGSchema() seem picky about when they are called - right after the call to open(). For example:

<?php
  $schema="/path/to/schema.rng";
  $xmlfile="/path/to/xml.xml";

  $xml = new XMLReader();
  $xml->open($xmlfile);
  $xml->setRelaxNGSchemaSource(file_get_contents($schema));

  while ($xml->read()) {
   // ...
  }

  $xml->close();
?>


ドキュメントを XSD で検証する

  • ≪ XMLReader::setRelaxNGSchemaSource
  • XMLReader::XML ≫
  • PHP Manual
  • XMLReader
  • ドキュメントを XSD で検証する

XMLReader::setSchema

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

XMLReader::setSchema — ドキュメントを XSD で検証する

説明

public XMLReader::setSchema(?string $filename): bool

W3C XSD スキーマを用いて、処理中のドキュメントを検証します。 最初の Read() の前にのみ実行可能です。

パラメータ

filename

XSD スキーマファイル名。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

libxml がスキーマのサポートなしでビルドされていた場合、 スキーマにエラーが存在する場合、 あるいは既に XMLReader::read() がコールされた後である場合に E_WARNING を発行します。

注意

警告

この関数は、PHP を libxml 20620 以降と組み合わせてコンパイルした場合にのみ使用可能です。

参考

  • XMLReader::setRelaxNGSchema() - RelaxNG スキーマのファイル名あるいは URI を設定する
  • XMLReader::setRelaxNGSchemaSource() - RelaxNG スキーマを含むデータを設定する
  • XMLReader::isValid() - パースしているドキュメントの妥当性を示す

User Contributed Notes

There are no user contributed notes for this page.


パースする XML を含むデータを設定する

  • ≪ XMLReader::setSchema
  • XMLWriter ≫
  • PHP Manual
  • XMLReader
  • パースする XML を含むデータを設定する

XMLReader::XML

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::XML — パースする XML を含むデータを設定する

説明

public static XMLReader::XML(string $source, ?string $encoding = null, int $flags = 0): XMLReader
public XMLReader::XML(string $source, ?string $encoding = null, int $flags = 0): bool

パースする XML を含むデータを設定します。

パラメータ

source

パースされる XML を含む文字列。

encoding

ドキュメントのエンコーディングあるいは null。

flags

LIBXML_* 定数のビットマスク。

戻り値

成功した場合に true を、失敗した場合に false を返します。 staticメソッドとしてコールされた場合には XMLReader を返します。 失敗した場合に false を返します

エラー / 例外

このメソッドは、staticメソッドとしてコールすることが出来ます。 しかし、PHP 8.0.0 より前のバージョンでは、 staticメソッドとしてコールすると E_DEPRECATED が発生していました。

変更履歴

バージョン | 説明
8.0.0 | XMLReader::XML() は、staticメソッドとして宣言されるようになりました。 しかし、XMLReader のインスタンス経由でも呼び出すことができます。

参考

  • XMLReader::open() - パースする XML を含む URI を設定する
  • XMLReader::close() - XMLReader の入力を閉じる

User Contributed Notes

There are no user contributed notes for this page.


XMLWriter

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
    • リソース型
  • 例
    • 単純な XML ドキュメントの作成
    • XML 名前空間の使用
    • オブジェクト指向 API の使用
  • XMLWriter — XMLWriter クラス
    • XMLWriter::endAttribute — 属性を終了する
    • XMLWriter::endCdata — 現在の CDATA を終了する
    • XMLWriter::endComment — コメントの終了部を作成する
    • XMLWriter::endDocument — 現在のドキュメントを終了する
    • XMLWriter::endDtd — 現在の DTD を終了する
    • XMLWriter::endDtdAttlist — 現在の DTD 属性リストを終了する
    • XMLWriter::endDtdElement — 現在の DTD 要素を終了する
    • XMLWriter::endDtdEntity — 現在の DTD エンティティを終了する
    • XMLWriter::endElement — 現在の要素を終了する
    • XMLWriter::endPi — 現在の PI (処理命令) を終了する
    • XMLWriter::flush — 現在のバッファをフラッシュする
    • XMLWriter::fullEndElement — 現在の要素を終了する
    • XMLWriter::openMemory — 文字列の出力にメモリを使用する新しい xmlwriter を作成する
    • XMLWriter::openUri — ソース URI を指定して新しい xmlwriter を作成する
    • XMLWriter::outputMemory — 現在のバッファを返す
    • XMLWriter::setIndent — 字下げの on/off を切り替える
    • XMLWriter::setIndentString — 字下げに使用する文字列を設定する
    • XMLWriter::startAttribute — 属性を開始する
    • XMLWriter::startAttributeNs — 名前空間つきの属性を開始する
    • XMLWriter::startCdata — CDATA の開始タグを作成する
    • XMLWriter::startComment — コメントを開始する
    • XMLWriter::startDocument — ドキュメントタグを作成する
    • XMLWriter::startDtd — DTD の開始タグを作成する
    • XMLWriter::startDtdAttlist — DTD 属性リストを開始する
    • XMLWriter::startDtdElement — DTD 要素を開始する
    • XMLWriter::startDtdEntity — DTD エンティティを開始する
    • XMLWriter::startElement — 要素の開始タグを作成する
    • XMLWriter::startElementNs — 名前空間つき要素の開始タグを作成する
    • XMLWriter::startPi — PI (処理命令) の開始タグを作成する
    • XMLWriter::text — テキストを書き込む
    • XMLWriter::writeAttribute — 属性全体を書き込む
    • XMLWriter::writeAttributeNs — 名前空間つき属性全体を書き込む
    • XMLWriter::writeCdata — CDATA タグ全体を書き込む
    • XMLWriter::writeComment — コメントタグ全体を書き込む
    • XMLWriter::writeDtd — DTD タグ全体を書き込む
    • XMLWriter::writeDtdAttlist — DTD 属性リストタグ全体を書き込む
    • XMLWriter::writeDtdElement — DTD 要素タグ全体を書き込む
    • XMLWriter::writeDtdEntity — DTD エンティティタグ全体を書き込む
    • XMLWriter::writeElement — 要素タグ全体を書き込む
    • XMLWriter::writeElementNs — 名前空間つき要素タグ全体を書き込む
    • XMLWriter::writePi — PI (処理命令) 書き込む
    • XMLWriter::writeRaw — 生の XML テキストを書き込む

User Contributed Notes

lingtalfi 08-Oct-2015 08:35
The single quote predefined entity is not escaped.
The other predefined entities are but not the single quote, so you will have to do it yourself.

That's what you would expect:

Ampersand     &     &amp;
Single Quote     '     &apos;
Double Quote     "     &quot;
Greater Than     >     &gt;
Less Than     <     &lt;

That's what you get with \XmlWriter:

Ampersand     &     &amp;
Single Quote     '     '
Double Quote     "     &quot;
Greater Than     >     &gt;
Less Than     <     &lt;
Alexey Zakhlestin 09-Jun-2008 03:47
important: XMLWriter expects UTF-8 data from you. It can output xml in various encodings, but input should be strictly utf-8!


はじめに

これは、XMLWriter 拡張モジュールです。 libxml の xmlWriter API をラップしています。

この拡張モジュールは、キャッシュ処理をしない前進のみのライターで、 XML データを含むストリームあるいはファイルを作成します。

この拡張モジュールは、オブジェクト指向形式と手続き型のどちらでも使用可能です。 全メソッドについて、その両方のコール方法を説明しています。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

XMLWriter 拡張モジュールは、PHP にバンドルされています。 この拡張モジュールはデフォルトで有効になっています。無効にしたい場合は、次のオプションを指定してコンパイルします。 --disable-xmlwriter

User Contributed Notes

There are no user contributed notes for this page.


リソース型

PHP 8.0.0 より前のバージョンでは、手続き型の XMLWriter 拡張モジュールでは、 一種類のリソースを使用していました。 これは、xmlwriter_open_memory() あるいは xmlwriter_open_uri() が返すものです。

User Contributed Notes

There are no user contributed notes for this page.


例

目次

  • 単純な XML ドキュメントの作成
  • XML 名前空間の使用
  • オブジェクト指向 API の使用

User Contributed Notes

There are no user contributed notes for this page.


単純な XML ドキュメントの作成

この例では、XMLWriter を使ってメモリ上に XML ドキュメントを作る方法を示します。

例1 単純な XML ドキュメントの作成

<?php

$xw = xmlwriter_open_memory();
xmlwriter_set_indent($xw, 1);
$res = xmlwriter_set_indent_string($xw, ' ');

xmlwriter_start_document($xw, '1.0', 'UTF-8');

// 最初の要素
xmlwriter_start_element($xw, 'tag1');

// 要素 'tag1' の属性 'att1'
xmlwriter_start_attribute($xw, 'att1');
xmlwriter_text($xw, 'valueofatt1');
xmlwriter_end_attribute($xw);

xmlwriter_write_comment($xw, 'this is a comment.');

// 子要素を開始
xmlwriter_start_element($xw, 'tag11');
xmlwriter_text($xw, 'This is a sample text, a');
xmlwriter_end_element($xw); // tag11

xmlwriter_end_element($xw); // tag1

// CDATA
xmlwriter_start_element($xw, 'testc');
xmlwriter_write_cdata($xw, "This is cdata content");
xmlwriter_end_element($xw); // testc

xmlwriter_start_element($xw, 'testc');
xmlwriter_start_cdata($xw);
xmlwriter_text($xw, "test cdata2");
xmlwriter_end_cdata($xw);
xmlwriter_end_element($xw); // testc

// 処理命令
xmlwriter_start_pi($xw, 'php');
xmlwriter_text($xw, '$foo=2;echo $foo;');
xmlwriter_end_pi($xw);

xmlwriter_end_document($xw);

echo xmlwriter_output_memory($xw);

上の例の出力は以下となります。

<?xml version="1.0" encoding="UTF-8"?>
<tag1 att1="valueofatt1">
 <!--this is a comment.-->
 <tag11>This is a sample text, a</tag11>
</tag1>
<testc><![CDATA[This is cdata content]]></testc>
<testc><![CDATA[test cdata2]]></testc>
<?php $foo=2;echo $foo;?>

User Contributed Notes

There are no user contributed notes for this page.


XML 名前空間の使用

この例では、名前空間を指定した XML 要素を作る方法を示します。

例1 XML 名前空間の使用

<?php

$xw = xmlwriter_open_memory();
xmlwriter_set_indent($xw, 1);
$res = xmlwriter_set_indent_string($xw, ' ');

xmlwriter_start_document($xw, '1.0', 'UTF-8');
// 最初の要素
xmlwriter_start_element_ns($xw,'prefix', 'books', 'uri');
xmlwriter_start_attribute($xw, 'isbn');

xmlwriter_start_attribute_ns($xw, 'prefix', 'isbn', 'uri');
xmlwriter_end_attribute($xw);

xmlwriter_end_attribute($xw);

xmlwriter_text($xw, 'book1');
xmlwriter_end_element($xw);

xmlwriter_end_document($xw);

echo xmlwriter_output_memory($xw);

上の例の出力は以下となります。

<?xml version="1.0" encoding="UTF-8"?>
<prefix:books isbn="" prefix:isbn="" xmlns:prefix="uri">book1</prefix:books>

User Contributed Notes

There are no user contributed notes for this page.


オブジェクト指向 API の使用

この例では、XMLWriter のオブジェクト指向 API を使う方法を示します。

例1 オブジェクト指向 API の使用

<?php

$xw = new XMLWriter();
$xw->openMemory();
$xw->startDocument("1.0");
$xw->startElement("book");
$xw->text("example");
$xw->endElement();
$xw->endDocument();
echo $xw->outputMemory();

上の例の出力は以下となります。

<?xml version="1.0"?>
<book>example</book>

User Contributed Notes

There are no user contributed notes for this page.


XMLWriter クラス

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

はじめに

クラス概要

class XMLWriter {
/* メソッド */
public endAttribute(): bool
public endCdata(): bool
public endComment(): bool
public endDocument(): bool
public endDtd(): bool
public endDtdAttlist(): bool
public endDtdElement(): bool
public endDtdEntity(): bool
public endElement(): bool
public endPi(): bool
public flush(bool $empty = true): string|int
public fullEndElement(): bool
public openMemory(): bool
public openUri(string $uri): bool
public outputMemory(bool $flush = true): string
public setIndent(bool $enable): bool
public setIndentString(string $indentation): bool
public startAttribute(string $name): bool
public startAttributeNs(?string $prefix, string $name, ?string $namespace): bool
public startCdata(): bool
public startComment(): bool
public startDocument(?string $version = "1.0", ?string $encoding = null, ?string $standalone = null): bool
public startDtd(string $qualifiedName, ?string $publicId = null, ?string $systemId = null): bool
public startDtdAttlist(string $name): bool
public startDtdElement(string $qualifiedName): bool
public startDtdEntity(string $name, bool $isParam): bool
public startElement(string $name): bool
public startElementNs(?string $prefix, string $name, ?string $namespace): bool
public startPi(string $target): bool
public text(string $content): bool
public writeAttribute(string $name, string $value): bool
public writeAttributeNs(
?string $prefix,
string $name,
?string $namespace,
string $value
): bool
public writeCdata(string $content): bool
public writeComment(string $content): bool
public writeDtd(
string $name,
?string $publicId = null,
?string $systemId = null,
?string $content = null
): bool
public writeDtdAttlist(string $name, string $content): bool
public writeDtdElement(string $name, string $content): bool
public writeDtdEntity(
string $name,
string $content,
bool $isParam = false,
?string $publicId = null,
?string $systemId = null,
?string $notationData = null
): bool
public writeElement(string $name, ?string $content = null): bool
public writeElementNs(
?string $prefix,
string $name,
?string $namespace,
?string $content = null
): bool
public writePi(string $target, string $content): bool
public writeRaw(string $content): bool
}

目次

  • XMLWriter::endAttribute — 属性を終了する
  • XMLWriter::endCdata — 現在の CDATA を終了する
  • XMLWriter::endComment — コメントの終了部を作成する
  • XMLWriter::endDocument — 現在のドキュメントを終了する
  • XMLWriter::endDtd — 現在の DTD を終了する
  • XMLWriter::endDtdAttlist — 現在の DTD 属性リストを終了する
  • XMLWriter::endDtdElement — 現在の DTD 要素を終了する
  • XMLWriter::endDtdEntity — 現在の DTD エンティティを終了する
  • XMLWriter::endElement — 現在の要素を終了する
  • XMLWriter::endPi — 現在の PI (処理命令) を終了する
  • XMLWriter::flush — 現在のバッファをフラッシュする
  • XMLWriter::fullEndElement — 現在の要素を終了する
  • XMLWriter::openMemory — 文字列の出力にメモリを使用する新しい xmlwriter を作成する
  • XMLWriter::openUri — ソース URI を指定して新しい xmlwriter を作成する
  • XMLWriter::outputMemory — 現在のバッファを返す
  • XMLWriter::setIndent — 字下げの on/off を切り替える
  • XMLWriter::setIndentString — 字下げに使用する文字列を設定する
  • XMLWriter::startAttribute — 属性を開始する
  • XMLWriter::startAttributeNs — 名前空間つきの属性を開始する
  • XMLWriter::startCdata — CDATA の開始タグを作成する
  • XMLWriter::startComment — コメントを開始する
  • XMLWriter::startDocument — ドキュメントタグを作成する
  • XMLWriter::startDtd — DTD の開始タグを作成する
  • XMLWriter::startDtdAttlist — DTD 属性リストを開始する
  • XMLWriter::startDtdElement — DTD 要素を開始する
  • XMLWriter::startDtdEntity — DTD エンティティを開始する
  • XMLWriter::startElement — 要素の開始タグを作成する
  • XMLWriter::startElementNs — 名前空間つき要素の開始タグを作成する
  • XMLWriter::startPi — PI (処理命令) の開始タグを作成する
  • XMLWriter::text — テキストを書き込む
  • XMLWriter::writeAttribute — 属性全体を書き込む
  • XMLWriter::writeAttributeNs — 名前空間つき属性全体を書き込む
  • XMLWriter::writeCdata — CDATA タグ全体を書き込む
  • XMLWriter::writeComment — コメントタグ全体を書き込む
  • XMLWriter::writeDtd — DTD タグ全体を書き込む
  • XMLWriter::writeDtdAttlist — DTD 属性リストタグ全体を書き込む
  • XMLWriter::writeDtdElement — DTD 要素タグ全体を書き込む
  • XMLWriter::writeDtdEntity — DTD エンティティタグ全体を書き込む
  • XMLWriter::writeElement — 要素タグ全体を書き込む
  • XMLWriter::writeElementNs — 名前空間つき要素タグ全体を書き込む
  • XMLWriter::writePi — PI (処理命令) 書き込む
  • XMLWriter::writeRaw — 生の XML テキストを書き込む

User Contributed Notes

There are no user contributed notes for this page.


属性を終了する

  • ≪ XMLWriter
  • XMLWriter::endCdata ≫
  • PHP Manual
  • XMLWriter
  • 属性を終了する

XMLWriter::endAttribute

xmlwriter_end_attribute

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endAttribute -- xmlwriter_end_attribute — 属性を終了する

説明

オブジェクト指向型

public XMLWriter::endAttribute(): bool

手続き型

xmlwriter_end_attribute(XMLWriter $writer): bool

現在の属性を終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startAttribute() - 属性を開始する
  • XMLWriter::startAttributeNs() - 名前空間つきの属性を開始する
  • XMLWriter::writeAttribute() - 属性全体を書き込む
  • XMLWriter::writeAttributeNs() - 名前空間つき属性全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在の CDATA を終了する

  • ≪ XMLWriter::endAttribute
  • XMLWriter::endComment ≫
  • PHP Manual
  • XMLWriter
  • 現在の CDATA を終了する

XMLWriter::endCdata

xmlwriter_end_cdata

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endCdata -- xmlwriter_end_cdata — 現在の CDATA を終了する

説明

オブジェクト指向型

public XMLWriter::endCdata(): bool

手続き型

xmlwriter_end_cdata(XMLWriter $writer): bool

現在の CDATA セクションを終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startCdata() - CDATA の開始タグを作成する
  • XMLWriter::writeCdata() - CDATA タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


コメントの終了部を作成する

  • ≪ XMLWriter::endCdata
  • XMLWriter::endDocument ≫
  • PHP Manual
  • XMLWriter
  • コメントの終了部を作成する

XMLWriter::endComment

xmlwriter_end_comment

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 1.0.0)

XMLWriter::endComment -- xmlwriter_end_comment — コメントの終了部を作成する

説明

オブジェクト指向型

public XMLWriter::endComment(): bool

手続き型

xmlwriter_end_comment(XMLWriter $writer): bool

現在のコメントを終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startComment() - コメントを開始する
  • XMLWriter::writeComment() - コメントタグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在のドキュメントを終了する

  • ≪ XMLWriter::endComment
  • XMLWriter::endDtd ≫
  • PHP Manual
  • XMLWriter
  • 現在のドキュメントを終了する

XMLWriter::endDocument

xmlwriter_end_document

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endDocument -- xmlwriter_end_document — 現在のドキュメントを終了する

説明

オブジェクト指向型

public XMLWriter::endDocument(): bool

手続き型

xmlwriter_end_document(XMLWriter $writer): bool

現在のドキュメントを終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDocument() - ドキュメントタグを作成する

User Contributed Notes

Sbastien 13-Mar-2022 09:44
XMLWriter::endDocument() closes properly all remaining elements not yet closed.

Without XMLWriter::endDocument() :

<?php
$xml = new XMLWriter();
$xml->openUri('php://stdout');
$xml->startDocument();
$xml->startElement('a');
$xml->startElement('b');
$xml->startElement('c');
$xml->startAttribute('foo');
exit;

/*
Outputs :
<?xml version="1.0"?>
<a><b><c foo="
*/
?>

With XMLWriter::endDocument() :

<?php
$xml = new XMLWriter();
$xml->openUri('php://stdout');
$xml->startDocument();
$xml->startElement('a');
$xml->startElement('b');
$xml->startElement('c');
$xml->startAttribute('foo');
$xml->endDocument();
exit;

/*
Outputs :
<?xml version="1.0"?>
<a><b><c foo=""/></b></a>
*/
?>


現在の DTD を終了する

  • ≪ XMLWriter::endDocument
  • XMLWriter::endDtdAttlist ≫
  • PHP Manual
  • XMLWriter
  • 現在の DTD を終了する

XMLWriter::endDtd

xmlwriter_end_dtd

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endDtd -- xmlwriter_end_dtd — 現在の DTD を終了する

説明

オブジェクト指向型

public XMLWriter::endDtd(): bool

手続き型

xmlwriter_end_dtd(XMLWriter $writer): bool

ドキュメントの DTD を終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDtd() - DTD の開始タグを作成する
  • XMLWriter::writeDtd() - DTD タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在の DTD 属性リストを終了する

  • ≪ XMLWriter::endDtd
  • XMLWriter::endDtdElement ≫
  • PHP Manual
  • XMLWriter
  • 現在の DTD 属性リストを終了する

XMLWriter::endDtdAttlist

xmlwriter_end_dtd_attlist

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endDtdAttlist -- xmlwriter_end_dtd_attlist — 現在の DTD 属性リストを終了する

説明

オブジェクト指向型

public XMLWriter::endDtdAttlist(): bool

手続き型

xmlwriter_end_dtd_attlist(XMLWriter $writer): bool

現在の DTD 属性リストを終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDtdAttlist() - DTD 属性リストを開始する
  • XMLWriter::writeDtdAttlist() - DTD 属性リストタグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在の DTD 要素を終了する

  • ≪ XMLWriter::endDtdAttlist
  • XMLWriter::endDtdEntity ≫
  • PHP Manual
  • XMLWriter
  • 現在の DTD 要素を終了する

XMLWriter::endDtdElement

xmlwriter_end_dtd_element

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endDtdElement -- xmlwriter_end_dtd_element — 現在の DTD 要素を終了する

説明

オブジェクト指向型

public XMLWriter::endDtdElement(): bool

手続き型

xmlwriter_end_dtd_element(XMLWriter $writer): bool

現在の DTD 要素を終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDtdElement() - DTD 要素を開始する
  • XMLWriter::writeDtdElement() - DTD 要素タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在の DTD エンティティを終了する

  • ≪ XMLWriter::endDtdElement
  • XMLWriter::endElement ≫
  • PHP Manual
  • XMLWriter
  • 現在の DTD エンティティを終了する

XMLWriter::endDtdEntity

xmlwriter_end_dtd_entity

(PHP 5 >= 5.2.1, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endDtdEntity -- xmlwriter_end_dtd_entity — 現在の DTD エンティティを終了する

説明

オブジェクト指向型

public XMLWriter::endDtdEntity(): bool

手続き型

xmlwriter_end_dtd_entity(XMLWriter $writer): bool

現在の DTD エンティティを終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDtdEntity() - DTD エンティティを開始する
  • XMLWriter::writeDtdEntity() - DTD エンティティタグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在の要素を終了する

  • ≪ XMLWriter::endDtdEntity
  • XMLWriter::endPi ≫
  • PHP Manual
  • XMLWriter
  • 現在の要素を終了する

XMLWriter::endElement

xmlwriter_end_element

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endElement -- xmlwriter_end_element — 現在の要素を終了する

説明

オブジェクト指向型

public XMLWriter::endElement(): bool

手続き型

xmlwriter_end_element(XMLWriter $writer): bool

現在の要素を終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startElement() - 要素の開始タグを作成する
  • XMLWriter::writeElement() - 要素タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在の PI (処理命令) を終了する

  • ≪ XMLWriter::endElement
  • XMLWriter::flush ≫
  • PHP Manual
  • XMLWriter
  • 現在の PI (処理命令) を終了する

XMLWriter::endPi

xmlwriter_end_pi

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::endPi -- xmlwriter_end_pi — 現在の PI (処理命令) を終了する

説明

オブジェクト指向型

public XMLWriter::endPi(): bool

手続き型

xmlwriter_end_pi(XMLWriter $writer): bool

現在の処理命令を終了します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startPi() - PI (処理命令) の開始タグを作成する
  • XMLWriter::writePi() - PI (処理命令) 書き込む

User Contributed Notes

There are no user contributed notes for this page.


現在のバッファをフラッシュする

  • ≪ XMLWriter::endPi
  • XMLWriter::fullEndElement ≫
  • PHP Manual
  • XMLWriter
  • 現在のバッファをフラッシュする

XMLWriter::flush

xmlwriter_flush

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 1.0.0)

XMLWriter::flush -- xmlwriter_flush — 現在のバッファをフラッシュする

説明

オブジェクト指向型

public XMLWriter::flush(bool $empty = true): string|int

手続き型

xmlwriter_flush(XMLWriter $writer, bool $empty = true): string|int

現在のバッファをフラッシュします。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

empty

バッファを空にするかどうか。デフォルトは true です。

戻り値

ライターをメモリにオープンした場合は、この関数は出来上がった XML バッファを返します。 そうではなく URI を使用している場合は、この関数はバッファを書き込み、 書き込んだバイト数を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。
8.0.0 | この関数は、false を返さなくなりました。

User Contributed Notes

Sbastien 13-Mar-2022 09:29
XMLWriter::flush() basic usage with XMLWriter::openMemory() :

<?php
$xml = new XMLWriter();
$xml->openMemory();
$xml->startDocument();
$xml->writeElement('message', 'Hello World!');
$xml->endDocument();
echo $xml->flush();

/*
Produces :

<?xml version="1.0"?>
<message>Hello World!</message>
*/
?>


現在の要素を終了する

  • ≪ XMLWriter::flush
  • XMLWriter::openMemory ≫
  • PHP Manual
  • XMLWriter
  • 現在の要素を終了する

XMLWriter::fullEndElement

xmlwriter_full_end_element

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL xmlwriter >= 2.0.4)

XMLWriter::fullEndElement -- xmlwriter_full_end_element — 現在の要素を終了する

説明

オブジェクト指向型

public XMLWriter::fullEndElement(): bool

手続き型

xmlwriter_full_end_element(XMLWriter $writer): bool

現在の xml 要素を終了します。要素が空であっても終了タグを書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endElement() - 現在の要素を終了する

User Contributed Notes

There are no user contributed notes for this page.


文字列の出力にメモリを使用する新しい xmlwriter を作成する

  • ≪ XMLWriter::fullEndElement
  • XMLWriter::openUri ≫
  • PHP Manual
  • XMLWriter
  • 文字列の出力にメモリを使用する新しい xmlwriter を作成する

XMLWriter::openMemory

xmlwriter_open_memory

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::openMemory -- xmlwriter_open_memory — 文字列の出力にメモリを使用する新しい xmlwriter を作成する

説明

オブジェクト指向型

public XMLWriter::openMemory(): bool

手続き型

xmlwriter_open_memory(): XMLWriter|false

文字列の出力にメモリを使用する新しい XMLWriter を作成します。

パラメータ

戻り値

オブジェクト指向型: 成功した場合に true を、失敗した場合に false を返します。

手続き型: 成功した場合に、その後の xmlwriter 関数で使用するための新しい XMLWriter のインスタンスを返します。 失敗した場合に false を返します

変更履歴

バージョン | 説明
8.0.0 | この関数は、成功した時に XMLWriter のインスタンスを返すようになりました。 これより前のバージョンでは、リソースが返されていました。

参考

  • XMLWriter::openUri() - ソース URI を指定して新しい xmlwriter を作成する

User Contributed Notes

There are no user contributed notes for this page.


ソース URI を指定して新しい xmlwriter を作成する

  • ≪ XMLWriter::openMemory
  • XMLWriter::outputMemory ≫
  • PHP Manual
  • XMLWriter
  • ソース URI を指定して新しい xmlwriter を作成する

XMLWriter::openUri

xmlwriter_open_uri

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::openUri -- xmlwriter_open_uri — ソース URI を指定して新しい xmlwriter を作成する

説明

オブジェクト指向型

public XMLWriter::openUri(string $uri): bool

手続き型

xmlwriter_open_uri(string $uri): XMLWriter|false

uri を指定した新しい XMLWriter を作成します。

パラメータ

uri

出力するリソースの URI。

戻り値

オブジェクト指向型: 成功した場合に true を、失敗した場合に false を返します。

手続き型: 成功した場合に、その後の xmlwriter 関数で使用するための新しい XMLWriter のインスタンスを返します。 失敗した場合に false を返します

変更履歴

バージョン | 説明
8.0.0 | この関数は、成功時に XMLWriter のインスタンスを返すようになりました。 これより前のバージョンでは、リソースが返されていました。

例

例1 XML を直接出力する

php://output ストリームラッパー を使えば、直接XMLを出力することが出来ます。

<?php
$out =new XMLWriter();
$out->openURI('php://output');
?>

注意

注意:

Windows では、この関数を使って開いたファイルは writer が解放されるまでロックされます。

参考

  • XMLWriter::openMemory() - 文字列の出力にメモリを使用する新しい xmlwriter を作成する

User Contributed Notes

There are no user contributed notes for this page.


現在のバッファを返す

  • ≪ XMLWriter::openUri
  • XMLWriter::setIndent ≫
  • PHP Manual
  • XMLWriter
  • 現在のバッファを返す

XMLWriter::outputMemory

xmlwriter_output_memory

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::outputMemory -- xmlwriter_output_memory — 現在のバッファを返す

説明

オブジェクト指向型

public XMLWriter::outputMemory(bool $flush = true): string

手続き型

xmlwriter_output_memory(XMLWriter $writer, bool $flush = true): string

現在のバッファを返します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

flush

出力バッファをフラッシュするかどうか。デフォルトは true。

戻り値

現在のバッファを文字列で返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::flush() - 現在のバッファをフラッシュする

User Contributed Notes

There are no user contributed notes for this page.


字下げの on/off を切り替える

  • ≪ XMLWriter::outputMemory
  • XMLWriter::setIndentString ≫
  • PHP Manual
  • XMLWriter
  • 字下げの on/off を切り替える

XMLWriter::setIndent

xmlwriter_set_indent

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::setIndent -- xmlwriter_set_indent — 字下げの on/off を切り替える

説明

オブジェクト指向型

public XMLWriter::setIndent(bool $enable): bool

手続き型

xmlwriter_set_indent(XMLWriter $writer, bool $enable): bool

字下げの on/off を切り替えます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

enable

字下げを有効にするかどうか。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

例

例1 XMLWriter::setIndent() と mixed content

mixed content では字下げを有効にしてもうまく動きません。 字下げされた文字列は、インライン要素の前に挿入されるからです。

<?php
$writer = new XMLWriter();
$writer->openMemory();
$writer->setIndent(2);
$writer->startDocument();
$writer->startElement('p');
$writer->text('before');
$writer->writeElement('a', 'element');
$writer->text('after');
$writer->endElement();
$writer->endDocument();
echo $writer->outputMemory();
?>

上の例の出力は以下となります。

<?xml version="1.0"?>
<p>before <a>element</a>
after</p>

注意

注意:

xmlwriter がオープンされた時に、字下げの状態はリセットされます。

参考

  • XMLWriter::setIndentString() - 字下げに使用する文字列を設定する

User Contributed Notes

info at ensostudio dot ru 04-Apr-2021 01:04
NOTE: $enable can be integer as in example, or boolean.


字下げに使用する文字列を設定する

  • ≪ XMLWriter::setIndent
  • XMLWriter::startAttribute ≫
  • PHP Manual
  • XMLWriter
  • 字下げに使用する文字列を設定する

XMLWriter::setIndentString

xmlwriter_set_indent_string

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::setIndentString -- xmlwriter_set_indent_string — 字下げに使用する文字列を設定する

説明

オブジェクト指向型

public XMLWriter::setIndentString(string $indentation): bool

手続き型

xmlwriter_set_indent_string(XMLWriter $writer, string $indentation): bool

文字列を設定します。この文字を使用して、結果の xml の要素/属性 を字下げします。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

indentation

字下げ用の文字列。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

注意

注意:

xmlwriter がオープンされた時に、字下げの状態はリセットされます。

参考

  • XMLWriter::setIndent() - 字下げの on/off を切り替える

User Contributed Notes

There are no user contributed notes for this page.


属性を開始する

  • ≪ XMLWriter::setIndentString
  • XMLWriter::startAttributeNs ≫
  • PHP Manual
  • XMLWriter
  • 属性を開始する

XMLWriter::startAttribute

xmlwriter_start_attribute

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startAttribute -- xmlwriter_start_attribute — 属性を開始する

説明

オブジェクト指向型

public XMLWriter::startAttribute(string $name): bool

手続き型

xmlwriter_start_attribute(XMLWriter $writer, string $name): bool

属性を開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

属性の名前。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

例

例1 XMLWriter::startAttribute() の基本的な使い方

<?php
$writer = new XMLWriter;
$writer->openURI('php://output');
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('element');
$writer->startAttribute('attribute');
$writer->text('value');
$writer->endAttribute();
$writer->endElement();
$writer->endDocument();

上の例の出力は、 たとえば以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<element attribute="value"/>

参考

  • XMLWriter::startAttributeNs() - 名前空間つきの属性を開始する
  • XMLWriter::endAttribute() - 属性を終了する
  • XMLWriter::writeAttribute() - 属性全体を書き込む
  • XMLWriter::writeAttributeNs() - 名前空間つき属性全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


名前空間つきの属性を開始する

  • ≪ XMLWriter::startAttribute
  • XMLWriter::startCdata ≫
  • PHP Manual
  • XMLWriter
  • 名前空間つきの属性を開始する

XMLWriter::startAttributeNs

xmlwriter_start_attribute_ns

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startAttributeNs -- xmlwriter_start_attribute_ns — 名前空間つきの属性を開始する

説明

オブジェクト指向型

public XMLWriter::startAttributeNs(?string $prefix, string $name, ?string $namespace): bool

手続き型

xmlwriter_start_attribute_ns(
XMLWriter $writer,
?string $prefix,
string $name,
?string $namespace
): bool

名前空間つきの属性を開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

prefix

名前空間プレフィックス。

name

属性の名前。

namespace

名前空間 URI。 namespace が null の場合、名前空間の宣言は省略されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。
8.0.0 | prefix is nullable now.

参考

  • XMLWriter::startAttribute() - 属性を開始する
  • XMLWriter::endAttribute() - 属性を終了する
  • XMLWriter::writeAttribute() - 属性全体を書き込む
  • XMLWriter::writeAttributeNs() - 名前空間つき属性全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


CDATA の開始タグを作成する

  • ≪ XMLWriter::startAttributeNs
  • XMLWriter::startComment ≫
  • PHP Manual
  • XMLWriter
  • CDATA の開始タグを作成する

XMLWriter::startCdata

xmlwriter_start_cdata

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startCdata -- xmlwriter_start_cdata — CDATA の開始タグを作成する

説明

オブジェクト指向型

public XMLWriter::startCdata(): bool

手続き型

xmlwriter_start_cdata(XMLWriter $writer): bool

CDATA を開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endCdata() - 現在の CDATA を終了する
  • XMLWriter::writeCdata() - CDATA タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


コメントを開始する

  • ≪ XMLWriter::startCdata
  • XMLWriter::startDocument ≫
  • PHP Manual
  • XMLWriter
  • コメントを開始する

XMLWriter::startComment

xmlwriter_start_comment

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 1.0.0)

XMLWriter::startComment -- xmlwriter_start_comment — コメントを開始する

説明

オブジェクト指向型

public XMLWriter::startComment(): bool

手続き型

xmlwriter_start_comment(XMLWriter $writer): bool

コメントを開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endComment() - コメントの終了部を作成する
  • XMLWriter::writeComment() - コメントタグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


ドキュメントタグを作成する

  • ≪ XMLWriter::startComment
  • XMLWriter::startDtd ≫
  • PHP Manual
  • XMLWriter
  • ドキュメントタグを作成する

XMLWriter::startDocument

xmlwriter_start_document

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startDocument -- xmlwriter_start_document — ドキュメントタグを作成する

説明

オブジェクト指向型

public XMLWriter::startDocument(?string $version = "1.0", ?string $encoding = null, ?string $standalone = null): bool

手続き型

xmlwriter_start_document(
XMLWriter $writer,
?string $version = "1.0",
?string $encoding = null,
?string $standalone = null
): bool

ドキュメントを開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

version

XML 宣言で使用するドキュメントのバージョン番号。

encoding

XML 宣言で使用するドキュメントのエンコーディング。

standalone

yes あるいは no。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endDocument() - 現在のドキュメントを終了する

User Contributed Notes

Sbastien 13-Mar-2022 09:52
XMLWriter::startDocument() writes the XML declaration.

Without XMLWriter::startDocument() :

<?php

$xml = new XMLWriter();
$xml->openUri('php://stdout');
$xml->writeElement('message', 'Hello World!');
exit;

/*
Outputs :
<message>Hello World!</message>
*/
?>

With XMLWriter::startDocument() :

<?php

$xml = new XMLWriter();
$xml->openUri('php://stdout');
$xml->startDocument();
$xml->writeElement('message', 'Hello World!');
exit;

/*
Outputs :
<?xml version="1.0"?>
<message>Hello World!</message>
*/
?>


DTD の開始タグを作成する

  • ≪ XMLWriter::startDocument
  • XMLWriter::startDtdAttlist ≫
  • PHP Manual
  • XMLWriter
  • DTD の開始タグを作成する

XMLWriter::startDtd

xmlwriter_start_dtd

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startDtd -- xmlwriter_start_dtd — DTD の開始タグを作成する

説明

オブジェクト指向型

public XMLWriter::startDtd(string $qualifiedName, ?string $publicId = null, ?string $systemId = null): bool

手続き型

xmlwriter_start_dtd(
XMLWriter $writer,
string $qualifiedName,
?string $publicId = null,
?string $systemId = null
): bool

DTD を開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

qualifiedName

作成するドキュメント型の修飾名。

publicId

外部サブセットの公開識別子。

systemId

外部サブセットのシステム識別子。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endDtd() - 現在の DTD を終了する
  • XMLWriter::writeDtd() - DTD タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


DTD 属性リストを開始する

  • ≪ XMLWriter::startDtd
  • XMLWriter::startDtdElement ≫
  • PHP Manual
  • XMLWriter
  • DTD 属性リストを開始する

XMLWriter::startDtdAttlist

xmlwriter_start_dtd_attlist

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startDtdAttlist -- xmlwriter_start_dtd_attlist — DTD 属性リストを開始する

説明

オブジェクト指向型

public XMLWriter::startDtdAttlist(string $name): bool

手続き型

xmlwriter_start_dtd_attlist(XMLWriter $writer, string $name): bool

DTD 属性リストを開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

属性リストの名前。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endDtdAttlist() - 現在の DTD 属性リストを終了する
  • XMLWriter::writeDtdAttlist() - DTD 属性リストタグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


DTD 要素を開始する

  • ≪ XMLWriter::startDtdAttlist
  • XMLWriter::startDtdEntity ≫
  • PHP Manual
  • XMLWriter
  • DTD 要素を開始する

XMLWriter::startDtdElement

xmlwriter_start_dtd_element

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startDtdElement -- xmlwriter_start_dtd_element — DTD 要素を開始する

説明

オブジェクト指向型

public XMLWriter::startDtdElement(string $qualifiedName): bool

手続き型

xmlwriter_start_dtd_element(XMLWriter $writer, string $qualifiedName): bool

DTD 要素を開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

qualifiedName

作成するドキュメント型の修飾名。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endDtdElement() - 現在の DTD 要素を終了する
  • XMLWriter::writeDtdElement() - DTD 要素タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


DTD エンティティを開始する

  • ≪ XMLWriter::startDtdElement
  • XMLWriter::startElement ≫
  • PHP Manual
  • XMLWriter
  • DTD エンティティを開始する

XMLWriter::startDtdEntity

xmlwriter_start_dtd_entity

(PHP 5 >= 5.2.1, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startDtdEntity -- xmlwriter_start_dtd_entity — DTD エンティティを開始する

説明

オブジェクト指向型

public XMLWriter::startDtdEntity(string $name, bool $isParam): bool

手続き型

xmlwriter_start_dtd_entity(XMLWriter $writer, string $name, bool $isParam): bool

DTD エンティティを開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

エンティティの名前。

isParam

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endDtdEntity() - 現在の DTD エンティティを終了する
  • XMLWriter::writeDtdEntity() - DTD エンティティタグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


要素の開始タグを作成する

  • ≪ XMLWriter::startDtdEntity
  • XMLWriter::startElementNs ≫
  • PHP Manual
  • XMLWriter
  • 要素の開始タグを作成する

XMLWriter::startElement

xmlwriter_start_element

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startElement -- xmlwriter_start_element — 要素の開始タグを作成する

説明

オブジェクト指向型

public XMLWriter::startElement(string $name): bool

手続き型

xmlwriter_start_element(XMLWriter $writer, string $name): bool

要素を開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

要素名。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endElement() - 現在の要素を終了する
  • XMLWriter::writeElement() - 要素タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


名前空間つき要素の開始タグを作成する

  • ≪ XMLWriter::startElement
  • XMLWriter::startPi ≫
  • PHP Manual
  • XMLWriter
  • 名前空間つき要素の開始タグを作成する

XMLWriter::startElementNs

xmlwriter_start_element_ns

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startElementNs -- xmlwriter_start_element_ns — 名前空間つき要素の開始タグを作成する

説明

オブジェクト指向型

public XMLWriter::startElementNs(?string $prefix, string $name, ?string $namespace): bool

手続き型

xmlwriter_start_element_ns(
XMLWriter $writer,
?string $prefix,
string $name,
?string $namespace
): bool

名前空間つき要素を開始します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

prefix

名前空間プレフィックス。 prefix が null の場合、名前空間は省略されます。

name

要素名。

namespace

名前空間 URI。 namespace が null の場合、名前空間の宣言は省略されます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endElement() - 現在の要素を終了する
  • XMLWriter::writeElementNs() - 名前空間つき要素タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


PI (処理命令) の開始タグを作成する

  • ≪ XMLWriter::startElementNs
  • XMLWriter::text ≫
  • PHP Manual
  • XMLWriter
  • PI (処理命令) の開始タグを作成する

XMLWriter::startPi

xmlwriter_start_pi

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::startPi -- xmlwriter_start_pi — PI (処理命令) の開始タグを作成する

説明

オブジェクト指向型

public XMLWriter::startPi(string $target): bool

手続き型

xmlwriter_start_pi(XMLWriter $writer, string $target): bool

処理命令の開始タグを作成します。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

target

処理命令の対象。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::endPi() - 現在の PI (処理命令) を終了する
  • XMLWriter::writePi() - PI (処理命令) 書き込む

User Contributed Notes

There are no user contributed notes for this page.


テキストを書き込む

  • ≪ XMLWriter::startPi
  • XMLWriter::writeAttribute ≫
  • PHP Manual
  • XMLWriter
  • テキストを書き込む

XMLWriter::text

xmlwriter_text

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::text -- xmlwriter_text — テキストを書き込む

説明

オブジェクト指向型

public XMLWriter::text(string $content): bool

手続き型

xmlwriter_text(XMLWriter $writer, string $content): bool

テキストを書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

content

テキストの内容。 <, >, &, " は、実体参照として書き込みます。 (つまり、 &lt;, &gt;, &amp;, &quot;, をそれぞれ書き込みます)。 それ以外の文字は、' を含めてそのまま書き込みます。 XML で特別な文字や、実体参照をそのまま書き込むには、 xmlwriter_write_raw() を使わなければなりません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

User Contributed Notes

There are no user contributed notes for this page.


属性全体を書き込む

  • ≪ XMLWriter::text
  • XMLWriter::writeAttributeNs ≫
  • PHP Manual
  • XMLWriter
  • 属性全体を書き込む

XMLWriter::writeAttribute

xmlwriter_write_attribute

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeAttribute -- xmlwriter_write_attribute — 属性全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeAttribute(string $name, string $value): bool

手続き型

xmlwriter_write_attribute(XMLWriter $writer, string $name, string $value): bool

属性全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

属性の名前。

value

属性の値。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

例

例1 子要素と属性を混在させる

子要素と属性が混在した場合、最初の子要素より後に属性を書き込もうとしても失敗し、false が返ります。

<?php
$xml = new XMLWriter();
$xml->openMemory();

$xml->startElement('element');
$xml->writeAttribute('attr1', '0');
$xml->writeElement('subelem', '0');
var_dump($xml->writeAttribute('attr2', '0'));
$xml->endElement();

echo $xml->flush();
?>

上の例の出力は以下となります。

bool(false)
<element attr1="0"><subelem>0</subelem></element>

参考

  • XMLWriter::writeAttributeNs() - 名前空間つき属性全体を書き込む
  • XMLWriter::startAttribute() - 属性を開始する
  • XMLWriter::startAttributeNs() - 名前空間つきの属性を開始する
  • XMLWriter::endAttribute() - 属性を終了する

User Contributed Notes

There are no user contributed notes for this page.


名前空間つき属性全体を書き込む

  • ≪ XMLWriter::writeAttribute
  • XMLWriter::writeCdata ≫
  • PHP Manual
  • XMLWriter
  • 名前空間つき属性全体を書き込む

XMLWriter::writeAttributeNs

xmlwriter_write_attribute_ns

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeAttributeNs -- xmlwriter_write_attribute_ns — 名前空間つき属性全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeAttributeNs(
?string $prefix,
string $name,
?string $namespace,
string $value
): bool

手続き型

xmlwriter_write_attribute_ns(
XMLWriter $writer,
?string $prefix,
string $name,
?string $namespace,
string $value
): bool

名前空間つき属性全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

prefix

名前空間プレフィックス。 prefix が null の場合、名前空間は省略されます。

name

属性名。

namespace

名前空間 URI。 namespace が null の場合、名前空間の宣言は省略されます。

value

属性の値。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::writeAttribute() - 属性全体を書き込む
  • XMLWriter::startAttribute() - 属性を開始する
  • XMLWriter::startAttributeNs() - 名前空間つきの属性を開始する
  • XMLWriter::endAttribute() - 属性を終了する

User Contributed Notes

There are no user contributed notes for this page.


CDATA タグ全体を書き込む

  • ≪ XMLWriter::writeAttributeNs
  • XMLWriter::writeComment ≫
  • PHP Manual
  • XMLWriter
  • CDATA タグ全体を書き込む

XMLWriter::writeCdata

xmlwriter_write_cdata

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeCdata -- xmlwriter_write_cdata — CDATA タグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeCdata(string $content): bool

手続き型

xmlwriter_write_cdata(XMLWriter $writer, string $content): bool

CDATA 全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

content

CDATA の内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

例

例1 xmlwriter_write_cdata() の基本的な使い方

<?php
// set up the document
$xml = new XmlWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('mydoc');
$xml->startElement('myele');

// CData output
$xml->startElement('mycdataelement');
$xml->writeCData("text for inclusion as CData");
$xml->endElement();

// end the document and output
$xml->endElement();
$xml->endElement();
echo $xml->outputMemory(true);
?>

上の例の出力は以下となります。

<mydoc>
 <myele>
  <mycdataelement><![CDATA[text for inclusion as CData]?]></mycdataelement>
 </myele>
</mydoc>

参考

  • XMLWriter::startCdata() - CDATA の開始タグを作成する
  • XMLWriter::endCdata() - 現在の CDATA を終了する

User Contributed Notes

There are no user contributed notes for this page.


コメントタグ全体を書き込む

  • ≪ XMLWriter::writeCdata
  • XMLWriter::writeDtd ≫
  • PHP Manual
  • XMLWriter
  • コメントタグ全体を書き込む

XMLWriter::writeComment

xmlwriter_write_comment

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeComment -- xmlwriter_write_comment — コメントタグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeComment(string $content): bool

手続き型

xmlwriter_write_comment(XMLWriter $writer, string $content): bool

コメント全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

content

コメントの内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startComment() - コメントを開始する
  • XMLWriter::endComment() - コメントの終了部を作成する

User Contributed Notes

There are no user contributed notes for this page.


DTD タグ全体を書き込む

  • ≪ XMLWriter::writeComment
  • XMLWriter::writeDtdAttlist ≫
  • PHP Manual
  • XMLWriter
  • DTD タグ全体を書き込む

XMLWriter::writeDtd

xmlwriter_write_dtd

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeDtd -- xmlwriter_write_dtd — DTD タグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeDtd(
string $name,
?string $publicId = null,
?string $systemId = null,
?string $content = null
): bool

手続き型

xmlwriter_write_dtd(
XMLWriter $writer,
string $name,
?string $publicId = null,
?string $systemId = null,
?string $content = null
): bool

DTD 全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

DTD 名。

publicId

外部サブセットの公開識別子。

systemId

外部サブセットのシステム識別子。

content

DTD の内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDtd() - DTD の開始タグを作成する
  • XMLWriter::endDtd() - 現在の DTD を終了する

User Contributed Notes

There are no user contributed notes for this page.


DTD 属性リストタグ全体を書き込む

  • ≪ XMLWriter::writeDtd
  • XMLWriter::writeDtdElement ≫
  • PHP Manual
  • XMLWriter
  • DTD 属性リストタグ全体を書き込む

XMLWriter::writeDtdAttlist

xmlwriter_write_dtd_attlist

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeDtdAttlist -- xmlwriter_write_dtd_attlist — DTD 属性リストタグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeDtdAttlist(string $name, string $content): bool

手続き型

xmlwriter_write_dtd_attlist(XMLWriter $writer, string $name, string $content): bool

DTD 属性リストを書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

DTD 属性リストの名前。

content

DTD 属性リストの内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDtdAttlist() - DTD 属性リストを開始する
  • XMLWriter::endDtdAttlist() - 現在の DTD 属性リストを終了する

User Contributed Notes

There are no user contributed notes for this page.


DTD 要素タグ全体を書き込む

  • ≪ XMLWriter::writeDtdAttlist
  • XMLWriter::writeDtdEntity ≫
  • PHP Manual
  • XMLWriter
  • DTD 要素タグ全体を書き込む

XMLWriter::writeDtdElement

xmlwriter_write_dtd_element

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeDtdElement -- xmlwriter_write_dtd_element — DTD 要素タグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeDtdElement(string $name, string $content): bool

手続き型

xmlwriter_write_dtd_element(XMLWriter $writer, string $name, string $content): bool

DTD 要素全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

DTD 要素の名前。

content

要素の内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startDtdElement() - DTD 要素を開始する
  • XMLWriter::endDtdElement() - 現在の DTD 要素を終了する

User Contributed Notes

There are no user contributed notes for this page.


DTD エンティティタグ全体を書き込む

  • ≪ XMLWriter::writeDtdElement
  • XMLWriter::writeElement ≫
  • PHP Manual
  • XMLWriter
  • DTD エンティティタグ全体を書き込む

XMLWriter::writeDtdEntity

xmlwriter_write_dtd_entity

(PHP 5 >= 5.2.1, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeDtdEntity -- xmlwriter_write_dtd_entity — DTD エンティティタグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeDtdEntity(
string $name,
string $content,
bool $isParam = false,
?string $publicId = null,
?string $systemId = null,
?string $notationData = null
): bool

手続き型

xmlwriter_write_dtd_entity(
XMLWriter $writer,
string $name,
string $content,
bool $isParam = false,
?string $publicId = null,
?string $systemId = null,
?string $notationData = null
): bool

DTD エンティティ全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

エンティティの名前。

content

エンティティの内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。
8.0.0 | publicId, systemId, notationData は、nullable になりました。

参考

  • XMLWriter::startDtdEntity() - DTD エンティティを開始する
  • XMLWriter::endDtdEntity() - 現在の DTD エンティティを終了する

User Contributed Notes

There are no user contributed notes for this page.


要素タグ全体を書き込む

  • ≪ XMLWriter::writeDtdEntity
  • XMLWriter::writeElementNs ≫
  • PHP Manual
  • XMLWriter
  • 要素タグ全体を書き込む

XMLWriter::writeElement

xmlwriter_write_element

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeElement -- xmlwriter_write_element — 要素タグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeElement(string $name, ?string $content = null): bool

手続き型

xmlwriter_write_element(XMLWriter $writer, string $name, ?string $content = null): bool

要素タグ全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

name

要素名。

content

要素の内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startElement() - 要素の開始タグを作成する
  • XMLWriter::endElement() - 現在の要素を終了する
  • XMLWriter::writeElementNs() - 名前空間つき要素タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


名前空間つき要素タグ全体を書き込む

  • ≪ XMLWriter::writeElement
  • XMLWriter::writePi ≫
  • PHP Manual
  • XMLWriter
  • 名前空間つき要素タグ全体を書き込む

XMLWriter::writeElementNs

xmlwriter_write_element_ns

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writeElementNs -- xmlwriter_write_element_ns — 名前空間つき要素タグ全体を書き込む

説明

オブジェクト指向型

public XMLWriter::writeElementNs(
?string $prefix,
string $name,
?string $namespace,
?string $content = null
): bool

手続き型

xmlwriter_write_element_ns(
XMLWriter $writer,
?string $prefix,
string $name,
?string $namespace,
?string $content = null
): bool

名前空間つき要素タグ全体を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

prefix

名前空間プレフィックス。 prefix が null の場合、名前空間は省略されます。

name

要素名。

namespace

名前空間 URI。 namespace が null の場合、名前空間の宣言は省略されます。

content

要素の内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startElementNs() - 名前空間つき要素の開始タグを作成する
  • XMLWriter::endElement() - 現在の要素を終了する
  • XMLWriter::writeElement() - 要素タグ全体を書き込む

User Contributed Notes

There are no user contributed notes for this page.


PI (処理命令) 書き込む

  • ≪ XMLWriter::writeElementNs
  • XMLWriter::writeRaw ≫
  • PHP Manual
  • XMLWriter
  • PI (処理命令) 書き込む

XMLWriter::writePi

xmlwriter_write_pi

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL xmlwriter >= 0.1.0)

XMLWriter::writePi -- xmlwriter_write_pi — PI (処理命令) 書き込む

説明

オブジェクト指向型

public XMLWriter::writePi(string $target, string $content): bool

手続き型

xmlwriter_write_pi(XMLWriter $writer, string $target, string $content): bool

処理命令を書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

target

処理命令の対象。

content

処理命令の内容。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::startPi() - PI (処理命令) の開始タグを作成する
  • XMLWriter::endPi() - 現在の PI (処理命令) を終了する

User Contributed Notes

There are no user contributed notes for this page.


生の XML テキストを書き込む

  • ≪ XMLWriter::writePi
  • XSL ≫
  • PHP Manual
  • XMLWriter
  • 生の XML テキストを書き込む

XMLWriter::writeRaw

xmlwriter_write_raw

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL xmlwriter >= 2.0.4)

XMLWriter::writeRaw -- xmlwriter_write_raw — 生の XML テキストを書き込む

説明

オブジェクト指向型

public XMLWriter::writeRaw(string $content): bool

手続き型

xmlwriter_write_raw(XMLWriter $writer, string $content): bool

生の xml テキストを書き込みます。

パラメータ

writer

手続き型のコールでのみ使用します。 変更される XMLWriter のインスタンスです。 このインスタンスは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() を呼び出すことで取得したものです。

content

書き込むテキスト文字列。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン | 説明
8.0.0 | 引数 writer は、XMLWriter のインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

参考

  • XMLWriter::text() - テキストを書き込む

User Contributed Notes

There are no user contributed notes for this page.


XSL

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
  • 定義済み定数
  • 例
    • collection.xml および collection.xsl ファイルの例
    • libxml のエラー処理関数によるエラー処理
  • XSLTProcessor — XSLTProcessor クラス
    • XSLTProcessor::__construct — 新しい XSLTProcessor オブジェクトを作成する
    • XSLTProcessor::getParameter — パラメータの値を取得する
    • XSLTProcessor::getSecurityPrefs — セキュリティ設定を取得する
    • XSLTProcessor::hasExsltSupport — PHP が EXSLT をサポートしているかどうかを判定する
    • XSLTProcessor::importStylesheet — スタイルシートを取り込む
    • XSLTProcessor::registerPHPFunctions — PHP 関数を XSLT 関数として利用できるようにする
    • XSLTProcessor::removeParameter — パラメータを削除する
    • XSLTProcessor::setParameter — パラメータの値を設定する
    • XSLTProcessor::setProfiling — プロファイル情報の出力ファイルを設定する
    • XSLTProcessor::setSecurityPrefs — セキュリティ設定を指定する
    • XSLTProcessor::transformToDoc — ドキュメント に変換する
    • XSLTProcessor::transformToUri — URI に変換する
    • XSLTProcessor::transformToXml — XML に変換する

User Contributed Notes

Jaroslaw Zabiello 23-Jun-2011 07:10
This is more usefull, no files needed, it just takes XML and XSL strings as input parameters and returns transformed XML

<?php
/**
 * @param  $xml
 * @param  $xsl
 * @return string xml
 */
function transform($xml, $xsl) {
   $xslt = new XSLTProcessor();
   $xslt->importStylesheet(new  SimpleXMLElement($xsl));
   return $xslt->transformToXml(new SimpleXMLElement($xml));
}
?>
sudhir dot vis at gmail dot com 25-Apr-2009 11:40
Here is a simplest way to transform the xml from php

<?php
$sXml  = "<xml>";
$sXml .= "<sudhir>hello sudhir</sudhir>";
$sXml .= "</xml>";

# LOAD XML FILE
$XML = new DOMDocument();
$XML->loadXML( $sXml );

# START XSLT
$xslt = new XSLTProcessor();
$XSL = new DOMDocument();
$XSL->load( 'xsl/index.xsl', LIBXML_NOCDATA);
$xslt->importStylesheet( $XSL );
#PRINT
print $xslt->transformToXML( $XML );
?>
allens at nospam dot com 19-Apr-2009 08:45
Problem:
Getting Netbeans error message:
Fatal error: Class 'xsltprocessor' not found

Solution:
place copy of php.ini in the c:\windows directory!

by default the php.ini file has xsl disabled......search for the line

;extension=php_xsl.dll

to enable XSL....remove ; so that the extension gets included

Then if Netbeans gives you the following message:
PHP Startup: Unable to load dynamic library './php_xsl.dll'

then you need to run the php-5.2.9-1-win32-installer.msi again
this time selecting the XSL extension!
visual77 at gmail dot com 20-Sep-2008 04:35
The XSLTProcessor is kind of a pain to use to generate an entire website, mostly due to the tedious process of building an XML tree through DOMDocument's createElement and appendChild functions.

To get an entire website out of nothing but XML and XSL (which really is a superior system to just echoing out the HTML), you could use an object that does all the PHP data structure to XML data tree conversion, and combines with the XSLTProcessor for rendering. A good object like this is DOMi, which you can find at http://domi.sourceforge.net.
emilise dot victor at gmail dot com 12-Mar-2008 08:10
Here is a way to get an output without using <xml:message> : use the var_dump function of php :
- First bind the php functions with
<? $xslt->registerPHPFunctions() ?>
and xmlns:php="http://php.net/xsl" in the stylesheet
- Then you can call the var_dump function like this : <xsl:variable name="a" select="php:function('var_dump', $return)" />

I couldn't find a way to call the function and have it really print the result without creating a variable, but well, it's just for debugging...
shangxiao at php dot net 10-Jan-2008 05:38
When using the DOM api to add xsl commands to your stylesheet dynamically, be sure to use createElementNS() rather than createElement() otherwise the XSLTProcessor will not recognise these DOM nodes.

Eg:
$xsl->createElementNS('http://www.w3.org/1999/XSL/Transform', 'xsl:element');
pb at online-magazin dot at 11-Oct-2007 03:13
Calling the Saxon XSLT Processor is a very esay task to do!

You just need to do some simple task

1. Install the JavaBridge for PHP

2. Download the freeware (B) Saxon distribution from http://saxon.sourceforge.net/

3. Put the jar files in a directory whre you have access

4. Use this sample of code

// Directory where the jar files are located
define("SAXON_DIR", $_SERVER['DOCUMENT_ROOT']."/saxonb8.9.0/");

// include the jars
java_require(SAXON_DIR."saxon8.jar;".SAXON_DIR."saxon8-dom.jar");

$sXslFile = $_SERVER['DOCUMENT_ROOT']."/myfirst.xsl"; // The xsl file
$sXmlFile = $_SERVER['DOCUMENT_ROOT']."/myfirst.xml"; // The xml file

try
{
  $oXslSource = new java("javax.xml.transform.stream.StreamSource", "file://".$sXslFile);
  $oXmlSource = new java("javax.xml.transform.stream.StreamSource", "file://".$sXmlFile);

  $oFeatureKeys = new JavaClass("net.sf.saxon.FeatureKeys");

  // Create the Factory
  $oTransformerFactory = new java("net.sf.saxon.TransformerFactoryImpl");

  //Disable source document validation
  $oTransformerFactory->setAttribute($oFeatureKeys->SCHEMA_VALIDATION, 4);

  // Create a new Transformer
  $oTransFormer = $oTransformerFactory->newTransformer($oXslSource);

  // Create a StreamResult to store the output
  $oResultStringWriter = new java("java.io.StringWriter");
  $oResultStream = new java("javax.xml.transform.stream.StreamResult", $oResultStringWriter);

  // Transform
  $oTransFormer->transform($oXmlSource, $oResultStream);

  // Echo the output from the transformation
  echo java_cast($oResultStringWriter->toString(), "string");

}
catch(JavaException $e){
   echo java_cast($e->getCause()->toString(), "string");
   exit;
}

5. Enjoy

This is working quite well.
Vasil Rangelov 21-Aug-2007 07:31
@basslines at gmail dot com
"
As far as I can tell, the most recent stable versions of LibXML/LibXSLT/LibEXSLT do NOT support xPath 2.0 / XSLT 2.0 transformations. The only support for XSLT 2.0 that I've found is in Java's SAXON processor (http://saxon.sourceforge.net/).
"

Using SAXON or AltovaXML by using their JAVA bindings could prove to be a difficult task to do, and .NET seems to be buggy (at least for me). However, I've made a class that uses SAXON or AltovaXML from the command line. AltovaXML could also be used with COM, provided it's registered as a COM component.

You can download my wrapper from:
http://xslt2processor.sourceforge.net/

I still need to implement a more graceful error handling (the way the XSL extension uses the Libxml functions), and once the bug
http://bugs.php.net/bug.php?id=41577
is fixed, I'll implement the .NET interfaces too.

I'll appreciate any feedback.
geoffreyj dot lee at gmail dot com 01-Jul-2007 11:02
Here are a couple useful tips for those who care about cross-browser compatibility.

Given:

<script type="text/javascript" src="test.js"></script>

XSLT will automatically condense it to:

<script type="text/javascript" src="test.js"/>

While this is good, Internet Explorer breaks on empty script tags. So, the simple solution is to add something to prevent an empty tag. For example:

<script type="text/javascript" src="test.js"><xsl:comment/></script>

Produces:

<script type="text/javascript" src="test.js">

</script>

------------------------

Also, here is a way to use IE's conditional comments:

<xsl:comment>[if gte IE 5]&#62;
&#60;link rel="stylesheet" type="text/css" href="ie.css" /&#62;
&#60;![endif]</xsl:comment>

Produces:

<!--[if gte IE 5]>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->

This will let you isolate IE-related CSS without needing to use ugly CSS hacks.
gabriel dot birke at web dot de 10-May-2007 03:19
Each <xsl:message> tag will generate a PHP error (level Warning). If you want to collect and pretty-print them, you could use a custom error handling function that collects the warnings in a static variable.
mnot at mnot dot net 08-May-2007 08:59
You can set an HTTP proxy for the XSLT document() function to use (as well as DTD external references) by setting http_proxy in the environment.

E.g., in Apache configuration;

SetEnv http_proxy http://127.0.0.1:3128/
Ryan D. Hatch 02-May-2007 01:14
Looking for php_xsl.dll?

If you installed on Windows using the MSI Installer - you may not have it.

1.) Add/Remove Programs and Change PHP Installation.  Select XSL Extension.

OR

2.) Download complete .zip file of PHP and you can copy php_xsl.dll into your PHP/etc directory.

Just a note.

Ryan D. Hatch
adrian at foeder dot de 14-Sep-2006 02:45
If you want to use the document()-function inside your XSL stylesheet, please note that you have to use an absolute path there.
Important for windows users: the absolute path *has* to be with forward slashes, so subsitute windows-path-backslashes to forward slashes before you transform the document.

Examples:
This will NOT work:
<xsl:copy-of select="document('test.xml')" />

This will also NOT work:
<xsl:copy-of select="document('c:\temp\test.xml')" />

But this WILL work:
<xsl:copy-of select="document('c:/temp/test.xml')" />
27-Apr-2006 06:26
Enable libxslt library, PHP 5, under windows:

To Enable:
In your php.ini
1. Uncomment ;extension=php_xsl.dll
2. Change extension_dir to
     extension_dir = "./ext"

To Confirm:
1. In a test.php page:
<?php phpinfo() ?>
2. Run test.php
3. Search for "libxslt Version". It should return a version number in a XSL headed table.

Further info Google
"Configuring and Testing PHP Servers for XSL Support"
Fabrice Bonny 30-Mar-2006 01:34
In response to how to use entities from DTD (internal or external) in XSLT. It works if you do this way:

$xsl = new DOMDocument;
$xsl->resolveExternals = TRUE;
$xsl->substituteEntities = TRUE;
$xsl->load(...);

Hope this helps! ;-)
basslines at gmail dot com 29-Mar-2006 10:07
As far as I can tell, the most recent stable versions of LibXML/LibXSLT/LibEXSLT do NOT support xPath 2.0 / XSLT 2.0 transformations. The only support for XSLT 2.0 that I've found is in Java's SAXON processor (http://saxon.sourceforge.net/).
17-Mar-2006 09:14
In response to appletalk at gmail dot com
<snip>
As many of you may have noticed, DOM parser gives errors if the '&nbsp;' entity is present. The E_WARN message looks like:
Warning: DOMDocument::load() [function.load]: Entity 'nbsp' not defined in ...
There're many ways to solve this:
.....
b) Defining &nbsp;
At the top of the document, after the <?xml?> definition, add:
   <!DOCTYPE xsl:stylesheet [
   <!ENTITY nbsp "&#160;" >
   ]>
.......</snip>
Just wanted to let people know that option b does NOT work. I'm not sure why this isn't implemented correctly, but it isn't, so don't waste your time. It's unfortunate the DOMXSL transform is so much less capable than the old xslt function.
venkatesh at lammersmedical dot com 01-Mar-2005 06:17
Here is function to read from the XSL sheet which is saved as a text file.

function ReadExcelSheet($filename){
             $test=file($filename);
             $ar1=str_replace("~[^\t]*\t","\t",$test);
             $ar2=str_replace("~","",$ar1);
             $ar=str_replace("?","",$ar2);
             $temp=array();
             for ($i=0; $i<count($ar); $i++) {
                       if((substr($ar[$i],0,1)!= "\t")){
                           if($ar[$i]!=="\r\n"){
                           array_push($temp,$ar[$i]);
            }
        }
    }
    $name=split("\t",$temp[0]);
    $ExcelList=array();
    for($i=1;$i<count($temp);$i++){
        $split_result=split("\t",$temp[$i]);
        array_push($ExcelList,$split_result);
    }
    $result=insert_into_array($ExcelList,0,$name);
    return($result);
}
appletalk at gmail dot com 04-Feb-2005 10:32
As many of you may have noticed, DOM parser gives errors if the '&nbsp;' entity is present. The E_WARN message looks like:

Warning: DOMDocument::load() [function.load]: Entity 'nbsp' not defined in ...

There're many ways to solve this:
a) The hard way
<xsl:text disable-output-escaping="yes"> &amp;nbsp;</xsl:text>

b) Defining &nbsp;
At the top of the document, after the <?xml?> definition, add:
   <!DOCTYPE xsl:stylesheet [
    <!ENTITY nbsp "&#160;" >
    ]>

c) External Doctype
Just in case you want need other HTML entities, you can call an external doctype with the proper definitions

<!DOCTYPE page SYSTEM "http://gv.ca/dtd/character-entities.dtd">

Of course, you can download the file and place it in your server.
kekoajs at yahoo dot com 22-Dec-2004 02:07
Wow, I spent the better part of a day looking for how one could pass an entire test expression to an XSL stylesheet.  It seems that the XSLT 1.0 specification doesn't support it but PHP 5 (and maybe 4s) inclusion of  EXSLT allows one to do exactly that...

simply add these lines...

xmlns:dyn="http://exslt.org/dynamic"
extension-element-prefixes="dyn"

to the <xsl:stylesheet> element and when using an expression stored in a <xsl:param> element write

<xsl:if test="dyn:evaluate($param-name)">

and viola!  you can now use expressions generated externally in your stylesheet!

EXSLT adds many useful functions that can be integrated into your XSL in a similar fashion.  You can go to http://exslt.org/ to learn more...
rd at jerntorget dot se 24-Sep-2004 03:58
If you get the following warning message:

xsltApplyOneTemplate: _if_ was not compiled in (if can for example be apply-template or some other method), i've found that the problem seems to be an &nbsp; directly before the <xsl:if> or what ever is causing the problem.

One way to get thru the problem is to use span tags around &nbsp;  like : <span>&nbsp;</span>
jw at jwscripts dot com 06-Sep-2004 02:23
The following code is a wrapper to support calls to some of the old xslt_* functions:

<?

if (PHP_VERSION >= 5) {
    // Emulate the old xslt library functions
    function xslt_create() {
        return new XsltProcessor();
    }

    function xslt_process($xsltproc,
                          $xml_arg,
                          $xsl_arg,
                          $xslcontainer = null,
                          $args = null,
                          $params = null) {
        // Start with preparing the arguments
        $xml_arg = str_replace('arg:', '', $xml_arg);
        $xsl_arg = str_replace('arg:', '', $xsl_arg);

        // Create instances of the DomDocument class
        $xml = new DomDocument;
        $xsl = new DomDocument;

        // Load the xml document and the xsl template
        $xml->loadXML($args[$xml_arg]);
        $xsl->loadXML($args[$xsl_arg]);

        // Load the xsl template
        $xsltproc->importStyleSheet($xsl);

        // Set parameters when defined
        if ($params) {
            foreach ($params as $param => $value) {
                $xsltproc->setParameter("", $param, $value);
            }
        }

        // Start the transformation
        $processed = $xsltproc->transformToXML($xml);

        // Put the result in a file when specified
        if ($xslcontainer) {
            return @file_put_contents($xslcontainer, $processed);
        } else {
            return $processed;
        }

    }

    function xslt_free($xsltproc) {
        unset($xsltproc);
    }
}

$arguments = array(
    '/_xml' => file_get_contents("newxslt.xml"),
    '/_xsl' => file_get_contents("newxslt.xslt")
);

$xsltproc = xslt_create();
$html = xslt_process(
    $xsltproc,
    'arg:/_xml',
    'arg:/_xsl',
    null,
    $arguments
);

xslt_free($xsltproc);
print $html;

?>
rojaro 23-Jun-2004 07:43
If you're want to use XML from a variable e.g. $xmldata but the XSLT-StyleSheet from a file, you can do it also the following way:

<?php
$xslt = new xsltProcessor;
$xslt->importStyleSheet(DomDocument::load('filename.xsl'));
print $xslt->transformToXML(DomDocument::loadXML($xmldata));
?>


はじめに

XSL 拡張モジュールは、XSL の標準規格を実装したもので、 » libxslt ライブラリ を用いて » XSLT 変換 を行います。

User Contributed Notes

There are no user contributed notes for this page.


要件

この拡張モジュールを使うには libxml 拡張モジュールが必要です。つまり、 PHP 7.4 以降では --with-libxml、それより前のバージョンでは --enable-libxml も指定しなければならないということです。 しかし、libxml はデフォルトで有効になっているのでこのオプションは暗黙のうちに指定されています。

この拡張モジュールは » http://xmlsoft.org/XSLT/ にある libxslt を使用します。 libxslt バージョン 1.1.0 以降が必要です。

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

PHP には、デフォルトでXSL拡張モジュールが含まれており、 configureに引数--with-xsl[=DIR] を追加することにより有効にすることができます (DIR は libxslt をインストールしたディレクトリです)。

User Contributed Notes

There are no user contributed notes for this page.


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

XSL_CLONE_AUTO (int)
XSL_CLONE_NEVER (int)
XSL_CLONE_ALWAYS (int)
LIBXSLT_VERSION (int)
libxslt のバージョンを 10117 のように表します。
LIBXSLT_DOTTED_VERSION (string)
libxslt のバージョンを 1.1.17 のように表します。
LIBEXSLT_VERSION (int)
libexslt のバージョンを 813 のように表します。
LIBEXSLT_DOTTED_VERSION (string)
libexslt のバージョンを 1.1.17 のように表します。
XSL_SECPREF_NONE (int)
セキュリティに関する制限をすべて無効化します。
XSL_SECPREF_READ_FILE (int)
ファイルの読み込みを拒否します。
XSL_SECPREF_WRITE_FILE (int)
ファイルへの書き込みを拒否します。
XSL_SECPREF_CREATE_DIRECTORY (int)
ディレクトリの作成を拒否します。
XSL_SECPREF_READ_NETWORK (int)
ネットワークファイルの読み込みを拒否します。
XSL_SECPREF_WRITE_NETWORK (int)
ネットワークファイルへの書き込みを拒否します。
XSL_SECPREF_DEFAULT (int)
すべての書き込みアクセスを拒否します。つまり、 XSL_SECPREF_WRITE_NETWORK | XSL_SECPREF_CREATE_DIRECTORY | XSL_SECPREF_WRITE_FILE と同等です。

User Contributed Notes

There are no user contributed notes for this page.


例

目次

  • collection.xml および collection.xsl ファイルの例
  • libxml のエラー処理関数によるエラー処理

User Contributed Notes

There are no user contributed notes for this page.


collection.xml および collection.xsl ファイルの例

このリファレンスにある多くの例は、XML ファイルと XSL ファイルの両方が必要です。 例では、以下の内容を含む collection.xml と collection.xsl を使用します。

例1 collection.xml

<collection>
 <cd>
  <title>Fight for your mind</title>
  <artist>Ben Harper</artist>
  <year>1995</year>
 </cd>
 <cd>
  <title>Electric Ladyland</title>
  <artist>Jimi Hendrix</artist>
  <year>1997</year>
 </cd>
</collection>

例2 collection.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:param name="owner" select="'Nicolas Eliaszewicz'"/>
 <xsl:output method="html" encoding="iso-8859-1" indent="no"/>
 <xsl:template match="collection">
  Hey! Welcome to <xsl:value-of select="$owner"/>'s sweet CD collection!
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="cd">
  <h1><xsl:value-of select="title"/></h1>
  <h2>by <xsl:value-of select="artist"/> - <xsl:value-of select="year"/></h2>
  <hr />
 </xsl:template>
</xsl:stylesheet>

User Contributed Notes

There are no user contributed notes for this page.


libxml のエラー処理関数によるエラー処理

libxml にはエラー処理用の関数が用意されており、これらを使うと、 XSLT の処理中のエラーを捕らえて対応できます。

例1 fruits.xml

妥当な XML ファイルです。

<fruits>
 <fruit>Apple</fruit>
 <fruit>Banana</fruit>
 <fruit>Cherry</fruit>
</fruits>

例2 fruits.xsl

無効な select 式が含まれています。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" encoding="utf-8" indent="no"/>
 <xsl:template match="fruits">
  <ul>
   <xsl:apply-templates/>
  </ul>
 </xsl:template>
 <xsl:template match="fruit">
  <li><xsl:value-of select="THIS IS A DELIBERATE ERROR!"/></li>
 </xsl:template>
</xsl:stylesheet>

例3 エラーの捕捉と表示

以下の例は、エラーを含むスタイルシートで XSLTProcessor::importStyleSheet() を呼んだ際に発生する libxml のエラーを捕らえて表示するものです。

<?php

$xmldoc = new DOMDocument();
$xsldoc = new DOMDocument();
$xsl = new XSLTProcessor();

$xmldoc->loadXML('fruits.xml');
$xsldoc->loadXML('fruits.xsl');

libxml_use_internal_errors(true);
$result = $xsl->importStyleSheet($xsldoc);
if (!$result) {
foreach (libxml_get_errors() as $error) {
echo "Libxml error: {$error->message}\n";
}
}
libxml_use_internal_errors(false);

if ($result) {
echo $xsl->transformToXML($xmldoc);
}

?>

上の例の出力は、 たとえば以下のようになります。

Libxml error: Invalid expression

Libxml error: compilation error: file fruits.xsl line 9 element value-of
Libxml error: xsl:value-of : could not compile select expression 'THIS IS A DELIBERATE ERROR!'

User Contributed Notes

There are no user contributed notes for this page.


XSLTProcessor クラス

(PHP 5, PHP 7, PHP 8)

はじめに

クラス概要

class XSLTProcessor {
/* メソッド */
public getParameter(string $namespace, string $name): string|false
public getSecurityPrefs(): int
public hasExsltSupport(): bool
public importStylesheet(object $stylesheet): bool
public registerPHPFunctions(array|string|null $functions = null): void
public removeParameter(string $namespace, string $name): bool
public setParameter(string $namespace, string $name, string $value): bool
public setParameter(string $namespace, array $options): bool
public setProfiling(?string $filename): true
public setSecurityPrefs(int $preferences): int
public transformToDoc(object $document, ?string $returnClass = null): DOMDocument|false
public transformToUri(object $document, string $uri): int
public transformToXml(object $document): string|null|false
}

目次

  • XSLTProcessor::__construct — 新しい XSLTProcessor オブジェクトを作成する
  • XSLTProcessor::getParameter — パラメータの値を取得する
  • XSLTProcessor::getSecurityPrefs — セキュリティ設定を取得する
  • XSLTProcessor::hasExsltSupport — PHP が EXSLT をサポートしているかどうかを判定する
  • XSLTProcessor::importStylesheet — スタイルシートを取り込む
  • XSLTProcessor::registerPHPFunctions — PHP 関数を XSLT 関数として利用できるようにする
  • XSLTProcessor::removeParameter — パラメータを削除する
  • XSLTProcessor::setParameter — パラメータの値を設定する
  • XSLTProcessor::setProfiling — プロファイル情報の出力ファイルを設定する
  • XSLTProcessor::setSecurityPrefs — セキュリティ設定を指定する
  • XSLTProcessor::transformToDoc — ドキュメント に変換する
  • XSLTProcessor::transformToUri — URI に変換する
  • XSLTProcessor::transformToXml — XML に変換する

User Contributed Notes

joandres52725lm at gmail dot com 29-Apr-2020 07:29
[Update] PHP version /.3.15 and Windows Uncomment `extension=xsl` to activate it in your php.ini. Then restart your webserver to refresh php.
tschallacka 29-Feb-2016 09:58
uncomment extension=php_xsl.dll on windows to activate it in your php.ini. Then restart your webserver to refresh php.
flavius 13-Nov-2015 05:49
It requires PHP5 XSL extension. On linux:

sudo apt-get install php5-xsl


新しい XSLTProcessor オブジェクトを作成する

  • ≪ XSLTProcessor
  • XSLTProcessor::getParameter ≫
  • PHP Manual
  • XSLTProcessor
  • 新しい XSLTProcessor オブジェクトを作成する

XSLTProcessor::__construct

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::__construct — 新しい XSLTProcessor オブジェクトを作成する

説明

XSLTProcessor::__construct()

新しい XSLTProcessor オブジェクトを作成します。

パラメータ

この関数にはパラメータはありません。

例

例1 XSLTProcessor の作成

<?php

$xsldoc = new DOMDocument();
$xsldoc->load($xsl_filename);

$xmldoc = new DOMDocument();
$xmldoc->load($xml_filename);

$xsl = new XSLTProcessor();
$xsl->importStyleSheet($xsldoc);
echo $xsl->transformToXML($xmldoc);

?>

User Contributed Notes

There are no user contributed notes for this page.


パラメータの値を取得する

  • ≪ XSLTProcessor::__construct
  • XSLTProcessor::getSecurityPrefs ≫
  • PHP Manual
  • XSLTProcessor
  • パラメータの値を取得する

XSLTProcessor::getParameter

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::getParameter — パラメータの値を取得する

説明

public XSLTProcessor::getParameter(string $namespace, string $name): string|false

パラメータがあらかじめ XSLTProcessor::setParameter() で設定されている場合、 それを取得します。

パラメータ

namespace

XSLT パラメータの名前空間 URI を指定します。

name

XSLT パラメータのローカル名を指定します。

戻り値

パラメータの値 (文字列)、あるいは設定されていない場合は false を返します。

参考

  • XSLTProcessor::setParameter() - パラメータの値を設定する
  • XSLTProcessor::removeParameter() - パラメータを削除する

User Contributed Notes

There are no user contributed notes for this page.


セキュリティ設定を取得する

  • ≪ XSLTProcessor::getParameter
  • XSLTProcessor::hasExsltSupport ≫
  • PHP Manual
  • XSLTProcessor
  • セキュリティ設定を取得する

XSLTProcessor::getSecurityPrefs

(PHP >= 5.4.0, PHP 7, PHP 8)

XSLTProcessor::getSecurityPrefs — セキュリティ設定を取得する

説明

public XSLTProcessor::getSecurityPrefs(): int

セキュリティ設定を取得します。

パラメータ

この関数にはパラメータはありません。

戻り値

XSL_SECPREF_READ_FILE、 XSL_SECPREF_WRITE_FILE、 XSL_SECPREF_CREATE_DIRECTORY、 XSL_SECPREF_READ_NETWORK、 XSL_SECPREF_WRITE_NETWORK を含むビットマスクを返します。

User Contributed Notes

There are no user contributed notes for this page.


PHP が EXSLT をサポートしているかどうかを判定する

  • ≪ XSLTProcessor::getSecurityPrefs
  • XSLTProcessor::importStylesheet ≫
  • PHP Manual
  • XSLTProcessor
  • PHP が EXSLT をサポートしているかどうかを判定する

XSLTProcessor::hasExsltSupport

(PHP 5 >= 5.0.4, PHP 7, PHP 8)

XSLTProcessor::hasExsltSupport — PHP が EXSLT をサポートしているかどうかを判定する

説明

public XSLTProcessor::hasExsltSupport(): bool

このメソッドは PHP が » EXSLT library と共にビルドされたかどうかを判定します。

パラメータ

この関数にはパラメータはありません。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 EXSLT サポートの判定

<?php

$proc = new XSLTProcessor;
if (!$proc->hasExsltSupport()) {
die('EXSLT support not available');
}

// EXSLT 処理がここに ..

?>

User Contributed Notes

There are no user contributed notes for this page.


スタイルシートを取り込む

  • ≪ XSLTProcessor::hasExsltSupport
  • XSLTProcessor::registerPHPFunctions ≫
  • PHP Manual
  • XSLTProcessor
  • スタイルシートを取り込む

XSLTProcessor::importStylesheet

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::importStylesheet — スタイルシートを取り込む

説明

public XSLTProcessor::importStylesheet(object $stylesheet): bool

このメソッドは XSLTProcessor に変換のためのスタイルシートを取り込みます。

パラメータ

stylesheet

取り込まれるスタイルシートを DOMDocument オブジェクトあるいは SimpleXMLElement オブジェクトとして指定します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

User Contributed Notes

rbmeo at yahoo dot com 12-Jul-2012 09:52
To make your import dynamic, try this code:

<?php
$dom = new DOMDocument();
$dom->load('main.xsl');
$xpath = new DomXPath($dom);
$importnode= $questionsXsl->createElement('xsl:include');
$attr= $questionsXsl->createAttribute('href');
$attr->value = 'import.xsl';
$importnode->appendChild($attr);
$dom->documentElement->insertBefore($importnode,$ref);
$dom->loadXml($dom->saveXml());
?>

this code basically loads the main stylesheet, prepend the import xsl code then reload as xml string so the imported stylesheet will be loaded at dom.
kevin at metalaxe dot com 17-Nov-2007 03:26
Just for reference, as of this writing, this function does not support importing multiple stylesheets. The following will output only the stylesheet transformation of the second imported sheet:

<?php

# LOAD XML FILE
$XML = new DOMDocument();
$XML->load( 'data.xml' );

# START XSLT
$xslt = new XSLTProcessor();

# IMPORT STYLESHEET 1
$XSL = new DOMDocument();
$XSL->load( 'template1.xsl' );
$xslt->importStylesheet( $XSL );

#IMPORT STYLESHEET 2
$XSL = new DOMDocument();
$XSL->load( 'template2.xsl' );
$xslt->importStylesheet( $XSL );

#PRINT
print $xslt->transformToXML( $XML );
?>

This wasn't documented and quite dissapointing.
fcartegnie 21-Jul-2007 06:11
PHP5 xsl processor has a different behaviour than PHP4's one with CDATA sections. (see http://bugs.php.net/bug.php?id=29837)
Loaded XSL sheet CDATA sections does not allow, by default, output-escaping handling (everything in the CDATA is escaped by default).

So in this case you can't build your XSL Dom the usual way:
    $xsldom = DomDocument::loadXML(file_get_contents('sheet.xsl'));

and must go through this one (allowing LIBXML_NOCDATA parameter):
    $xsldom = new DomDocument;
    $xsldom->load('sheet.xsl', LIBXML_NOCDATA);

Then the CDATA output-escaping behaviour will be correct.
diesel at spbnet dot ru 19-Mar-2007 09:07
This is not a problem. You may set DOMDocument's documentURI property.
Something like this

<?php
$xsl = new DOMDocument('1.0','UTF-8');

$xsl->loadXML(file_get_contents('/foo/bar/somefile.xsl');
$xsl->documentURI = '/foo/bar/somefile.xsl';

$xslProc = new XSLTProcessor();
$xslProc->importStylesheet($xsl);
?>

and document('other.xsl') will work fine!
bbrosseau at gmail 01-Mar-2005 08:46
For those who wants to use external documents, it is important not to use the DomDocument::loadXML because the processor will not have the path to look for other files

So if you want to transform some xml with a pre-generated stylesheet $f:

<?php
$f = 'somestylesheet.xsl';
$xsl = DomDocument::loadXML(file_get_contents($f));
?>

document('other.xml') will not work with relative path and <?php $xsl = DomDocument::load($f); ?> will!


PHP 関数を XSLT 関数として利用できるようにする

  • ≪ XSLTProcessor::importStylesheet
  • XSLTProcessor::removeParameter ≫
  • PHP Manual
  • XSLTProcessor
  • PHP 関数を XSLT 関数として利用できるようにする

XSLTProcessor::registerPHPFunctions

(PHP 5 >= 5.0.4, PHP 7, PHP 8)

XSLTProcessor::registerPHPFunctions — PHP 関数を XSLT 関数として利用できるようにする

説明

public XSLTProcessor::registerPHPFunctions(array|string|null $functions = null): void

このメソッドは、PHP 関数を XSL スタイルシートでの XSLT 関数として利用できるようにします。

パラメータ

functions

このパラメータは、XSLT からコールされる信頼できる関数のみを許可します。

このパラメータには文字列 (関数名) あるいは関数の配列のいずれかを指定します。

戻り値

値を返しません。

例

例1 スタイルシートからの単純な PHP 関数コール

<?php
$xml = <<<EOB
<allusers>
<user>
<uid>bob</uid>
</user>
<user>
<uid>joe</uid>
</user>
</allusers>
EOB;
$xsl = <<<EOB
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="allusers">
<html><body>
<h2>Users</h2>
<table>
<xsl:for-each select="user">
<tr><td>
<xsl:value-of
select="php:function('ucfirst',string(uid))"/>
</td></tr>
</xsl:for-each>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
EOB;
$xmldoc = new DOMDocument();
$xmldoc->loadXML($xml);
$xsldoc = new DOMDocument();
$xsldoc->loadXML($xsl);

$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsldoc);
echo $proc->transformToXML($xmldoc);
?>

User Contributed Notes

Matthew, info at mathias-schaefer dot de 25-Nov-2010 08:34
=> there is no instance of your class needed, you have to take care about the namespace (using 5.3).

<!-- xsl:
<xsl:value-of select="php:function ('My\Name\Space\MyClassName::methodName',1+2)"/>
--->

<?php
namespace My\Name\Space;

   class MyClassName
   {
      static public function methodName($someArgument)
      {
         return "resultis:".$someArgument;
      }
   }
?>

<!-- result:
resultis:3
-->

=> no to-string conversion of the argument needed
=> returning numbers is also possible (maybe DOM nodes too)

Keep on hackin'
Demerit 10-Aug-2010 07:58
Let's get the terminology correct here, folks.

If you are calling a function that is residing within a class, reference it by its INSTANCE name, NOT its class name.

class.my_class.php:

<?php
class class_name {
static function function_name($in){
return ($out);
}
}
?>

calling_document.php:

<?php
require_once('class.my_class.php');
$instance_name=new class_name();
?>

my_xslt.xsl:

<xsl:value-of select="php:function ('instance_name::function_name','garbage')" />

BTW, in 5.1.6 double-colon (::) is the only thing that works when calling a function that resides within a class. However, you must declare your function as static. Using -> as some have suggested (e.g., php:function ('instance_name->function_name','garbage')) doesn't work at all, no matter how you declare your function.
Nic Luciano 22-Jul-2009 11:09
Ritch said "If you wish to use a function from inside a class use the double colon (::) notation..."

Also note that the class function must be declared as static.
Ariz Jacinto 08-Jul-2008 02:21
If you want to use replace() function similar to XPath 2.0[1]  and you want to avoid a long XSLT function similar to this one[2], you can use PHP's str_replace() instead:

   <xsl:value-of select="php:functionString('str_replace','pattern', 'replacement' , . )">

Links:
  [1] http://www.w3.org/TR/2004/WD-xpath-functions-20041029/#func-replace
  [2] http://aspn.activestate.com/ASPN/Cookbook/XSLT/Recipe/65426

_
thsoft at vipmail dot hu 27-Dec-2007 02:22
Unfortunately, you can't pass arrays to PHP from XLST.
But you can pass an arbitrary number of arguments to a PHP function and then get them with func_get_args() as an array.
[There's no sense writing a function that is identical to the array() construct, because a function's return value is converted to a string when passed as an argument to another function. This means deep arrays cannot be handled this way.]
thsoft at vipmail dot hu 31-Jan-2007 03:20
The correct way to receive DOM nodes (let it be element, document, document fragment etc.) returned from PHP is to use <xsl:copy-of select="php:function...

I found the idea and an example here: http://bugs.php.net/bug.php?id=29409

For the technical details about the reason, see http://www.w3.org/TR/xslt#copy-of
phil at worldpoolfederation dot com 01-Dec-2006 03:22
Not true

Use :: to call static functions
Use -> to call non static functions

You must define a function as static in php 5.1 to be able to call it statically.
mark at thirst dot org 10-Oct-2006 07:25
Ritch said "If you wish to use a function from inside a class use the double colon (::) notation..."   This worked in 5.0.4 but no longer works in 5.1.6.
franp at free dot fr 02-Sep-2006 01:45
Note that if you want your output to validate against some xhtml dtd, you must add the following attribute to the xsl:stylesheet element of the xslt stylesheet :
exclude-result-prefixes="php".

Otherwise, you get an "invalid attribute xmlns:php" error.
taylorbarstow at that google mail thingy 26-May-2006 05:33
Add-on to my previous note (below) about returning nodesets to XSLT from PHP functions:

You don't have to return a DOMDocument, DOMElement works just as well.  Plus, retuning a DOMElement gets around the problem of discarding the root node which I discuss below and which is also touched on by "Ingram".
heinemann dot juergen at hjcms dot de 08-Mar-2006 02:23
You can find mor Examples at PHP Sources php-5.*/ext/xsl/tests
<?php

$xform = <<<EOT
<?xml version = '1.0' encoding = 'utf-8' ?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:php="http://php.net/xsl"
    xsl:extension-element-prefixes="php"
>
<xsl:output method="xml" indent="yes" encoding="utf-8" />
<xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl" />
<xsl:template match="root">
<html>
<head>
    <title>Dateformat</title>
</head>
<body>
<xsl:for-each select="datenode">
    <li>
        <xsl:value-of select="php:functionString('convertDate', . )" />
    </li>
    </xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
EOT;

function convertDate( $i )
{
    setlocale( LC_TIME, 'de_DE' );
    return utf8_encode( strftime( '%B %d %A %Y %H:%M:%S CET', $i ) );
}

$xsl = new XSLTProcessor;
$xsl->registerPHPFunctions();
$xsl->setParameter( 'DOCTYPE', 'PUBLIC', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' );
$xsl->setParameter( 'html', 'xmlns', 'http://www.w3.org/1999/xhtml' );

$xdom = new DomDocument( '1.0', 'utf-8' );
$xdom->loadXML( $xform );

$xsl->importStyleSheet( $xdom );
unset( $xdom );

$dom = new DomDocument( '1.0', 'utf-8' );
$r = $dom->appendChild( $dom->createElement( 'root' ) );
foreach ( range( 1, 12 ) AS $i ) {
    $r->appendChild( $dom->createElement( 'datenode', mktime( date('G'), date('i'), date('s'), $i, date('d'), date('Y') ) ) );
}

header( "Content-Type: text/html; CHARSET=shift-jis;" );
header( "Content-Encoding: utf-8" );
echo $xsl->transformToXML( $dom );

?>
Ingram 28-Feb-2006 12:33
Upon testing returning of a nodeset contributed by

taylorbarstow at that google mail thingy

(which works excellently, TY!)

I found that with using:

===
"Presumably, it's worth creating a template to do the discard:

<xsl:template select="*" mode="discardRoot">
   <xsl:apply-templates select="./*" />
</xsl:template>

Which you can call like so:

<xsl:apply-templates select="php:function('getNodeSet')" mode="discardRoot" /> "
===

I could only output the text and not any of the tags after applying templates - i.e. it stripped all elements around text.

Instead using:

===
<xsl:template match="/">
   <xsl:for-each select="php:function('getNodeSet')" />
     <xsl:apply-templates />
   </xsl:for-each>
</xsl:template>

which effectively discards the root node.
===

Worked fine and allowed me to apply-templates without problem on the returned nodeset.
hopeseekr at gmail dot com 01-Feb-2006 12:17
One of the peskiest things I had problems with was encoding URL parameters.  I mean, pretend you want to populate a link with "search+terms" instead of just "search terms".  I was including two seperate URLs in the XML and that was ludicrous.

Below is a far more elegant PHP+XSLT solution.  You will also see it uses two *undocumented* features of registerPHPFunctions(), namely php:functionString() and the passing of parameters to the function.  I figured this out by trial and error; I really hope this note helps you as it *greatly* expands the power of php functions in XSLT!

<?php
/* --- XML input --- */
<search_results>
   <query>concert tickets</query>
</search_results>

/* --- XSL code --- */
<!-- Display query -->
<xsl:template match="search_results">
   <!-- Get URL-encoded string via PHP -->
   <xsl:variable name="safeurl" as="xs:string" select="php:functionString('urlencode', query)" />
   <p>Your search for <em><xsl:value-of select="query"/></em> can be continued at <a href="http://www.tixtix.com/search.php?q={$safeurl}">our search engine</a></p>
</xsl:template>

/* --- XHTML output --- */
<p>Your search for <em>concert tickets</em> can be continued at <a href="http://www.tixtix.com/search.php?q=space+cowboy">our search engine</a></p>
?>

Cool, huh?
taylorbarstow at that google mail thingy 01-Dec-2005 07:14
From a PHP function, you can pass a nodeset back to XSL using a DOMDocument.  For example:

<?php

function getNodeSet() {
   $xml =
       "<test>" .
       "<a-node>This is a node</a-node>" .
       "<a-node>This is another node</a-node>" .
       "</test>";
   $doc = new DOMDocument;
   $doc->loadXml($xml);
   return $doc;
}

?>

The only problem I've found is that the root level node in your returned DOM document acts like the root level node of your original.   SO, it's easy to introduce an infinite loop like so:

<xsl:template match="/">
   <xsl:apply-templates select="php:function('getNodeSet')" />
</xsl:template>

To avoid this, I've been using a construct like:

<xsl:template match="/">
   <xsl:for-each select="php:function('getNodeSet')" />
      <xsl:apply-templates />
   </xsl:for-each>
</xsl:template>

which effectively discards the root node.  Presumably, it's worth creating a template to do the discard:

<xsl:template select="*" mode="discardRoot">
   <xsl:apply-templates select="./*" />
</xsl:template>

Which you can call like so:

<xsl:apply-templates select="php:function('getNodeSet')" mode="discardRoot" />
Ritch at Bugsoftware dot co dot uk 22-Jun-2005 03:18
If you wish to use a function from inside a class use the double colon (::) notation, for example;

php:functionString('classname::function')

The funtion is fired off as a static and as such acts like a function in the global namespace.
benbarnett 04-Mar-2005 04:34
You can use the php:functionString() in the XSL, which will automatically convert output to a string!
zac at zacbowling dot com 27-Oct-2004 01:48
One thing I have told a lot of people to do if they are having
issues with this function is to check for any 'xmlns' attributes
that get generated and added to your xml pages by some
types of popular software.

<?php
$file = "http://data.map***.net/m***ck.asmx/GetMessages?IMEI=$id";

$docxml = file_get_contents($file);

//You may have to do something like this where
//I remove any instance of xmlns tags that get
//returned by my ASP.NET SOAP responses.

$docxml =
 str_replace("xmlns=\"http://data.map***.net/m***ck.asmx?WSDL\"",
  "",$docxml);

$xslt = new xsltProcessor;

//You don't remove them then this function will blow up.
$xslt->registerPHPFunctions();
$xslt->importStyleSheet(DomDocument::load('../xsl/message.xsl'));
print $xslt->transformToXML(DomDocument::loadXML($docxml));

?>

Also a few cool tricks with this function is that you can call
built in PHP functions. For example:

<xsl:value-of
  select="php:function('nl2br',string(MessageContent/Message))"
  disable-output-escaping="yes"/>

That XSL value will now return your normal string but replace
all your new line charactors in your xml with '<br />'s.

Also note the 'disable-output-escaping="yes"' statement. If
you don't call this, then the output of that bind will be ran
thru basicly a "htmlencode()" type function.

Last but not least, take a look at the 'string()' function I
called in XSL before passing it back. That is because without
calling that, when it runs it will try and pass the node object,
and not its value (which is what you most likely only want).

This function is very awsome and could lead to some very
interesting code development. Skins could be loaded
remotely. You could write an RSS viewer in PHP without much
code. You could parse XHTML pages into another view (either
localy or remotely). Then you can take that same XML
content and throw it against ASP.NET, Java, or even a
command line processing tool using that same exact XSL
style sheet and generate the front ends for you page without
much change. I'm very excited.

Happy codding.
junkmail at eighteyes dot com 08-Oct-2004 02:52
When writing a stylesheet that uses a callback function be sure to include a namespace declaration for php, as follows:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl" version='1.0'>
begemot at php dot com dot ua 28-Sep-2004 06:24
I think it help  your.
<?php

function dateLang () {
        return strftime("%A");
}

$xsl = new DomDocument();
$xsl->load("datetime.xsl");
$inputdom = new DomDocument();
$inputdom->load("today.xml");

$proc = new XsltProcessor();
$proc->registerPhpFunctions();

// Load the documents and process using $xslt
$xsl = $proc->importStylesheet($xsl);

/* transform and output the xml document */
$newdom = $proc->transformToDoc($inputdom);

print $newdom->saveXML();

?>

Here's the XSLT stylesheet, datetime.xsl, that will call that function:

<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<xsl:template match="/">
  <xsl:value-of select="php:function('dateLang')" />
</xsl:template>
</xsl:stylesheet>

And here's an absolute minimal XML file, today.xml, to pass through the stylesheet (although articles.xml would achieve the same result):

<?xml version="1.0" encoding="iso-8859-1" ?>
<today></today>
zac at zacbowling dot com 26-Aug-2004 09:48
One thing to note about this function. A lot of values need to be converted to a XSLT string using the "string()" function in XLS before you pass them to your functions, and when you return them make sure that if they are strings that you call the "strval()" in php before doing so. This saved me hours.

Hope that helps.

Zac Bowling


パラメータを削除する

  • ≪ XSLTProcessor::registerPHPFunctions
  • XSLTProcessor::setParameter ≫
  • PHP Manual
  • XSLTProcessor
  • パラメータを削除する

XSLTProcessor::removeParameter

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::removeParameter — パラメータを削除する

説明

public XSLTProcessor::removeParameter(string $namespace, string $name): bool

もしパラメータが設定されていれば削除します。これにより、 プロセッサはスタイルシートで指定されるようなパラメータに デフォルト値を使用します。

パラメータ

namespace

XSLT パラメータの名前空間 URI を指定します。

name

XSLT パラメータのローカル名を指定します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

参考

  • XSLTProcessor::setParameter() - パラメータの値を設定する
  • XSLTProcessor::getParameter() - パラメータの値を取得する

User Contributed Notes

There are no user contributed notes for this page.


パラメータの値を設定する

  • ≪ XSLTProcessor::removeParameter
  • XSLTProcessor::setProfiling ≫
  • PHP Manual
  • XSLTProcessor
  • パラメータの値を設定する

XSLTProcessor::setParameter

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::setParameter — パラメータの値を設定する

説明

public XSLTProcessor::setParameter(string $namespace, string $name, string $value): bool
public XSLTProcessor::setParameter(string $namespace, array $options): bool

XSLTProcessor を使った変換のための 1 つあるいは多くのパラメータの値を設定します。 もしパラメータがスタイルシートに存在しない場合、無視されます。

パラメータ

namespace

XSLT パラメータの名前空間 URI を指定します。

name

XSLT パラメータのローカル名を指定します。

value

XSLT パラメータの新しい値を指定します。

options

名前 => 値 の組の配列を指定します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例

例1 変換前に所有者を変更する

<?php

$collections = array(
'Marc Rutkowski' => 'marc',
'Olivier Parmentier' => 'olivier'
);

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

// 変換の設定を行う
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

foreach ($collections as $name => $file) {
// XML ソースをロードする
$xml = new DOMDocument;
$xml->load('collection_' . $file . '.xml');

$proc->setParameter('', 'owner', $name);
$proc->transformToURI($xml, 'file:///tmp/' . $file . '.html');
}

?>

参考

  • XSLTProcessor::getParameter() - パラメータの値を取得する
  • XSLTProcessor::removeParameter() - パラメータを削除する

User Contributed Notes

richard at aggmedia dot net 04-Mar-2009 07:47
Note that there is no way to remove a parameter from an XSLTProcessor unless you know its name, and there is no way (that I can find) to get a list of the current parameters.

This means that you cannot reuse an XSLTProcessor with different parameters unless you call XSLTProcessor->removeParameter() on every parameter, and to do that you need to know the names of all the currently set parameters.

I bumped into this because we were caching XSLTProcessors for reuse, and they were spitting out content based on phantom parameters (they were still there from previous uses).
Lennaert van der Linden 13-Feb-2008 06:28
The parameter will not be set if the value contains both single and double quotes. Instead a warning will be shown when transforming the document:

PHP Warning:  XSLTProcessor::transformToXml(): Cannot create XPath expression (string contains both quote and double-quotes)
brettz9 08-May-2007 08:27
It seems heinemann's usage is not correct and does not achieve the intended result.

This method's purpose is to change a global <xsl:param> value in the XSL stylesheet--not to change an attribute of any other element.  <xsl:param> basically lets you set up a stylesheet which can be customized (as from PHP) externally (without needing to tamper with the original XSL file).

Here's an example of usage (that will work):

Stylesheet:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="print_something" select="defaultstring"/>
    <xsl:template match="/mydoc">
        <p style="color:red;">Printed parameter: <xsl:value-of select="$print_something"/></p>
    </xsl:template>
</xsl:stylesheet>

Script:

<?php
$dom = new DOMDocument();
$xsl = new XSLTProcessor;
$xsl->setParameter( '', 'print_something', "Now I've overridden the default!");
$style = realpath( "./my_stylesheet.xslt" );
$dom->load($style);
$xsl->importStyleSheet($dom);
$dom->loadXML('<mydoc></mydoc>');

$out = $xsl->transformToXML( $dom );

var_dump( '<pre>',
    htmlentities( $out, ENT_QUOTES, 'utf-8' ),
    $xsl->getParameter('', 'print_something'),
'</pre>' );
?>

gives:

string(5) "

"
string(143) "<?xml version="1.0"?>
<p style="color:red;">Printed parameter: Now I've overridden the default!</p>
"
string(32) "Now I've overridden the default!"
string(6) "

"

Notice that at present adding a namespace will not work. The only option at present is to set the first parameter for namespace to an empty string (though you can add the prefix with colon to the second argument for name in order to set the parameter for a namespace-prefixed parameter name).

See http://bugs.php.net/bug.php?id=30622
OrionI 01-May-2007 07:19
After looking at this a little further (see http://bugs.php.net/bug.php?id=41248), it appears that it's a shortcoming of libxslt, not PHP, that prevents passing in DOMDocuments or DOMNodes as parameters.
Orion I 30-Apr-2007 08:46
I've been trying to pass in a DOMDocument object as a parameter so I can stuff a bunch of data into XML nodes, but it appears that this function is not capable of it. I was hoping to get it to work like it does in the .NET 2.0 framework. (See http://msdn2.microsoft.com/en-us/library/
system.xml.xsl.xsltargumentlist.addparam.aspx)
But after looking at the PHP 5.2.1 source code, /php-5.2.1/ext/xsl/xsltprocessor.c line 604-650, it appears that it's not possible to do so in PHP even though it appears that libxslt supports it (see http://xmlsoft.org/XSLT/html/libxslt-variables.html
#xsltParseGlobalParam)

In fact, if the parameters aren't exactly what's expected, you'll always get a warning like this:

Wrong parameter count for XSLTProcessor::setParameter()
heinemann dot juergen at hjcms dot de 07-Mar-2006 03:39
Example for how it works.

<?xml version = '1.0' encoding = 'utf-8' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
    indent="yes"
    encoding="ISO-8859-15"
    doctype-system = "-//W3C//DTD XHTML 1.0 Transitional//EN"
    doctype-public = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
/>
<xsl:template match="docs">
<html>
<head>
    <title>
        <xsl:text>Example</xsl:text>
    </title>
</head>
<body>
    <xsl:for-each select="block">
        <div>
            <xsl:value-of select="." />
        </div>
    </xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

------------------

<?php
$dom = new DomDocument( '1.0', 'utf-8' );
$xsl = new XSLTProcessor;
$xsl->setParameter( 'block', 'xmlns', 'http://www.w3.org/1999/xhtml' );

$style = realpath( "./my_stylesheet.xslt" );
$dom->load( $style );
$xsl->importStyleSheet( $dom );

$dom->loadXML( '<docs>
    <block>Howto set xhtml Transitional Namespaces width php</block>
    <block>see http://www.php.net</block>
</docs>' );

$out = $xsl->transformToXML( $dom );

var_dump( '<pre>',
    htmlentities( $out, ENT_QUOTES, 'utf-8' ),
    $xsl->getParameter( 'block', 'xmlns' ),
    $xsl->getParameter( 'docs', 'xmlns' ),
'</pre>' );

?>
Stoke A 11-Aug-2005 03:40
XSLTProcessor::removeParameter() won't work on parameters set via XSLTProcessor::setParameter(string namespace, array options) in 5.1+ -- they need to be set and removed one by one.


プロファイル情報の出力ファイルを設定する

  • ≪ XSLTProcessor::setParameter
  • XSLTProcessor::setSecurityPrefs ≫
  • PHP Manual
  • XSLTProcessor
  • プロファイル情報の出力ファイルを設定する

XSLTProcessor::setProfiling

(PHP >= 5.3.0, PHP 7, PHP 8)

XSLTProcessor::setProfiling — プロファイル情報の出力ファイルを設定する

説明

public XSLTProcessor::setProfiling(?string $filename): true

スタイルシート処理時のプロファイル情報を出力するファイルを設定します。

パラメータ

filename

プロファイル情報を出力するファイルへのパス。

戻り値

常に true を返します。

例

例1 プロファイル出力の例

<?php
// XML ソースを読み込みます
$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

// 変換器を設定します
$proc = new XSLTProcessor;
$proc->setProfiling('profiling.txt');
$proc->importStyleSheet($xsl); // xsl ルールをアタッチします

echo trim($proc->transformToDoc($xml)->firstChild->wholeText);
?>

上のコードは、ファイルの処理時に次のような情報を出力します。

number               match                name      mode  Calls Tot 100us Avg

    0                   cd                                    2      3      1
    1           collection                                    1      1      1

                         Total                                3      4

User Contributed Notes

There are no user contributed notes for this page.


セキュリティ設定を指定する

  • ≪ XSLTProcessor::setProfiling
  • XSLTProcessor::transformToDoc ≫
  • PHP Manual
  • XSLTProcessor
  • セキュリティ設定を指定する

XSLTProcessor::setSecurityPrefs

(PHP >= 5.4.0, PHP 7, PHP 8)

XSLTProcessor::setSecurityPrefs — セキュリティ設定を指定する

説明

public XSLTProcessor::setSecurityPrefs(int $preferences): int

セキュリティ設定を指定します。

パラメータ

preferences

新しいセキュリティ設定。以下の定数を OR で指定できます。 XSL_SECPREF_READ_FILE、 XSL_SECPREF_WRITE_FILE、 XSL_SECPREF_CREATE_DIRECTORY、 XSL_SECPREF_READ_NETWORK、 XSL_SECPREF_WRITE_NETWORK。あるいは XSL_SECPREF_NONE や XSL_SECPREF_DEFAULT を渡すこともできます。

戻り値

元のセキュリティ設定を返します。

User Contributed Notes

There are no user contributed notes for this page.


ドキュメント に変換する

  • ≪ XSLTProcessor::setSecurityPrefs
  • XSLTProcessor::transformToUri ≫
  • PHP Manual
  • XSLTProcessor
  • ドキュメント に変換する

XSLTProcessor::transformToDoc

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::transformToDoc — ドキュメント に変換する

説明

public XSLTProcessor::transformToDoc(object $document, ?string $returnClass = null): DOMDocument|false

XSLTProcessor::importStylesheet() メソッドで与えられたスタイルシートを適用し、 ソースノードをドキュメント (例: DOMDocument) に変換します。

パラメータ

document

変換される DOMDocument、SimpleXMLElement、または libxml と互換性があるオブジェクトを指定します。

returnClass

XSLTProcessor::transformToDoc() が返すオブジェクトのクラス名を指定する、オプションのパラメータです。ここで指定するクラスは、document と同じものか、それを継承したクラスであるべきです。

戻り値

結果の ドキュメント を返します。 エラーが発生した場合は false を返します。

例

例1 DOMDocument への変換

<?php

// XML ソースをロードする
$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

// 変換の設定を行う
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // XSL ルールを適用する

echo trim($proc->transformToDoc($xml)->firstChild->wholeText);

?>

上の例の出力は以下となります。

Hey! Welcome to Nicolas Eliaszewicz's sweet CD collection!

参考

  • XSLTProcessor::transformToUri() - URI に変換する
  • XSLTProcessor::transformToXml() - XML に変換する

User Contributed Notes

franp at free dot fr 30-Aug-2006 05:16
In most cases if you expect XML (or XHTML) as output you better use transformToXML() directly. You gain better control over xsl:output attributes, notably omit-xml-declaration.

Instead of :
$proc = new XSLTProcessor();
$proc->importStylesheet($xsl);
$dom = $proc->transformToDoc($xml);
echo $dom->saveXML();

do use :
$proc = new XSLTProcessor();
$proc->importStylesheet($xsl);
$newXml = $proc->transformToXML($xml);
echo $newXml;

In the first case, <?xml version="1.0" encoding="utf-8"?> is added whatever you set the omit-xml-declaration while transformToXML() take the attribute into account.


URI に変換する

  • ≪ XSLTProcessor::transformToDoc
  • XSLTProcessor::transformToXml ≫
  • PHP Manual
  • XSLTProcessor
  • URI に変換する

XSLTProcessor::transformToUri

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::transformToUri — URI に変換する

説明

public XSLTProcessor::transformToUri(object $document, string $uri): int

XSLTProcessor::importStylesheet() メソッドで与えられたスタイルシートを適用し、 ソースノードを URI に変換します。

パラメータ

document

変換される DOMDocument または SimpleXMLElement オブジェクトを指定します。

uri

変換先の URI。

戻り値

書き込まれたバイト数。エラーが発生した場合は false 。

例

例1 HTML ファイルへの変換

<?php

// XML ソースをロードする
$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

// 変換の設定を行う
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // XSL ルールを適用する

$proc->transformToURI($xml, 'file:///tmp/out.html');

?>

参考

  • XSLTProcessor::transformToDoc() - ドキュメント に変換する
  • XSLTProcessor::transformToXml() - XML に変換する

User Contributed Notes

jonbarnett at gmail dot com 13-Jul-2007 12:32
Sometimes you don't want to transform to a file, an XML string (because you're using text or html), or a DOMDocument.

To transform to standard output, you can use php://output

<?php
$proc->transformToURI($xml, 'php://output');
?>

To transform to a string (of HTML or text, instead of XML), you can use the above in conjunction with output buffering.
<?php
ob_start();
$proc->transformToURI($xml, 'php://output');
$outputString = ob_get_flush();
?>


XML に変換する

  • ≪ XSLTProcessor::transformToUri
  • GUI用の拡張モジュール ≫
  • PHP Manual
  • XSLTProcessor
  • XML に変換する

XSLTProcessor::transformToXml

(PHP 5, PHP 7, PHP 8)

XSLTProcessor::transformToXml — XML に変換する

説明

public XSLTProcessor::transformToXml(object $document): string|null|false

xsltprocessor::importStylesheet() メソッドで与えられたスタイルシートを適用し、 ソースノードを文字列に変換します。

パラメータ

document

変換される DOMDocument または SimpleXMLElement オブジェクトを指定します。

戻り値

変換結果の文字列。エラーが発生した場合は false 。

例

例1 文字列への変換

<?php

// XML ソースをロードする
$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

// 変換の設定を行う
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // XSL ルールを適用する

echo $proc->transformToXML($xml);

?>

上の例の出力は以下となります。

Hey! Welcome to Nicolas Eliaszewicz's sweet CD collection!

<h1>Fight for your mind</h1><h2>by Ben Harper - 1995</h2><hr>
<h1>Electric Ladyland</h1><h2>by Jimi Hendrix - 1997</h2><hr>

参考

  • XSLTProcessor::transformToDoc() - ドキュメント に変換する
  • XSLTProcessor::transformToUri() - URI に変換する

User Contributed Notes

Josef Hornych 04-Mar-2015 07:42
Note that the method's name is sort of deceiving, because it does not only output XML, but any string that is generated by the processor. It should rather be called transformToString. So if your output method is  "text/plain", for example, this is the way to receive the resulting string.
zweibieren at yahoo dot com 15-Sep-2010 11:15
Entities are omitted from the output with the code above.
The symptom was that &nbsp;
-- which should work with UTF-8 encoding --
did not even get to XSLTProcessor, let alone through it.
After too much hacking I discovered the simple fix:
set substituteEntities to true in the DOMDocument for the XSL file.
That is, replace the loading of the xsl document with

<?php
   $xsl = new DOMDocument;
   $xsl->substituteEntities = true;    // <===added line
   $xsl->load('collection.xsl');
?>

However, this fails when data entries have HTML entity references. (Some database entries may even contain user generated text.) libxml has the pedantic habit of throwing a FATAL error for any undefined entitiy. Solution: hide the entities so libxml doesn't see them.

<?php
function hideEntities($data) {
        return str_replace("&", "&amp;", $data);
}
?>

You could just add this to the example, but it is tidier to define a function to load data into a DOMDocument. This way you don't need entity declarations in catalog.xsl, either.

<?php
// Added function for  Example #1

/** Load an XML file and create a DOMDocument.
Handles arbitrary entities, even undefined ones.
*/
function fileToDOMDoc($filename) {
    $dom= new DOMDocument;
    $xmldata = file_get_contents($filename);
    $xmldata = str_replace("&", "&amp;", $xmldata);  // disguise &s going IN to loadXML()
    $dom->substituteEntities = true;  // collapse &s going OUT to transformToXML()
    $dom->loadXML($xmldata);
    return $dom;
}

// Compare with  Example #1 Transforming to a string

// Load the XML sources
$xml = fileToDOMDoc('collection.xml');
$xsl = fileToDOMDoc('collection.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);

// transform $xml according to the stylesheet $xsl
echo $proc->transformToXML($xml); // transform the data
?>
michael dot weibel at tilllate dot com 03-Dec-2009 01:33
If you retrieve "false" from the transformToXML method, use libxml_get_last_error() or libxml_get_errors() to retrieve the errors.
Charlie Murder 29-Nov-2009 07:43
To prevent your xsl file from automatically prepending

<?xml version="1.0"?>

whilst keeping the output as xml, which is preferable for a validated strict xhtml file, rather specify output as

<xsl:output method="xml" omit-xml-declaration="yes" />
john 05-Feb-2008 11:09
If your xsl doesn't have <html> tags. The output will contain <?xml version="1.0"?>. To fix this you can add the following to your xsl stylesheet:

<xsl:output
method="html" />
smubldg4 at hotmail dot com 02-Oct-2007 08:58
How to fix:: *Fatal error: Call to undefined method domdocument::load()*

If you get this error, visit the php.ini file and try commenting out the following, like this:

;[PHP_DOMXML]
;extension=php_domxml.dll

Suddenly, the wonderfully simple example above works as advertised.
jeandenis dot boivin at gmail dot com 13-Mar-2007 04:59
$domTranObj = $xslProcessor->transformToDoc($domXmlObj);
$domHtmlText = $domTranObj->saveHTML();

Do fix the <meta> for valid XHTML but do not correctly end empty node like <br /> which ouput like this : <br></br>

Some browser note this as 2 different <br /> ...

To fix this use

$domTranObj = $xslProcessor->transformToDoc($domXmlObj);
$domHtmlText = $domTranObj->saveXML();
Thomas Praxl 22-Jan-2007 01:36
I noticed an incompatibility between libxslt (php4) and the transformation through XSLTProcessor.
Php5 and the XSLTProcessor seem to add implicit CDATA-Section-Elements.
If you have an xslt like

<script type="text/javascript">
foo('<xsl:value-of select="bar" />');
</script>

It will result in

<script type="text/javascript"><![CDATA[
foo('xpath-result-of-bar');
]]></script>

(at least for output method="xml" in order to produce strict xhtml with xslt1)

That brings up an error (at least) in Firefox 1.5 as it is no valid javascript.
It should look like that:

<script type="text/javascript">//<![CDATA[
foo('xpath-result-of-bar');
]]></script>

As the CDATA-Section is implicit, I was not able to disable the output or to put a '//' before it.

I tried everything about xsl:text disable-output-escaping="yes"

I also tried to disable implicit adding of CDATA with <output cdata-section-elements="" />
(I thought that would exclude script-tags. It didn't).

The solution:

<xsl:text disable-output-escaping="yes">&lt;script type="text/javascript"&gt;
  foo('</xsl:text><xsl:value-of select="bar" /><xsl:text disable-output-escaping="yes">');
            &lt;/script&gt;</xsl:text>

Simple, but it took me a while.
werner@mollentze 15-Aug-2006 01:53
The transformToXML function can produce valid XHTML output - it honours the <xsl:output> element's attributes, which defines the format of the output document.

For instance, if you want valid XHTML 1.0 Strict output, you can provide the following attribute values for the <xsl:output> element in your XSL stylesheet:

<xsl:output
method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
lsoethout at hotmail dot com 19-Feb-2006 02:35
The function transformToXML has a problem with the meta content type tag. It outputs it like this:

    <meta http-equiv="Content-Type" content="text/html; CHARSET=shift-jis">

which is not correct X(HT)ML, because it closes with '>' instead of with '/>'.

A way to get the output correct is to use instead of transformToXML first transformToDoc anf then saveHTML:

    $domTranObj = $xslProcessor->transformToDoc($domXmlObj);
    $domHtmlText = $domTranObj->saveHTML();
jlipps at mac 06-Jan-2005 08:05
transformToXML, if you have registered PHP functions previously, does indeed attempt to execute these functions when it finds them in a php:function() pseudo-XSL function. It even finds static functions within classes, for instance:

<xsl:value-of select="php:function('MyClass::MyFunction', string(@attr), string(.))" disable-output-escaping="yes"/>

However, in this situation transformToXML does not try to execute "MyClass::MyFunction()". Instead, it executes "myclass:myfunction()". In PHP, since classes and functions are (I think) case-insensitive, this causes no problems.

A problem arises when you are combining these features with the __autoload() feature. So, say I have MyClass.php which contains the MyFunction definition. Generally, if I call MyClass::MyFunction, PHP will pass "MyClass" to __autoload(), and __autoload() will open up "MyClass.php".

What we have just seen, however, means that transformToXML will pass "myclass" to __autoload(), not "MyClass", with the consequence that PHP will try to open "myclass.php", which doesn't exist, instead of "MyClass.php", which does. On case-insensitive operating systems, this is not significant, but on my RedHat server, it is--PHP will give a file not found error.

The only solution I have found is to edit the __autoload() function to look for class names which are used in my XSL files, and manually change them to the correct casing.

Another solution, obviously, is to use all-lowercase class and file names.


GUI用の拡張モジュール

  • UI
    • はじめに
    • インストール/設定
    • UI\Point — Represents a position (x,y)
    • UI\Size — Represents dimensions (width, height)
    • UI\Window — Window
    • UI\Control — Control
    • UI\Menu — Menu
    • UI\MenuItem — Menu Item
    • UI\Area — Area
    • UI\Executor — Execution Scheduler
    • UI\Controls\Tab — Tab Control
    • UI\Controls\Check — Check Control
    • UI\Controls\Button — Button Control
    • UI\Controls\ColorButton — ColorButton Control
    • UI\Controls\Label — Label Control
    • UI\Controls\Entry — Entry Control
    • UI\Controls\MultilineEntry — MultilineEntry Control
    • UI\Controls\Spin — Spin Control
    • UI\Controls\Slider — Slider Control
    • UI\Controls\Progress — Progress Control
    • UI\Controls\Separator — Control Separator
    • UI\Controls\Combo — Combo Control
    • UI\Controls\EditableCombo — EdiableCombo Control
    • UI\Controls\Radio — Radio Control
    • UI\Controls\Picker — Picker Control
    • UI\Controls\Form — Control Form (Arrangement)
    • UI\Controls\Grid — Control Grid (Arrangement)
    • UI\Controls\Group — Control Group (Arrangement)
    • UI\Controls\Box — Control Box (Arrangement)
    • UI\Draw\Pen — Draw Pen
    • UI\Draw\Path — Draw Path
    • UI\Draw\Matrix — Draw Matrix
    • UI\Draw\Color — Color Representation
    • UI\Draw\Stroke — Draw Stroke
    • UI\Draw\Brush — Brushes
    • UI\Draw\Brush\Gradient — Gradient Brushes
    • UI\Draw\Brush\LinearGradient — Linear Gradient
    • UI\Draw\Brush\RadialGradient — Radial Gradient
    • UI\Draw\Text\Layout — Represents Text Layout
    • UI\Draw\Text\Font — Represents a Font
    • UI\Draw\Text\Font\Descriptor — Font Descriptor
    • UI 関数
    • UI\Draw\Text\Font\Weight — Font Weight Settings
    • UI\Draw\Text\Font\Italic — Italic Font Settings
    • UI\Draw\Text\Font\Stretch — Font Stretch Settings
    • UI\Draw\Line\Cap — Line Cap Settings
    • UI\Draw\Line\Join — Line Join Settings
    • UI\Key — Key Identifiers
    • UI\Exception\InvalidArgumentException — InvalidArgumentException
    • UI\Exception\RuntimeException — RuntimeException

User Contributed Notes

There are no user contributed notes for this page.


UI

  • はじめに
  • インストール/設定
    • 要件
    • インストール手順
  • UI\Point — Represents a position (x,y)
    • UI\Point::at — Size Coercion
    • UI\Point::__construct — Construct a new Point
    • UI\Point::getX — Retrieves X
    • UI\Point::getY — Retrieves Y
    • UI\Point::setX — Set X
    • UI\Point::setY — Set Y
  • UI\Size — Represents dimensions (width, height)
    • UI\Size::__construct — Construct a new Size
    • UI\Size::getHeight — Retrieves Height
    • UI\Size::getWidth — Retrives Width
    • UI\Size::of — Point Coercion
    • UI\Size::setHeight — Set Height
    • UI\Size::setWidth — Set Width
  • UI\Window — Window
    • UI\Window::add — Add a Control
    • UI\Window::__construct — Construct a new Window
    • UI\Window::error — Show Error Box
    • UI\Window::getSize — Get Window Size
    • UI\Window::getTitle — Get Title
    • UI\Window::hasBorders — Border Detection
    • UI\Window::hasMargin — Margin Detection
    • UI\Window::isFullScreen — Full Screen Detection
    • UI\Window::msg — Show Message Box
    • UI\Window::onClosing — Closing Callback
    • UI\Window::open — Open Dialog
    • UI\Window::save — Save Dialog
    • UI\Window::setBorders — Border Use
    • UI\Window::setFullScreen — Full Screen Use
    • UI\Window::setMargin — Margin Use
    • UI\Window::setSize — Set Size
    • UI\Window::setTitle — Window Title
  • UI\Control — Control
    • UI\Control::destroy — Destroy Control
    • UI\Control::disable — Disable Control
    • UI\Control::enable — Enable Control
    • UI\Control::getParent — Get Parent Control
    • UI\Control::getTopLevel — Get Top Level
    • UI\Control::hide — Hide Control
    • UI\Control::isEnabled — Determine if Control is enabled
    • UI\Control::isVisible — Determine if Control is visible
    • UI\Control::setParent — Set Parent Control
    • UI\Control::show — Control Show
  • UI\Menu — Menu
    • UI\Menu::append — Append Menu Item
    • UI\Menu::appendAbout — Append About Menu Item
    • UI\Menu::appendCheck — Append Checkable Menu Item
    • UI\Menu::appendPreferences — Append Preferences Menu Item
    • UI\Menu::appendQuit — Append Quit Menu Item
    • UI\Menu::appendSeparator — Append Menu Item Separator
    • UI\Menu::__construct — Construct a new Menu
  • UI\MenuItem — Menu Item
    • UI\MenuItem::disable — Disable Menu Item
    • UI\MenuItem::enable — Enable Menu Item
    • UI\MenuItem::isChecked — Detect Checked
    • UI\MenuItem::onClick — On Click Callback
    • UI\MenuItem::setChecked — Set Checked
  • UI\Area — Area
    • UI\Area::onDraw — Draw Callback
    • UI\Area::onKey — Key Callback
    • UI\Area::onMouse — Mouse Callback
    • UI\Area::redraw — Redraw Area
    • UI\Area::scrollTo — Area Scroll
    • UI\Area::setSize — Set Size
  • UI\Executor — Execution Scheduler
    • UI\Executor::__construct — Construct a new Executor
    • UI\Executor::kill — Stop Executor
    • UI\Executor::onExecute — Execution Callback
    • UI\Executor::setInterval — Interval Manipulation
  • UI\Controls\Tab — Tab Control
    • UI\Controls\Tab::append — Append Page
    • UI\Controls\Tab::delete — Delete Page
    • UI\Controls\Tab::hasMargin — Margin Detection
    • UI\Controls\Tab::insertAt — Insert Page
    • UI\Controls\Tab::pages — Page Count
    • UI\Controls\Tab::setMargin — Set Margin
  • UI\Controls\Check — Check Control
    • UI\Controls\Check::__construct — Construct a new Check
    • UI\Controls\Check::getText — Get Text
    • UI\Controls\Check::isChecked — Checked Detection
    • UI\Controls\Check::onToggle — Toggle Callback
    • UI\Controls\Check::setChecked — Set Checked
    • UI\Controls\Check::setText — Set Text
  • UI\Controls\Button — Button Control
    • UI\Controls\Button::__construct — Construct a new Button
    • UI\Controls\Button::getText — Get Text
    • UI\Controls\Button::onClick — Click Handler
    • UI\Controls\Button::setText — Set Text
  • UI\Controls\ColorButton — ColorButton Control
    • UI\Controls\ColorButton::getColor — Get Color
    • UI\Controls\ColorButton::onChange — Change Handler
    • UI\Controls\ColorButton::setColor — Set Color
  • UI\Controls\Label — Label Control
    • UI\Controls\Label::__construct — Construct a new Label
    • UI\Controls\Label::getText — Get Text
    • UI\Controls\Label::setText — Set Text
  • UI\Controls\Entry — Entry Control
    • UI\Controls\Entry::__construct — Construct a new Entry
    • UI\Controls\Entry::getText — Get Text
    • UI\Controls\Entry::isReadOnly — Detect Read Only
    • UI\Controls\Entry::onChange — Change Handler
    • UI\Controls\Entry::setReadOnly — Set Read Only
    • UI\Controls\Entry::setText — Set Text
  • UI\Controls\MultilineEntry — MultilineEntry Control
    • UI\Controls\MultilineEntry::append — Append Text
    • UI\Controls\MultilineEntry::__construct — Construct a new Multiline Entry
    • UI\Controls\MultilineEntry::getText — Get Text
    • UI\Controls\MultilineEntry::isReadOnly — Read Only Detection
    • UI\Controls\MultilineEntry::onChange — Change Handler
    • UI\Controls\MultilineEntry::setReadOnly — Set Read Only
    • UI\Controls\MultilineEntry::setText — Set Text
  • UI\Controls\Spin — Spin Control
    • UI\Controls\Spin::__construct — Construct a new Spin
    • UI\Controls\Spin::getValue — Get Value
    • UI\Controls\Spin::onChange — Change Handler
    • UI\Controls\Spin::setValue — Set Value
  • UI\Controls\Slider — Slider Control
    • UI\Controls\Slider::__construct — Construct a new Slider
    • UI\Controls\Slider::getValue — Get Value
    • UI\Controls\Slider::onChange — Change Handler
    • UI\Controls\Slider::setValue — Set Value
  • UI\Controls\Progress — Progress Control
    • UI\Controls\Progress::getValue — Get Value
    • UI\Controls\Progress::setValue — Set Value
  • UI\Controls\Separator — Control Separator
    • UI\Controls\Separator::__construct — Construct a new Separator
  • UI\Controls\Combo — Combo Control
    • UI\Controls\Combo::append — Append Option
    • UI\Controls\Combo::getSelected — Get Selected Option
    • UI\Controls\Combo::onSelected — Selected Handler
    • UI\Controls\Combo::setSelected — Set Selected Option
  • UI\Controls\EditableCombo — EdiableCombo Control
    • UI\Controls\EditableCombo::append — Append Option
    • UI\Controls\EditableCombo::getText — Get Text
    • UI\Controls\EditableCombo::onChange — Change Handler
    • UI\Controls\EditableCombo::setText — Set Text
  • UI\Controls\Radio — Radio Control
    • UI\Controls\Radio::append — Append Option
    • UI\Controls\Radio::getSelected — Get Selected Option
    • UI\Controls\Radio::onSelected — Selected Handler
    • UI\Controls\Radio::setSelected — Set Selected Option
  • UI\Controls\Picker — Picker Control
    • UI\Controls\Picker::__construct — Construct a new Picker
  • UI\Controls\Form — Control Form (Arrangement)
    • UI\Controls\Form::append — Append Control
    • UI\Controls\Form::delete — Delete Control
    • UI\Controls\Form::isPadded — Padding Detection
    • UI\Controls\Form::setPadded — Set Padding
  • UI\Controls\Grid — Control Grid (Arrangement)
    • UI\Controls\Grid::append — Append Control
    • UI\Controls\Grid::isPadded — Padding Detection
    • UI\Controls\Grid::setPadded — Set Padding
  • UI\Controls\Group — Control Group (Arrangement)
    • UI\Controls\Group::append — Append Control
    • UI\Controls\Group::__construct — Construct a new Group
    • UI\Controls\Group::getTitle — Get Title
    • UI\Controls\Group::hasMargin — Margin Detection
    • UI\Controls\Group::setMargin — Set Margin
    • UI\Controls\Group::setTitle — Set Title
  • UI\Controls\Box — Control Box (Arrangement)
    • UI\Controls\Box::append — Append Control
    • UI\Controls\Box::__construct — Construct a new Box
    • UI\Controls\Box::delete — Delete Control
    • UI\Controls\Box::getOrientation — Get Orientation
    • UI\Controls\Box::isPadded — Padding Detection
    • UI\Controls\Box::setPadded — Set Padding
  • UI\Draw\Pen — Draw Pen
    • UI\Draw\Pen::clip — Clip a Path
    • UI\Draw\Pen::fill — Fill a Path
    • UI\Draw\Pen::restore — Restore
    • UI\Draw\Pen::save — Save
    • UI\Draw\Pen::stroke — Stroke a Path
    • UI\Draw\Pen::transform — Matrix Transform
    • UI\Draw\Pen::write — Draw Text at Point
  • UI\Draw\Path — Draw Path
    • UI\Draw\Path::addRectangle — Draw a Rectangle
    • UI\Draw\Path::arcTo — Draw an Arc
    • UI\Draw\Path::bezierTo — Draw Bezier Curve
    • UI\Draw\Path::closeFigure — Close Figure
    • UI\Draw\Path::__construct — Construct a new Path
    • UI\Draw\Path::end — Finalize Path
    • UI\Draw\Path::lineTo — Draw a Line
    • UI\Draw\Path::newFigure — Draw Figure
    • UI\Draw\Path::newFigureWithArc — Draw Figure with Arc
  • UI\Draw\Matrix — Draw Matrix
    • UI\Draw\Matrix::invert — Invert Matrix
    • UI\Draw\Matrix::isInvertible — Invertible Detection
    • UI\Draw\Matrix::multiply — Multiply Matrix
    • UI\Draw\Matrix::rotate — Rotate Matrix
    • UI\Draw\Matrix::scale — Scale Matrix
    • UI\Draw\Matrix::skew — Skew Matrix
    • UI\Draw\Matrix::translate — Translate Matrix
  • UI\Draw\Color — Color Representation
    • UI\Draw\Color::__construct — Construct new Color
    • UI\Draw\Color::getChannel — Color Manipulation
    • UI\Draw\Color::setChannel — Color Manipulation
  • UI\Draw\Stroke — Draw Stroke
    • UI\Draw\Stroke::__construct — Construct a new Stroke
    • UI\Draw\Stroke::getCap — Get Line Cap
    • UI\Draw\Stroke::getJoin — Get Line Join
    • UI\Draw\Stroke::getMiterLimit — Get Miter Limit
    • UI\Draw\Stroke::getThickness — Get Thickness
    • UI\Draw\Stroke::setCap — Set Line Cap
    • UI\Draw\Stroke::setJoin — Set Line Join
    • UI\Draw\Stroke::setMiterLimit — Set Miter Limit
    • UI\Draw\Stroke::setThickness — Set Thickness
  • UI\Draw\Brush — Brushes
    • UI\Draw\Brush::__construct — Construct a new Brush
    • UI\Draw\Brush::getColor — Get Color
    • UI\Draw\Brush::setColor — Set Color
  • UI\Draw\Brush\Gradient — Gradient Brushes
    • UI\Draw\Brush\Gradient::addStop — Stop Manipulation
    • UI\Draw\Brush\Gradient::delStop — Stop Manipulation
    • UI\Draw\Brush\Gradient::setStop — Stop Manipulation
  • UI\Draw\Brush\LinearGradient — Linear Gradient
    • UI\Draw\Brush\LinearGradient::__construct — Construct a Linear Gradient
  • UI\Draw\Brush\RadialGradient — Radial Gradient
    • UI\Draw\Brush\RadialGradient::__construct — Construct a new Radial Gradient
  • UI\Draw\Text\Layout — Represents Text Layout
    • UI\Draw\Text\Layout::__construct — Construct a new Text Layout
    • UI\Draw\Text\Layout::setColor — Set Color
    • UI\Draw\Text\Layout::setWidth — Set Width
  • UI\Draw\Text\Font — Represents a Font
    • UI\Draw\Text\Font::__construct — Construct a new Font
    • UI\Draw\Text\Font::getAscent — Font Metrics
    • UI\Draw\Text\Font::getDescent — Font Metrics
    • UI\Draw\Text\Font::getLeading — Font Metrics
    • UI\Draw\Text\Font::getUnderlinePosition — Font Metrics
    • UI\Draw\Text\Font::getUnderlineThickness — Font Metrics
  • UI\Draw\Text\Font\Descriptor — Font Descriptor
    • UI\Draw\Text\Font\Descriptor::__construct — Construct a new Font Descriptor
    • UI\Draw\Text\Font\Descriptor::getFamily — Get Font Family
    • UI\Draw\Text\Font\Descriptor::getItalic — Style Detection
    • UI\Draw\Text\Font\Descriptor::getSize — Size Detection
    • UI\Draw\Text\Font\Descriptor::getStretch — Style Detection
    • UI\Draw\Text\Font\Descriptor::getWeight — Weight Detection
  • UI 関数
    • UI\Draw\Text\Font\fontFamilies — Retrieve Font Families
    • UI\quit — Quit UI Loop
    • UI\run — Enter UI Loop
  • UI\Draw\Text\Font\Weight — Font Weight Settings
  • UI\Draw\Text\Font\Italic — Italic Font Settings
  • UI\Draw\Text\Font\Stretch — Font Stretch Settings
  • UI\Draw\Line\Cap — Line Cap Settings
  • UI\Draw\Line\Join — Line Join Settings
  • UI\Key — Key Identifiers
  • UI\Exception\InvalidArgumentException — InvalidArgumentException
  • UI\Exception\RuntimeException — RuntimeException

User Contributed Notes

There are no user contributed notes for this page.


はじめに

This extension wraps libui to provide an OO API for the cross platform development of native look-and-feel user interfaces .

User Contributed Notes

There are no user contributed notes for this page.


インストール/設定

目次

  • 要件
  • インストール手順

User Contributed Notes

shevegen at gmail dot com 14-Feb-2021 09:01
I believe this example is not correct; for example it shows "cmake" in
use but after you git clone the above URL, there are no cmake files.

So this can not possibly have worked; and I actually don't think there
ever was cmake used in the above repository, which makes you wonder
why the above code used cmake to begin with. Did it ever work? I am not sure;
I tend to assume it did not work.
whirlwind110 at 163 dot com 18-Apr-2017 04:04
Requirements:
    PHP 7
    libui (use current master)
    Windows/MacOSX/Linux (GTK-3)

Install re2c:
    sudo apt install re2c

Install libui:

    git clone https://github.com/andlabs/libui.git
    cd libui
    sudo cp *.h /usr/local/include/
    cmake .
    cd out
    sudo cp * /usr/lib/

Install ui:

    Method one: use pecl:
        sudo pecl install channel://pecl.php.net/ui-2.0.0

    Method two:build source code:
        git clone https://github.com/krakjoe/ui.git
        cd ui
        phpize
        make
        sudo make install

Enable ui.so:
    sudo echo 'extension=ui.so' > /etc/php/7.0/mods-available/ui.ini
    sudo ln -s /etc/php/7.0/mods-available/ui.ini 20-ui.ini

Test:
    php -m
    git clone https://github.com/krakjoe/ui.git
    cd ui/examples/
    php snake.php


要件

Installation requires the libui library, and PHP 7 or newer.

This extension requires the » libui library version 0.1.0 or higher to be installed. See the libui documentation for a list of prerequisites.

User Contributed Notes

There are no user contributed notes for this page.


インストール手順

この » PECL 拡張モジュールは PHP にバンドルされていません。

この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 » https://pecl.php.net/package/ui.

この PECL 拡張モジュールの Windows バイナリ (DLL ファイル) は、PECL のウェブサイトから取得できます。

User Contributed Notes

There are no user contributed notes for this page.


Represents a position (x,y)

(UI 0.9.9)

はじめに

Points are used throughout UI to represent co-ordinates on a screen, control, or area.

クラス概要

final class UI\Point {
/* プロパティ */
public $x;
public $y;
/* Constructor */
public __construct(float $x, float $y)
/* メソッド */
public static at(float $point): UI\Point
public static at(UI\Size $size): UI\Point
public getX(): float
public getY(): float
public setX(float $point)
public setY(float $point)
}

プロパティ

x

Holds the X co-ordinate, can be read/written directly

y

Holds the Y co-ordinate, can be read/written directly

目次

  • UI\Point::at — Size Coercion
  • UI\Point::__construct — Construct a new Point
  • UI\Point::getX — Retrieves X
  • UI\Point::getY — Retrieves Y
  • UI\Point::setX — Set X
  • UI\Point::setY — Set Y

User Contributed Notes

There are no user contributed notes for this page.


Size Coercion

  • ≪ UI\Point
  • UI\Point::__construct ≫
  • PHP Manual
  • UI\Point
  • Size Coercion

UI\Point::at

(UI 1.0.2)

UI\Point::at — Size Coercion

説明

public static UI\Point::at(float $point): UI\Point
public static UI\Point::at(UI\Size $size): UI\Point

Shall return a UI\Point object where x and y are equal to those supplied, either in float or UI\Size form

パラメータ

point

The value for x and y

size

The Size to convert

戻り値

The resulting Point

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Point

  • ≪ UI\Point::at
  • UI\Point::getX ≫
  • PHP Manual
  • UI\Point
  • Construct a new Point

UI\Point::__construct

(UI 0.9.9)

UI\Point::__construct — Construct a new Point

説明

public UI\Point::__construct(float $x, float $y)

Construct a new Point using new co-ordinates

パラメータ

x

The new X co-ordinate

y

The new Y co-ordinate

User Contributed Notes

There are no user contributed notes for this page.


Retrieves X

  • ≪ UI\Point::__construct
  • UI\Point::getY ≫
  • PHP Manual
  • UI\Point
  • Retrieves X

UI\Point::getX

(UI 0.9.9)

UI\Point::getX — Retrieves X

説明

public UI\Point::getX(): float

Retrieves the X co-ordinate

パラメータ

この関数にはパラメータはありません。

戻り値

The current X co-ordinate

User Contributed Notes

There are no user contributed notes for this page.


Retrieves Y

  • ≪ UI\Point::getX
  • UI\Point::setX ≫
  • PHP Manual
  • UI\Point
  • Retrieves Y

UI\Point::getY

(UI 0.9.9)

UI\Point::getY — Retrieves Y

説明

public UI\Point::getY(): float

Retrieves the Y co-ordinate

パラメータ

この関数にはパラメータはありません。

戻り値

The current Y co-ordinate

User Contributed Notes

There are no user contributed notes for this page.


Set X

  • ≪ UI\Point::getY
  • UI\Point::setY ≫
  • PHP Manual
  • UI\Point
  • Set X

UI\Point::setX

(UI 0.9.9)

UI\Point::setX — Set X

説明

public UI\Point::setX(float $point)

Set the X co-ordinate

パラメータ

point

The new X co-ordinate

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Set Y

  • ≪ UI\Point::setX
  • UI\Size ≫
  • PHP Manual
  • UI\Point
  • Set Y

UI\Point::setY

(UI 0.9.9)

UI\Point::setY — Set Y

説明

public UI\Point::setY(float $point)

Set the Y co-ordinate

パラメータ

point

The new Y co-ordinate

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Represents dimensions (width, height)

(UI 0.9.9)

はじめに

Sizes are used throughout UI to represent the size of a screen, control, or area.

クラス概要

final class UI\Size {
/* プロパティ */
public $width;
public $height;
/* Constructor */
public __construct(float $width, float $height)
/* メソッド */
public getHeight(): float
public getWidth(): float
public static of(float $size): UI\Size
public static of(UI\Point $point): UI\Size
public setHeight(float $size)
public setWidth(float $size)
}

プロパティ

width

Holds the width, can be read/written directly

height

Holds the height, can be read/written directly

目次

  • UI\Size::__construct — Construct a new Size
  • UI\Size::getHeight — Retrieves Height
  • UI\Size::getWidth — Retrives Width
  • UI\Size::of — Point Coercion
  • UI\Size::setHeight — Set Height
  • UI\Size::setWidth — Set Width

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Size

  • ≪ UI\Size
  • UI\Size::getHeight ≫
  • PHP Manual
  • UI\Size
  • Construct a new Size

UI\Size::__construct

(UI 0.9.9)

UI\Size::__construct — Construct a new Size

説明

public UI\Size::__construct(float $width, float $height)

Construct a new Size using new width and height

パラメータ

width

The new width

height

The new height

User Contributed Notes

There are no user contributed notes for this page.


Retrieves Height

  • ≪ UI\Size::__construct
  • UI\Size::getWidth ≫
  • PHP Manual
  • UI\Size
  • Retrieves Height

UI\Size::getHeight

(UI 0.9.9)

UI\Size::getHeight — Retrieves Height

説明

public UI\Size::getHeight(): float

Retrieves the Height

パラメータ

この関数にはパラメータはありません。

戻り値

The current Height

User Contributed Notes

There are no user contributed notes for this page.


Retrives Width

  • ≪ UI\Size::getHeight
  • UI\Size::of ≫
  • PHP Manual
  • UI\Size
  • Retrives Width

UI\Size::getWidth

(UI 0.9.9)

UI\Size::getWidth — Retrives Width

説明

public UI\Size::getWidth(): float

Retrieves the Width

パラメータ

この関数にはパラメータはありません。

戻り値

The current Width

User Contributed Notes

There are no user contributed notes for this page.


Point Coercion

  • ≪ UI\Size::getWidth
  • UI\Size::setHeight ≫
  • PHP Manual
  • UI\Size
  • Point Coercion

UI\Size::of

(UI 1.0.2)

UI\Size::of — Point Coercion

説明

public static UI\Size::of(float $size): UI\Size
public static UI\Size::of(UI\Point $point): UI\Size

Shall return a UI\Size object where width and height are equal to those supplied, either in float or UI\Point form

パラメータ

size

The value for width and height

point

The Point to convert

戻り値

The resulting Size

User Contributed Notes

There are no user contributed notes for this page.


Set Height

  • ≪ UI\Size::of
  • UI\Size::setWidth ≫
  • PHP Manual
  • UI\Size
  • Set Height

UI\Size::setHeight

(UI 0.9.9)

UI\Size::setHeight — Set Height

説明

public UI\Size::setHeight(float $size)

Set new Height

パラメータ

size

The new Height

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Set Width

  • ≪ UI\Size::setHeight
  • UI\Window ≫
  • PHP Manual
  • UI\Size
  • Set Width

UI\Size::setWidth

(UI 0.9.9)

UI\Size::setWidth — Set Width

説明

public UI\Size::setWidth(float $size)

Set new Width

パラメータ

size

The new Width

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Window

(UI 0.9.9)

はじめに

Represents a UI Window

クラス概要

class UI\Window extends UI\Control {
/* プロパティ */
protected $controls;
/* Constructor */
public __construct(string $title, Size $size, bool $menu = false)
/* メソッド */
public add(UI\Control $control)
public error(string $title, string $msg)
public getSize(): UI\Size
public getTitle(): string
public hasBorders(): bool
public hasMargin(): bool
public isFullScreen(): bool
public msg(string $title, string $msg)
protected onClosing(): int
public open(): string
public save(): string
public setBorders(bool $borders)
public setFullScreen(bool $full)
public setMargin(bool $margin)
public setSize(UI\Size $size)
public setTitle(string $title)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

プロパティ

controls

Contains controls, should not be manipulated directly

目次

  • UI\Window::add — Add a Control
  • UI\Window::__construct — Construct a new Window
  • UI\Window::error — Show Error Box
  • UI\Window::getSize — Get Window Size
  • UI\Window::getTitle — Get Title
  • UI\Window::hasBorders — Border Detection
  • UI\Window::hasMargin — Margin Detection
  • UI\Window::isFullScreen — Full Screen Detection
  • UI\Window::msg — Show Message Box
  • UI\Window::onClosing — Closing Callback
  • UI\Window::open — Open Dialog
  • UI\Window::save — Save Dialog
  • UI\Window::setBorders — Border Use
  • UI\Window::setFullScreen — Full Screen Use
  • UI\Window::setMargin — Margin Use
  • UI\Window::setSize — Set Size
  • UI\Window::setTitle — Window Title

User Contributed Notes

everton3x at gmail dot com 03-Feb-2017 12:58
This is a example to wizard layout in UI library:

<?php

/*
 * Wizard sample layout builded with PHP UI
 */

use UI\Window;
use UI\Size;
use UI\Controls\Button;
use UI\Controls\Grid;
use UI\Controls\Box;
use UI\Controls\Form;
use UI\Controls\Entry;
use UI\Controls\Label;

/*
 * The window
 */
$window = new Window('Wizard Sample Layout', new Size(640, 480), TRUE);
$window->setMargin(true);

/*
 * Wizard content (sample)
 */
$content = new Form();
$content->setPadded(true);
$content->append('User:', new Entry());
$content->append('Password:', new Entry(Entry::Password));

/*
 * Layout to title, content and buttons
 */
$grid = new Grid();
$grid->setPadded(false);

/*
 * Title
 */
$grid->append(new Label('Wizard Sample'), 0, 0, 6, 1, true, Grid::Fill, false, Grid::Fill);

/*
 * Append content
 */
$grid->append($content, 0, 1, 6, 1, false, Grid::Fill, true, Grid::Fill);

/*
 * Left buttons
 */
$left_box = new Box(Box::Horizontal);
$left_box->append(new Button('&About'));
$left_box->append(new Button('&Help'));

/*
 * Right buttons
 */
$right_box = new Box(Box::Horizontal);
$right_box->append(new Button('&Back'));
$right_box->append(new Button('&Forward'));
$right_box->append(new Button('&Close'));

/**
 * Append buttons
 */
$grid->append($left_box, 0, 2, 1, 1, true, Grid::Start, false, Grid::Fill);
$grid->append($right_box, 5, 2, 1, 1, true, Grid::End, false, Grid::Fill);

/*
 * Append layout and show.
 */
$window->add($grid);

$window->show();

UI\run();

?>


Add a Control

  • ≪ UI\Window
  • UI\Window::__construct ≫
  • PHP Manual
  • UI\Window
  • Add a Control

UI\Window::add

(UI 0.9.9)

UI\Window::add — Add a Control

説明

public UI\Window::add(UI\Control $control)

Shall add a Control to this Window

パラメータ

control

The Control to add

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Window

  • ≪ UI\Window::add
  • UI\Window::error ≫
  • PHP Manual
  • UI\Window
  • Construct a new Window

UI\Window::__construct

(UI 0.9.9)

UI\Window::__construct — Construct a new Window

説明

public UI\Window::__construct(string $title, Size $size, bool $menu = false)

Shall construct a new Window

パラメータ

title

The title of the Window

size

The size of the Window

menu

Menu switch

User Contributed Notes

There are no user contributed notes for this page.


Show Error Box

  • ≪ UI\Window::__construct
  • UI\Window::getSize ≫
  • PHP Manual
  • UI\Window
  • Show Error Box

UI\Window::error

(UI 0.9.9)

UI\Window::error — Show Error Box

説明

public UI\Window::error(string $title, string $msg)

Shall show an error box

パラメータ

title

The title of the error box

msg

The message for the error box

User Contributed Notes

There are no user contributed notes for this page.


Get Window Size

  • ≪ UI\Window::error
  • UI\Window::getTitle ≫
  • PHP Manual
  • UI\Window
  • Get Window Size

UI\Window::getSize

(UI 0.9.9)

UI\Window::getSize — Get Window Size

説明

public UI\Window::getSize(): UI\Size

Shall return the size of this Window

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Get Title

  • ≪ UI\Window::getSize
  • UI\Window::hasBorders ≫
  • PHP Manual
  • UI\Window
  • Get Title

UI\Window::getTitle

(UI 0.9.9)

UI\Window::getTitle — Get Title

説明

public UI\Window::getTitle(): string

Shall retrieve the title of this Window

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Border Detection

  • ≪ UI\Window::getTitle
  • UI\Window::hasMargin ≫
  • PHP Manual
  • UI\Window
  • Border Detection

UI\Window::hasBorders

(UI 0.9.9)

UI\Window::hasBorders — Border Detection

説明

public UI\Window::hasBorders(): bool

Shall detect if borders are used on this Window

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Margin Detection

  • ≪ UI\Window::hasBorders
  • UI\Window::isFullScreen ≫
  • PHP Manual
  • UI\Window
  • Margin Detection

UI\Window::hasMargin

(UI 0.9.9)

UI\Window::hasMargin — Margin Detection

説明

public UI\Window::hasMargin(): bool

Shall detect if margins are used on this Window

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Full Screen Detection

  • ≪ UI\Window::hasMargin
  • UI\Window::msg ≫
  • PHP Manual
  • UI\Window
  • Full Screen Detection

UI\Window::isFullScreen

(UI 0.9.9)

UI\Window::isFullScreen — Full Screen Detection

説明

public UI\Window::isFullScreen(): bool

Shall detect if this Window us using the whole screen

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Show Message Box

  • ≪ UI\Window::isFullScreen
  • UI\Window::onClosing ≫
  • PHP Manual
  • UI\Window
  • Show Message Box

UI\Window::msg

(UI 0.9.9)

UI\Window::msg — Show Message Box

説明

public UI\Window::msg(string $title, string $msg)

Shall show a message box

パラメータ

title

The title of the message box

msg

The message

User Contributed Notes

There are no user contributed notes for this page.


Closing Callback

  • ≪ UI\Window::msg
  • UI\Window::open ≫
  • PHP Manual
  • UI\Window
  • Closing Callback

UI\Window::onClosing

(UI 0.9.9)

UI\Window::onClosing — Closing Callback

説明

protected UI\Window::onClosing(): int

Should gracefully destroy this Window

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Open Dialog

  • ≪ UI\Window::onClosing
  • UI\Window::save ≫
  • PHP Manual
  • UI\Window
  • Open Dialog

UI\Window::open

(UI 0.9.9)

UI\Window::open — Open Dialog

説明

public UI\Window::open(): string

Shall show an open file dialog

パラメータ

この関数にはパラメータはありません。

戻り値

Returns the name of the file selected for opening

User Contributed Notes

There are no user contributed notes for this page.


Save Dialog

  • ≪ UI\Window::open
  • UI\Window::setBorders ≫
  • PHP Manual
  • UI\Window
  • Save Dialog

UI\Window::save

(UI 0.9.9)

UI\Window::save — Save Dialog

説明

public UI\Window::save(): string

Shall show a save dialog

パラメータ

この関数にはパラメータはありません。

戻り値

Returns the file name selecting for saving

User Contributed Notes

There are no user contributed notes for this page.


Border Use

  • ≪ UI\Window::save
  • UI\Window::setFullScreen ≫
  • PHP Manual
  • UI\Window
  • Border Use

UI\Window::setBorders

(UI 0.9.9)

UI\Window::setBorders — Border Use

説明

public UI\Window::setBorders(bool $borders)

Shall enable or disable the use of borders on this Window

パラメータ

borders

User Contributed Notes

There are no user contributed notes for this page.


Full Screen Use

  • ≪ UI\Window::setBorders
  • UI\Window::setMargin ≫
  • PHP Manual
  • UI\Window
  • Full Screen Use

UI\Window::setFullScreen

(UI 0.9.9)

UI\Window::setFullScreen — Full Screen Use

説明

public UI\Window::setFullScreen(bool $full)

Shall enable or disable the use of the full screen for this Window

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

full

User Contributed Notes

There are no user contributed notes for this page.


Margin Use

  • ≪ UI\Window::setFullScreen
  • UI\Window::setSize ≫
  • PHP Manual
  • UI\Window
  • Margin Use

UI\Window::setMargin

(UI 0.9.9)

UI\Window::setMargin — Margin Use

説明

public UI\Window::setMargin(bool $margin)

Shall enable or disable the use of margins for this Window

パラメータ

margin

User Contributed Notes

There are no user contributed notes for this page.


Set Size

  • ≪ UI\Window::setMargin
  • UI\Window::setTitle ≫
  • PHP Manual
  • UI\Window
  • Set Size

UI\Window::setSize

(UI 0.9.9)

UI\Window::setSize — Set Size

説明

public UI\Window::setSize(UI\Size $size)

Shall set the size of this Window

パラメータ

size

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Window Title

  • ≪ UI\Window::setSize
  • UI\Control ≫
  • PHP Manual
  • UI\Window
  • Window Title

UI\Window::setTitle

(UI 0.9.9)

UI\Window::setTitle — Window Title

説明

public UI\Window::setTitle(string $title)

Shall set the title for this Window

パラメータ

title

The new title

User Contributed Notes

There are no user contributed notes for this page.


Control

(UI 0.9.9)

はじめに

This is the closed base class for all UI Controls.

クラス概要

final class UI\Control {
/* メソッド */
public destroy()
public disable()
public enable()
public getParent(): UI\Control
public getTopLevel(): int
public hide()
public isEnabled(): bool
public isVisible(): bool
public setParent(UI\Control $parent)
public show()
}

目次

  • UI\Control::destroy — Destroy Control
  • UI\Control::disable — Disable Control
  • UI\Control::enable — Enable Control
  • UI\Control::getParent — Get Parent Control
  • UI\Control::getTopLevel — Get Top Level
  • UI\Control::hide — Hide Control
  • UI\Control::isEnabled — Determine if Control is enabled
  • UI\Control::isVisible — Determine if Control is visible
  • UI\Control::setParent — Set Parent Control
  • UI\Control::show — Control Show

User Contributed Notes

There are no user contributed notes for this page.


Destroy Control

  • ≪ UI\Control
  • UI\Control::disable ≫
  • PHP Manual
  • UI\Control
  • Destroy Control

UI\Control::destroy

(UI 0.9.9)

UI\Control::destroy — Destroy Control

説明

public UI\Control::destroy()

Shall destroy this Control

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Disable Control

  • ≪ UI\Control::destroy
  • UI\Control::enable ≫
  • PHP Manual
  • UI\Control
  • Disable Control

UI\Control::disable

(UI 0.9.9)

UI\Control::disable — Disable Control

説明

public UI\Control::disable()

Shall disable this Control

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Enable Control

  • ≪ UI\Control::disable
  • UI\Control::getParent ≫
  • PHP Manual
  • UI\Control
  • Enable Control

UI\Control::enable

(UI 0.9.9)

UI\Control::enable — Enable Control

説明

public UI\Control::enable()

Shall enable this Control

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Get Parent Control

  • ≪ UI\Control::enable
  • UI\Control::getTopLevel ≫
  • PHP Manual
  • UI\Control
  • Get Parent Control

UI\Control::getParent

(UI 0.9.9)

UI\Control::getParent — Get Parent Control

説明

public UI\Control::getParent(): UI\Control

Shall return the parent Control

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Get Top Level

  • ≪ UI\Control::getParent
  • UI\Control::hide ≫
  • PHP Manual
  • UI\Control
  • Get Top Level

UI\Control::getTopLevel

(UI 0.9.9)

UI\Control::getTopLevel — Get Top Level

説明

public UI\Control::getTopLevel(): int

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Hide Control

  • ≪ UI\Control::getTopLevel
  • UI\Control::isEnabled ≫
  • PHP Manual
  • UI\Control
  • Hide Control

UI\Control::hide

(UI 0.9.9)

UI\Control::hide — Hide Control

説明

public UI\Control::hide()

Shall hide this Control

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Determine if Control is enabled

  • ≪ UI\Control::hide
  • UI\Control::isVisible ≫
  • PHP Manual
  • UI\Control
  • Determine if Control is enabled

UI\Control::isEnabled

(UI 0.9.9)

UI\Control::isEnabled — Determine if Control is enabled

説明

public UI\Control::isEnabled(): bool

Shall detect if this Control is enabled

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Determine if Control is visible

  • ≪ UI\Control::isEnabled
  • UI\Control::setParent ≫
  • PHP Manual
  • UI\Control
  • Determine if Control is visible

UI\Control::isVisible

(UI 0.9.9)

UI\Control::isVisible — Determine if Control is visible

説明

public UI\Control::isVisible(): bool

Shall detect if this Control is visible

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Set Parent Control

  • ≪ UI\Control::isVisible
  • UI\Control::show ≫
  • PHP Manual
  • UI\Control
  • Set Parent Control

UI\Control::setParent

(UI 0.9.9)

UI\Control::setParent — Set Parent Control

説明

public UI\Control::setParent(UI\Control $parent)

Shall set the parent Control of this Control

パラメータ

parent

The parent Control

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Control Show

  • ≪ UI\Control::setParent
  • UI\Menu ≫
  • PHP Manual
  • UI\Control
  • Control Show

UI\Control::show

(UI 0.9.9)

UI\Control::show — Control Show

説明

public UI\Control::show()

Shall show this Control

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Menu

(UI 0.9.9)

はじめに

Menus must be constructed before the first Window, and can be shown on any Window

クラス概要

class UI\Menu {
/* Constructor */
public __construct(string $name)
/* メソッド */
public append(string $name, string $type = UI\MenuItem::class): UI\MenuItem
public appendAbout(string $type = UI\MenuItem::class): UI\MenuItem
public appendCheck(string $name, string $type = UI\MenuItem::class): UI\MenuItem
public appendPreferences(string $type = UI\MenuItem::class): UI\MenuItem
public appendQuit(string $type = UI\MenuItem::class): UI\MenuItem
public appendSeparator()
}

目次

  • UI\Menu::append — Append Menu Item
  • UI\Menu::appendAbout — Append About Menu Item
  • UI\Menu::appendCheck — Append Checkable Menu Item
  • UI\Menu::appendPreferences — Append Preferences Menu Item
  • UI\Menu::appendQuit — Append Quit Menu Item
  • UI\Menu::appendSeparator — Append Menu Item Separator
  • UI\Menu::__construct — Construct a new Menu

User Contributed Notes

There are no user contributed notes for this page.


Append Menu Item

  • ≪ UI\Menu
  • UI\Menu::appendAbout ≫
  • PHP Manual
  • UI\Menu
  • Append Menu Item

UI\Menu::append

(UI 0.9.9)

UI\Menu::append — Append Menu Item

説明

public UI\Menu::append(string $name, string $type = UI\MenuItem::class): UI\MenuItem

Shall append a new Menu Item

パラメータ

name

The name (text) for the new item

type

The type for the new item

戻り値

A constructed object of the given type

User Contributed Notes

There are no user contributed notes for this page.


Append About Menu Item

  • ≪ UI\Menu::append
  • UI\Menu::appendCheck ≫
  • PHP Manual
  • UI\Menu
  • Append About Menu Item

UI\Menu::appendAbout

(UI 0.9.9)

UI\Menu::appendAbout — Append About Menu Item

説明

public UI\Menu::appendAbout(string $type = UI\MenuItem::class): UI\MenuItem

Shall append an About menu item

パラメータ

type

The type for the new item

戻り値

A constructed About menu item of the given type

User Contributed Notes

There are no user contributed notes for this page.


Append Checkable Menu Item

  • ≪ UI\Menu::appendAbout
  • UI\Menu::appendPreferences ≫
  • PHP Manual
  • UI\Menu
  • Append Checkable Menu Item

UI\Menu::appendCheck

(UI 0.9.9)

UI\Menu::appendCheck — Append Checkable Menu Item

説明

public UI\Menu::appendCheck(string $name, string $type = UI\MenuItem::class): UI\MenuItem

Shall append a checkable menu item

パラメータ

name

The name (text) for the new item

type

The type for the new item

戻り値

A constructed checkable menu item of the given type

User Contributed Notes

There are no user contributed notes for this page.


Append Preferences Menu Item

  • ≪ UI\Menu::appendCheck
  • UI\Menu::appendQuit ≫
  • PHP Manual
  • UI\Menu
  • Append Preferences Menu Item

UI\Menu::appendPreferences

(UI 0.9.9)

UI\Menu::appendPreferences — Append Preferences Menu Item

説明

public UI\Menu::appendPreferences(string $type = UI\MenuItem::class): UI\MenuItem

Shall append a Preferences menu item

パラメータ

type

The type for the new item

戻り値

A constructed Preferences menu item of the given type

User Contributed Notes

There are no user contributed notes for this page.


Append Quit Menu Item

  • ≪ UI\Menu::appendPreferences
  • UI\Menu::appendSeparator ≫
  • PHP Manual
  • UI\Menu
  • Append Quit Menu Item

UI\Menu::appendQuit

(UI 0.9.9)

UI\Menu::appendQuit — Append Quit Menu Item

説明

public UI\Menu::appendQuit(string $type = UI\MenuItem::class): UI\MenuItem

Shall append a Quit menu item

パラメータ

type

The type for the new item

戻り値

A constructed Quit menu item of the given type

User Contributed Notes

There are no user contributed notes for this page.


Append Menu Item Separator

  • ≪ UI\Menu::appendQuit
  • UI\Menu::__construct ≫
  • PHP Manual
  • UI\Menu
  • Append Menu Item Separator

UI\Menu::appendSeparator

(UI 0.9.9)

UI\Menu::appendSeparator — Append Menu Item Separator

説明

public UI\Menu::appendSeparator()

Shall append a separator

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Menu

  • ≪ UI\Menu::appendSeparator
  • UI\MenuItem ≫
  • PHP Manual
  • UI\Menu
  • Construct a new Menu

UI\Menu::__construct

(UI 0.9.9)

UI\Menu::__construct — Construct a new Menu

説明

public UI\Menu::__construct(string $name)

Shall construct a new Menu

パラメータ

name

The name (text) for the menu

User Contributed Notes

There are no user contributed notes for this page.


Menu Item

(UI 0.9.9)

はじめに

Menu Items should only be created by the Menu

クラス概要

class UI\MenuItem {
/* メソッド */
public disable()
public enable()
public isChecked(): bool
protected onClick()
public setChecked(bool $checked)
}

目次

  • UI\MenuItem::disable — Disable Menu Item
  • UI\MenuItem::enable — Enable Menu Item
  • UI\MenuItem::isChecked — Detect Checked
  • UI\MenuItem::onClick — On Click Callback
  • UI\MenuItem::setChecked — Set Checked

User Contributed Notes

There are no user contributed notes for this page.


Disable Menu Item

  • ≪ UI\MenuItem
  • UI\MenuItem::enable ≫
  • PHP Manual
  • UI\MenuItem
  • Disable Menu Item

UI\MenuItem::disable

(UI 0.9.9)

UI\MenuItem::disable — Disable Menu Item

説明

public UI\MenuItem::disable()

Shall disable this Menu Item

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Enable Menu Item

  • ≪ UI\MenuItem::disable
  • UI\MenuItem::isChecked ≫
  • PHP Manual
  • UI\MenuItem
  • Enable Menu Item

UI\MenuItem::enable

(UI 0.9.9)

UI\MenuItem::enable — Enable Menu Item

説明

public UI\MenuItem::enable()

Shall enable this Menu Item

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Detect Checked

  • ≪ UI\MenuItem::enable
  • UI\MenuItem::onClick ≫
  • PHP Manual
  • UI\MenuItem
  • Detect Checked

UI\MenuItem::isChecked

(UI 0.9.9)

UI\MenuItem::isChecked — Detect Checked

説明

public UI\MenuItem::isChecked(): bool

Shall detect if this Menu Item is checked

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


On Click Callback

  • ≪ UI\MenuItem::isChecked
  • UI\MenuItem::setChecked ≫
  • PHP Manual
  • UI\MenuItem
  • On Click Callback

UI\MenuItem::onClick

(UI 0.9.9)

UI\MenuItem::onClick — On Click Callback

説明

protected UI\MenuItem::onClick()

Shall be executed when this Menu Item is clicked

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Checked

  • ≪ UI\MenuItem::onClick
  • UI\Area ≫
  • PHP Manual
  • UI\MenuItem
  • Set Checked

UI\MenuItem::setChecked

(UI 0.9.9)

UI\MenuItem::setChecked — Set Checked

説明

public UI\MenuItem::setChecked(bool $checked)

Shall set the checked status of this Menu Item

パラメータ

checked

The new status

User Contributed Notes

There are no user contributed notes for this page.


Area

(UI 0.9.9)

はじめに

An Area represents a canvas which can be used to draw, and respond to mouse and key events.

クラス概要

class UI\Area extends UI\Control {
/* 定数 */
const int Ctrl;
const int Alt;
const int Shift;
const int Super;
const int Down;
const int Up;
/* メソッド */
protected onDraw(
UI\Draw\Pen $pen,
UI\Size $areaSize,
UI\Point $clipPoint,
UI\Size $clipSize
)
protected onKey(string $key, int $ext, int $flags)
protected onMouse(UI\Point $areaPoint, UI\Size $areaSize, int $flags)
public redraw()
public scrollTo(UI\Point $point, UI\Size $size)
public setSize(UI\Size $size)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

定義済み定数

UI\Area::Ctrl

Shall be set in the modifiers passed to key and mouse events when the CTRL key is active

UI\Area::Alt

Shall be set in the modifiers passed to key and mouse events when the ALT key is active

UI\Area::Shift

Shall be set in the modifiers passed to key and mouse events when the SHIFT key is active

UI\Area::Super

UI\Area::Down

Shall be set in the modifiers passed to key and mouse events

UI\Area::Up

Shall be set in the modifiers passed to key and mouse events

目次

  • UI\Area::onDraw — Draw Callback
  • UI\Area::onKey — Key Callback
  • UI\Area::onMouse — Mouse Callback
  • UI\Area::redraw — Redraw Area
  • UI\Area::scrollTo — Area Scroll
  • UI\Area::setSize — Set Size

User Contributed Notes

There are no user contributed notes for this page.


Draw Callback

  • ≪ UI\Area
  • UI\Area::onKey ≫
  • PHP Manual
  • UI\Area
  • Draw Callback

UI\Area::onDraw

(UI 0.9.9)

UI\Area::onDraw — Draw Callback

説明

protected UI\Area::onDraw(
UI\Draw\Pen $pen,
UI\Size $areaSize,
UI\Point $clipPoint,
UI\Size $clipSize
)

Shall be invoked when this Area requires redrawing

パラメータ

pen

A Pen suitable for drawing in this Area

areaSize

The size of the Area

clipPoint

The clip point of the Area

clipSize

The clip size of the Area

User Contributed Notes

There are no user contributed notes for this page.


Key Callback

  • ≪ UI\Area::onDraw
  • UI\Area::onMouse ≫
  • PHP Manual
  • UI\Area
  • Key Callback

UI\Area::onKey

(UI 0.9.9)

UI\Area::onKey — Key Callback

説明

protected UI\Area::onKey(string $key, int $ext, int $flags)

Shall be executed on key events

パラメータ

key

The key pressed

ext

The extended key pressed

flags

Event modifiers

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Mouse Callback

  • ≪ UI\Area::onKey
  • UI\Area::redraw ≫
  • PHP Manual
  • UI\Area
  • Mouse Callback

UI\Area::onMouse

(UI 0.9.9)

UI\Area::onMouse — Mouse Callback

説明

protected UI\Area::onMouse(UI\Point $areaPoint, UI\Size $areaSize, int $flags)

Shall be executed on mouse events

パラメータ

areaPoint

The co-ordinates of the event

areaSize

The size of the area of the event

flags

Event modifiers

User Contributed Notes

There are no user contributed notes for this page.


Redraw Area

  • ≪ UI\Area::onMouse
  • UI\Area::scrollTo ≫
  • PHP Manual
  • UI\Area
  • Redraw Area

UI\Area::redraw

(UI 0.9.9)

UI\Area::redraw — Redraw Area

説明

public UI\Area::redraw()

Requests that this Area is redrawn

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Area Scroll

  • ≪ UI\Area::redraw
  • UI\Area::setSize ≫
  • PHP Manual
  • UI\Area
  • Area Scroll

UI\Area::scrollTo

(UI 0.9.9)

UI\Area::scrollTo — Area Scroll

説明

public UI\Area::scrollTo(UI\Point $point, UI\Size $size)

Scroll this Area

パラメータ

point

The point to scroll to

size

The size of the scroll pane

User Contributed Notes

There are no user contributed notes for this page.


Set Size

  • ≪ UI\Area::scrollTo
  • UI\Executor ≫
  • PHP Manual
  • UI\Area
  • Set Size

UI\Area::setSize

(UI 0.9.9)

UI\Area::setSize — Set Size

説明

public UI\Area::setSize(UI\Size $size)

Sets the size of this Area

パラメータ

size

The new size

User Contributed Notes

There are no user contributed notes for this page.


Execution Scheduler

(UI 2.0.0)

はじめに

This facility schedules repetitive execution of a callback, useful for animations and other such activities.

クラス概要

abstract class UI\Executor {
/* Constructor */
public __construct()
public __construct(int $microseconds)
public __construct(int $seconds, int $microseconds)
/* メソッド */
public kill(): void
abstract protected onExecute(): void
public setInterval(int $microseconds): bool
public setInterval(int $seconds, int $microseconds): bool
}

目次

  • UI\Executor::__construct — Construct a new Executor
  • UI\Executor::kill — Stop Executor
  • UI\Executor::onExecute — Execution Callback
  • UI\Executor::setInterval — Interval Manipulation

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Executor

  • ≪ UI\Executor
  • UI\Executor::kill ≫
  • PHP Manual
  • UI\Executor
  • Construct a new Executor

UI\Executor::__construct

(UI 2.0.0)

UI\Executor::__construct — Construct a new Executor

説明

public UI\Executor::__construct()
public UI\Executor::__construct(int $microseconds)
public UI\Executor::__construct(int $seconds, int $microseconds)

Shall construct an executor with the given interval, will not start executing until main loop is entered

パラメータ

seconds

Seconds between executions

microseconds

Microseconds between executions

User Contributed Notes

There are no user contributed notes for this page.


Stop Executor

  • ≪ UI\Executor::__construct
  • UI\Executor::onExecute ≫
  • PHP Manual
  • UI\Executor
  • Stop Executor

UI\Executor::kill

(UI 2.0.0)

UI\Executor::kill — Stop Executor

説明

public UI\Executor::kill(): void

Shall stop an executor, the executor cannot be restarted

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Execution Callback

  • ≪ UI\Executor::kill
  • UI\Executor::setInterval ≫
  • PHP Manual
  • UI\Executor
  • Execution Callback

UI\Executor::onExecute

(UI 2.0.0)

UI\Executor::onExecute — Execution Callback

説明

abstract protected UI\Executor::onExecute(): void

Shall be repetitively queued for execution in the main thread

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Interval Manipulation

  • ≪ UI\Executor::onExecute
  • UI\Controls\Tab ≫
  • PHP Manual
  • UI\Executor
  • Interval Manipulation

UI\Executor::setInterval

(UI 2.0.0)

UI\Executor::setInterval — Interval Manipulation

説明

public UI\Executor::setInterval(int $microseconds): bool
public UI\Executor::setInterval(int $seconds, int $microseconds): bool

Shall set the new interval. An interval of 0 will pause the executor until a new interval has been set

パラメータ

seconds

microseconds

戻り値

Indication of success

User Contributed Notes

There are no user contributed notes for this page.


Tab Control

(UI 0.9.9)

はじめに

A Tab can contain many pages of Controls, each with a title, each selectable by the user.

クラス概要

class UI\Controls\Tab extends UI\Control {
/* プロパティ */
protected $controls;
/* メソッド */
public append(string $name, UI\Control $control): int
public delete(int $index): bool
public hasMargin(int $page): bool
public insertAt(string $name, int $page, UI\Control $control)
public pages(): int
public setMargin(int $page, bool $margin)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

プロパティ

controls

Contains controls, should not be manipulated directly

目次

  • UI\Controls\Tab::append — Append Page
  • UI\Controls\Tab::delete — Delete Page
  • UI\Controls\Tab::hasMargin — Margin Detection
  • UI\Controls\Tab::insertAt — Insert Page
  • UI\Controls\Tab::pages — Page Count
  • UI\Controls\Tab::setMargin — Set Margin

User Contributed Notes

There are no user contributed notes for this page.


Append Page

  • ≪ UI\Controls\Tab
  • UI\Controls\Tab::delete ≫
  • PHP Manual
  • UI\Controls\Tab
  • Append Page

UI\Controls\Tab::append

(UI 0.9.9)

UI\Controls\Tab::append — Append Page

説明

public UI\Controls\Tab::append(string $name, UI\Control $control): int

Append a new page to this Tab

パラメータ

name

The name for the new page

control

The control for the new page

戻り値

Shall return the index of the appended control, may be 0

User Contributed Notes

There are no user contributed notes for this page.


Delete Page

  • ≪ UI\Controls\Tab::append
  • UI\Controls\Tab::hasMargin ≫
  • PHP Manual
  • UI\Controls\Tab
  • Delete Page

UI\Controls\Tab::delete

(UI 0.9.9)

UI\Controls\Tab::delete — Delete Page

説明

public UI\Controls\Tab::delete(int $index): bool

Shall remove the selected page from this Tab

パラメータ

index

The index of the page to remove

戻り値

Indication of success

User Contributed Notes

There are no user contributed notes for this page.


Margin Detection

  • ≪ UI\Controls\Tab::delete
  • UI\Controls\Tab::insertAt ≫
  • PHP Manual
  • UI\Controls\Tab
  • Margin Detection

UI\Controls\Tab::hasMargin

(UI 0.9.9)

UI\Controls\Tab::hasMargin — Margin Detection

説明

public UI\Controls\Tab::hasMargin(int $page): bool

Shall detect if the given page has a margin.

パラメータ

page

The index of the page

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Insert Page

  • ≪ UI\Controls\Tab::hasMargin
  • UI\Controls\Tab::pages ≫
  • PHP Manual
  • UI\Controls\Tab
  • Insert Page

UI\Controls\Tab::insertAt

(UI 0.9.9)

UI\Controls\Tab::insertAt — Insert Page

説明

public UI\Controls\Tab::insertAt(string $name, int $page, UI\Control $control)

Shall insert a new page into this Tab

パラメータ

name

The name for the new page

page

The index to perform the insertion before

control

The control for the new page

User Contributed Notes

There are no user contributed notes for this page.


Page Count

  • ≪ UI\Controls\Tab::insertAt
  • UI\Controls\Tab::setMargin ≫
  • PHP Manual
  • UI\Controls\Tab
  • Page Count

UI\Controls\Tab::pages

(UI 0.9.9)

UI\Controls\Tab::pages — Page Count

説明

public UI\Controls\Tab::pages(): int

Shall return the number of pages in this Tab

パラメータ

この関数にはパラメータはありません。

戻り値

The number of pages in this Tab

User Contributed Notes

There are no user contributed notes for this page.


Set Margin

  • ≪ UI\Controls\Tab::pages
  • UI\Controls\Check ≫
  • PHP Manual
  • UI\Controls\Tab
  • Set Margin

UI\Controls\Tab::setMargin

(UI 0.9.9)

UI\Controls\Tab::setMargin — Set Margin

説明

public UI\Controls\Tab::setMargin(int $page, bool $margin)

Shall enable or disable margins on the selected page

パラメータ

page

The page to select

margin

Margin switch

User Contributed Notes

There are no user contributed notes for this page.


Check Control

(UI 0.9.9)

はじめに

A Check is a labelled checkable box

クラス概要

class UI\Controls\Check extends UI\Control {
/* Constructor */
public __construct(string $text)
/* メソッド */
public getText(): string
public isChecked(): bool
protected onToggle()
public setChecked(bool $checked)
public setText(string $text)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Check::__construct — Construct a new Check
  • UI\Controls\Check::getText — Get Text
  • UI\Controls\Check::isChecked — Checked Detection
  • UI\Controls\Check::onToggle — Toggle Callback
  • UI\Controls\Check::setChecked — Set Checked
  • UI\Controls\Check::setText — Set Text

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Check

  • ≪ UI\Controls\Check
  • UI\Controls\Check::getText ≫
  • PHP Manual
  • UI\Controls\Check
  • Construct a new Check

UI\Controls\Check::__construct

(UI 0.9.9)

UI\Controls\Check::__construct — Construct a new Check

説明

public UI\Controls\Check::__construct(string $text)

Shall construct a new Check

パラメータ

text

The text (label) for the Check box

User Contributed Notes

There are no user contributed notes for this page.


Get Text

  • ≪ UI\Controls\Check::__construct
  • UI\Controls\Check::isChecked ≫
  • PHP Manual
  • UI\Controls\Check
  • Get Text

UI\Controls\Check::getText

(UI 0.9.9)

UI\Controls\Check::getText — Get Text

説明

public UI\Controls\Check::getText(): string

Shall return the text (label) for this Check

パラメータ

この関数にはパラメータはありません。

戻り値

The current text (label)

User Contributed Notes

There are no user contributed notes for this page.


Checked Detection

  • ≪ UI\Controls\Check::getText
  • UI\Controls\Check::onToggle ≫
  • PHP Manual
  • UI\Controls\Check
  • Checked Detection

UI\Controls\Check::isChecked

(UI 0.9.9)

UI\Controls\Check::isChecked — Checked Detection

説明

public UI\Controls\Check::isChecked(): bool

Shall detect the status of this Check

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Toggle Callback

  • ≪ UI\Controls\Check::isChecked
  • UI\Controls\Check::setChecked ≫
  • PHP Manual
  • UI\Controls\Check
  • Toggle Callback

UI\Controls\Check::onToggle

(UI 0.9.9)

UI\Controls\Check::onToggle — Toggle Callback

説明

protected UI\Controls\Check::onToggle()

Shall be executed when the status of this Check is changed

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Checked

  • ≪ UI\Controls\Check::onToggle
  • UI\Controls\Check::setText ≫
  • PHP Manual
  • UI\Controls\Check
  • Set Checked

UI\Controls\Check::setChecked

(UI 0.9.9)

UI\Controls\Check::setChecked — Set Checked

説明

public UI\Controls\Check::setChecked(bool $checked)

Shall change the status of this Check

パラメータ

checked

The new status

User Contributed Notes

There are no user contributed notes for this page.


Set Text

  • ≪ UI\Controls\Check::setChecked
  • UI\Controls\Button ≫
  • PHP Manual
  • UI\Controls\Check
  • Set Text

UI\Controls\Check::setText

(UI 0.9.9)

UI\Controls\Check::setText — Set Text

説明

public UI\Controls\Check::setText(string $text)

Shall set the text (label) for this Check

パラメータ

text

The new text (label)

User Contributed Notes

There are no user contributed notes for this page.


Button Control

(UI 0.9.9)

はじめに

Represents a labelled clickable button

クラス概要

class UI\Controls\Button extends UI\Control {
/* Constructor */
public __construct(string $text)
/* メソッド */
public getText(): string
protected onClick()
public setText(string $text)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Button::__construct — Construct a new Button
  • UI\Controls\Button::getText — Get Text
  • UI\Controls\Button::onClick — Click Handler
  • UI\Controls\Button::setText — Set Text

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Button

  • ≪ UI\Controls\Button
  • UI\Controls\Button::getText ≫
  • PHP Manual
  • UI\Controls\Button
  • Construct a new Button

UI\Controls\Button::__construct

(UI 0.9.9)

UI\Controls\Button::__construct — Construct a new Button

説明

public UI\Controls\Button::__construct(string $text)

Shall construct a new Button

パラメータ

text

The text (label) for this Button

User Contributed Notes

There are no user contributed notes for this page.


Get Text

  • ≪ UI\Controls\Button::__construct
  • UI\Controls\Button::onClick ≫
  • PHP Manual
  • UI\Controls\Button
  • Get Text

UI\Controls\Button::getText

(UI 0.9.9)

UI\Controls\Button::getText — Get Text

説明

public UI\Controls\Button::getText(): string

Shall retrieve the text (label) for this Button

パラメータ

この関数にはパラメータはありません。

戻り値

The current text (label)

User Contributed Notes

There are no user contributed notes for this page.


Click Handler

  • ≪ UI\Controls\Button::getText
  • UI\Controls\Button::setText ≫
  • PHP Manual
  • UI\Controls\Button
  • Click Handler

UI\Controls\Button::onClick

(UI 0.9.9)

UI\Controls\Button::onClick — Click Handler

説明

protected UI\Controls\Button::onClick()

Shall be executed when this Button is clicked

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Text

  • ≪ UI\Controls\Button::onClick
  • UI\Controls\ColorButton ≫
  • PHP Manual
  • UI\Controls\Button
  • Set Text

UI\Controls\Button::setText

(UI 0.9.9)

UI\Controls\Button::setText — Set Text

説明

public UI\Controls\Button::setText(string $text)

Shall set the text (label) for this Button

パラメータ

text

The new text (label)

User Contributed Notes

There are no user contributed notes for this page.


ColorButton Control

(UI 0.9.9)

はじめに

A Color Button is a button which displays a color picker when clicked

クラス概要

class UI\Controls\ColorButton extends UI\Control {
/* メソッド */
public getColor(): UI\Color
protected onChange()
public setColor(UI\Draw\Color $color)
public setColor(int $color)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\ColorButton::getColor — Get Color
  • UI\Controls\ColorButton::onChange — Change Handler
  • UI\Controls\ColorButton::setColor — Set Color

User Contributed Notes

There are no user contributed notes for this page.


Get Color

  • ≪ UI\Controls\ColorButton
  • UI\Controls\ColorButton::onChange ≫
  • PHP Manual
  • UI\Controls\ColorButton
  • Get Color

UI\Controls\ColorButton::getColor

(UI 0.9.9)

UI\Controls\ColorButton::getColor — Get Color

説明

public UI\Controls\ColorButton::getColor(): UI\Color

Shall retrieve the currently selected Color

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Change Handler

  • ≪ UI\Controls\ColorButton::getColor
  • UI\Controls\ColorButton::setColor ≫
  • PHP Manual
  • UI\Controls\ColorButton
  • Change Handler

UI\Controls\ColorButton::onChange

(UI 0.9.9)

UI\Controls\ColorButton::onChange — Change Handler

説明

protected UI\Controls\ColorButton::onChange()

Shall be executed when the selected Color is changed

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Color

  • ≪ UI\Controls\ColorButton::onChange
  • UI\Controls\Label ≫
  • PHP Manual
  • UI\Controls\ColorButton
  • Set Color

UI\Controls\ColorButton::setColor

(UI 0.9.9)

UI\Controls\ColorButton::setColor — Set Color

説明

public UI\Controls\ColorButton::setColor(UI\Draw\Color $color)
public UI\Controls\ColorButton::setColor(int $color)

Shall set the currently selected Color

パラメータ

color

The new color

User Contributed Notes

There are no user contributed notes for this page.


Label Control

(UI 0.9.9)

はじめに

A Label is a single line of text, meant to identify, for the user, some element of the interface.

クラス概要

class UI\Controls\Label extends UI\Control {
/* Constructor */
public __construct(string $text)
/* メソッド */
public getText(): string
public setText(string $text)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Label::__construct — Construct a new Label
  • UI\Controls\Label::getText — Get Text
  • UI\Controls\Label::setText — Set Text

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Label

  • ≪ UI\Controls\Label
  • UI\Controls\Label::getText ≫
  • PHP Manual
  • UI\Controls\Label
  • Construct a new Label

UI\Controls\Label::__construct

(UI 0.9.9)

UI\Controls\Label::__construct — Construct a new Label

説明

public UI\Controls\Label::__construct(string $text)

Shall construct a new Label

パラメータ

text

The text for this label

User Contributed Notes

There are no user contributed notes for this page.


Get Text

  • ≪ UI\Controls\Label::__construct
  • UI\Controls\Label::setText ≫
  • PHP Manual
  • UI\Controls\Label
  • Get Text

UI\Controls\Label::getText

(UI 0.9.9)

UI\Controls\Label::getText — Get Text

説明

public UI\Controls\Label::getText(): string

Shall return the current text for this Label

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Set Text

  • ≪ UI\Controls\Label::getText
  • UI\Controls\Entry ≫
  • PHP Manual
  • UI\Controls\Label
  • Set Text

UI\Controls\Label::setText

(UI 0.9.9)

UI\Controls\Label::setText — Set Text

説明

public UI\Controls\Label::setText(string $text)

Shall set the text for this Label

パラメータ

text

The new text

User Contributed Notes

There are no user contributed notes for this page.


Entry Control

(UI 0.9.9)

はじめに

An Entry is a text entry control, suitable for entering plain text, passwords, or search terms.

クラス概要

class UI\Controls\Entry extends UI\Control {
/* 定数 */
const int Normal;
const int Password;
const int Search;
/* Constructor */
public __construct(int $type = UI\Controls\Entry::Normal)
/* メソッド */
public getText(): string
public isReadOnly(): bool
protected onChange()
public setReadOnly(bool $readOnly)
public setText(string $text)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

定義済み定数

UI\Controls\Entry::Normal

A normal single line entry

UI\Controls\Entry::Password

A password entry

UI\Controls\Entry::Search

A search entry

目次

  • UI\Controls\Entry::__construct — Construct a new Entry
  • UI\Controls\Entry::getText — Get Text
  • UI\Controls\Entry::isReadOnly — Detect Read Only
  • UI\Controls\Entry::onChange — Change Handler
  • UI\Controls\Entry::setReadOnly — Set Read Only
  • UI\Controls\Entry::setText — Set Text

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Entry

  • ≪ UI\Controls\Entry
  • UI\Controls\Entry::getText ≫
  • PHP Manual
  • UI\Controls\Entry
  • Construct a new Entry

UI\Controls\Entry::__construct

(UI 0.9.9)

UI\Controls\Entry::__construct — Construct a new Entry

説明

public UI\Controls\Entry::__construct(int $type = UI\Controls\Entry::Normal)

Construct a new entry of the given type

パラメータ

type

Entry::Normal, Entry::Password, or Entry::Search

User Contributed Notes

There are no user contributed notes for this page.


Get Text

  • ≪ UI\Controls\Entry::__construct
  • UI\Controls\Entry::isReadOnly ≫
  • PHP Manual
  • UI\Controls\Entry
  • Get Text

UI\Controls\Entry::getText

(UI 0.9.9)

UI\Controls\Entry::getText — Get Text

説明

public UI\Controls\Entry::getText(): string

Shall return the current text from this Entry

パラメータ

この関数にはパラメータはありません。

戻り値

The current text

User Contributed Notes

There are no user contributed notes for this page.


Detect Read Only

  • ≪ UI\Controls\Entry::getText
  • UI\Controls\Entry::onChange ≫
  • PHP Manual
  • UI\Controls\Entry
  • Detect Read Only

UI\Controls\Entry::isReadOnly

(UI 0.9.9)

UI\Controls\Entry::isReadOnly — Detect Read Only

説明

public UI\Controls\Entry::isReadOnly(): bool

Shall detect if this Entry is read only

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Change Handler

  • ≪ UI\Controls\Entry::isReadOnly
  • UI\Controls\Entry::setReadOnly ≫
  • PHP Manual
  • UI\Controls\Entry
  • Change Handler

UI\Controls\Entry::onChange

(UI 0.9.9)

UI\Controls\Entry::onChange — Change Handler

説明

protected UI\Controls\Entry::onChange()

Shall be executed when the text in this Entry changes

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Read Only

  • ≪ UI\Controls\Entry::onChange
  • UI\Controls\Entry::setText ≫
  • PHP Manual
  • UI\Controls\Entry
  • Set Read Only

UI\Controls\Entry::setReadOnly

(UI 0.9.9)

UI\Controls\Entry::setReadOnly — Set Read Only

説明

public UI\Controls\Entry::setReadOnly(bool $readOnly)

Shall enable or disable read only for this Entry

パラメータ

readOnly

User Contributed Notes

There are no user contributed notes for this page.


Set Text

  • ≪ UI\Controls\Entry::setReadOnly
  • UI\Controls\MultilineEntry ≫
  • PHP Manual
  • UI\Controls\Entry
  • Set Text

UI\Controls\Entry::setText

(UI 0.9.9)

UI\Controls\Entry::setText — Set Text

説明

public UI\Controls\Entry::setText(string $text)

Shall set the text for this Entry

パラメータ

text

The new text

User Contributed Notes

There are no user contributed notes for this page.


MultilineEntry Control

(UI 0.9.9)

はじめに

A Multiline Entry is a text entry control able to hold multiple lines of text, with or without wrapping.

クラス概要

class UI\Controls\MultilineEntry extends UI\Control {
/* 定数 */
const int Wrap;
const int NoWrap;
/* Constructor */
public __construct(int $type = ?)
/* メソッド */
public append(string $text)
public getText(): string
public isReadOnly(): bool
protected onChange()
public setReadOnly(bool $readOnly)
public setText(string $text)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

定義済み定数

UI\Controls\MultilineEntry::Wrap

Allow lines to wrap

UI\Controls\MultilineEntry::NoWrap

Do not allow lines to wrap

目次

  • UI\Controls\MultilineEntry::append — Append Text
  • UI\Controls\MultilineEntry::__construct — Construct a new Multiline Entry
  • UI\Controls\MultilineEntry::getText — Get Text
  • UI\Controls\MultilineEntry::isReadOnly — Read Only Detection
  • UI\Controls\MultilineEntry::onChange — Change Handler
  • UI\Controls\MultilineEntry::setReadOnly — Set Read Only
  • UI\Controls\MultilineEntry::setText — Set Text

User Contributed Notes

There are no user contributed notes for this page.


Append Text

  • ≪ UI\Controls\MultilineEntry
  • UI\Controls\MultilineEntry::__construct ≫
  • PHP Manual
  • UI\Controls\MultilineEntry
  • Append Text

UI\Controls\MultilineEntry::append

(UI 0.9.9)

UI\Controls\MultilineEntry::append — Append Text

説明

public UI\Controls\MultilineEntry::append(string $text)

Shall append the given text to the text in this Multiline Entry

パラメータ

text

The text to append

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Multiline Entry

  • ≪ UI\Controls\MultilineEntry::append
  • UI\Controls\MultilineEntry::getText ≫
  • PHP Manual
  • UI\Controls\MultilineEntry
  • Construct a new Multiline Entry

UI\Controls\MultilineEntry::__construct

(UI 0.9.9)

UI\Controls\MultilineEntry::__construct — Construct a new Multiline Entry

説明

public UI\Controls\MultilineEntry::__construct(int $type = ?)

Shall construct a new Multiline Entry of the given type

パラメータ

type

MultilineEntry::Wrap or MultilineEntry::NoWrap

User Contributed Notes

There are no user contributed notes for this page.


Get Text

  • ≪ UI\Controls\MultilineEntry::__construct
  • UI\Controls\MultilineEntry::isReadOnly ≫
  • PHP Manual
  • UI\Controls\MultilineEntry
  • Get Text

UI\Controls\MultilineEntry::getText

(UI 0.9.9)

UI\Controls\MultilineEntry::getText — Get Text

説明

public UI\Controls\MultilineEntry::getText(): string

Shall return the text in this Multiline Entry

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Read Only Detection

  • ≪ UI\Controls\MultilineEntry::getText
  • UI\Controls\MultilineEntry::onChange ≫
  • PHP Manual
  • UI\Controls\MultilineEntry
  • Read Only Detection

UI\Controls\MultilineEntry::isReadOnly

(UI 0.9.9)

UI\Controls\MultilineEntry::isReadOnly — Read Only Detection

説明

public UI\Controls\MultilineEntry::isReadOnly(): bool

Shall detect if this Multiline Entry is read only

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Change Handler

  • ≪ UI\Controls\MultilineEntry::isReadOnly
  • UI\Controls\MultilineEntry::setReadOnly ≫
  • PHP Manual
  • UI\Controls\MultilineEntry
  • Change Handler

UI\Controls\MultilineEntry::onChange

(UI 0.9.9)

UI\Controls\MultilineEntry::onChange — Change Handler

説明

protected UI\Controls\MultilineEntry::onChange()

Shall be executed when the text in this Multiline Entry is changed

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Read Only

  • ≪ UI\Controls\MultilineEntry::onChange
  • UI\Controls\MultilineEntry::setText ≫
  • PHP Manual
  • UI\Controls\MultilineEntry
  • Set Read Only

UI\Controls\MultilineEntry::setReadOnly

(UI 0.9.9)

UI\Controls\MultilineEntry::setReadOnly — Set Read Only

説明

public UI\Controls\MultilineEntry::setReadOnly(bool $readOnly)

Shall enable or disable read only on this Multiline Entry

パラメータ

readOnly

User Contributed Notes

There are no user contributed notes for this page.


Set Text

  • ≪ UI\Controls\MultilineEntry::setReadOnly
  • UI\Controls\Spin ≫
  • PHP Manual
  • UI\Controls\MultilineEntry
  • Set Text

UI\Controls\MultilineEntry::setText

(UI 0.9.9)

UI\Controls\MultilineEntry::setText — Set Text

説明

public UI\Controls\MultilineEntry::setText(string $text)

Shall set the text in this Multiline Entry

パラメータ

text

The new text

User Contributed Notes

There are no user contributed notes for this page.


Spin Control

(UI 0.9.9)

はじめに

A Spin box is a text box with an up-down control which changes the integer value in the box, within a defined range

クラス概要

class UI\Controls\Spin extends UI\Control {
/* Constructor */
public __construct(int $min, int $max)
/* メソッド */
public getValue(): int
protected onChange()
public setValue(int $value)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Spin::__construct — Construct a new Spin
  • UI\Controls\Spin::getValue — Get Value
  • UI\Controls\Spin::onChange — Change Handler
  • UI\Controls\Spin::setValue — Set Value

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Spin

  • ≪ UI\Controls\Spin
  • UI\Controls\Spin::getValue ≫
  • PHP Manual
  • UI\Controls\Spin
  • Construct a new Spin

UI\Controls\Spin::__construct

(UI 0.9.9)

UI\Controls\Spin::__construct — Construct a new Spin

説明

public UI\Controls\Spin::__construct(int $min, int $max)

Constructs a new Spin with the given range

パラメータ

min

The minimum value allowed

max

The maximum value allowed

User Contributed Notes

There are no user contributed notes for this page.


Get Value

  • ≪ UI\Controls\Spin::__construct
  • UI\Controls\Spin::onChange ≫
  • PHP Manual
  • UI\Controls\Spin
  • Get Value

UI\Controls\Spin::getValue

(UI 0.9.9)

UI\Controls\Spin::getValue — Get Value

説明

public UI\Controls\Spin::getValue(): int

Get the value in this Spin

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Change Handler

  • ≪ UI\Controls\Spin::getValue
  • UI\Controls\Spin::setValue ≫
  • PHP Manual
  • UI\Controls\Spin
  • Change Handler

UI\Controls\Spin::onChange

(UI 0.9.9)

UI\Controls\Spin::onChange — Change Handler

説明

protected UI\Controls\Spin::onChange()

Shall be executed when the value in this Spin changes

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Value

  • ≪ UI\Controls\Spin::onChange
  • UI\Controls\Slider ≫
  • PHP Manual
  • UI\Controls\Spin
  • Set Value

UI\Controls\Spin::setValue

(UI 0.9.9)

UI\Controls\Spin::setValue — Set Value

説明

public UI\Controls\Spin::setValue(int $value)

Set the value in this Spin

パラメータ

value

The new value

User Contributed Notes

There are no user contributed notes for this page.


Slider Control

(UI 0.9.9)

はじめに

A Slider is a control which represents a range, and a current value in the range. The sliding element of the control (sometimes called the "thumb") reflects the value, and can be adjusted within the range.

クラス概要

class UI\Controls\Slider extends UI\Control {
/* Constructor */
public __construct(int $min, int $max)
/* メソッド */
public getValue(): int
protected onChange()
public setValue(int $value)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Slider::__construct — Construct a new Slider
  • UI\Controls\Slider::getValue — Get Value
  • UI\Controls\Slider::onChange — Change Handler
  • UI\Controls\Slider::setValue — Set Value

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Slider

  • ≪ UI\Controls\Slider
  • UI\Controls\Slider::getValue ≫
  • PHP Manual
  • UI\Controls\Slider
  • Construct a new Slider

UI\Controls\Slider::__construct

(UI 0.9.9)

UI\Controls\Slider::__construct — Construct a new Slider

説明

public UI\Controls\Slider::__construct(int $min, int $max)

Construct a new Slider with the given range

パラメータ

min

The minimum allowed value

max

The maximum allowed value

User Contributed Notes

There are no user contributed notes for this page.


Get Value

  • ≪ UI\Controls\Slider::__construct
  • UI\Controls\Slider::onChange ≫
  • PHP Manual
  • UI\Controls\Slider
  • Get Value

UI\Controls\Slider::getValue

(UI 0.9.9)

UI\Controls\Slider::getValue — Get Value

説明

public UI\Controls\Slider::getValue(): int

Get the value from this Slider

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Change Handler

  • ≪ UI\Controls\Slider::getValue
  • UI\Controls\Slider::setValue ≫
  • PHP Manual
  • UI\Controls\Slider
  • Change Handler

UI\Controls\Slider::onChange

(UI 0.9.9)

UI\Controls\Slider::onChange — Change Handler

説明

protected UI\Controls\Slider::onChange()

Shall be executed when the value of this Slider changes

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Value

  • ≪ UI\Controls\Slider::onChange
  • UI\Controls\Progress ≫
  • PHP Manual
  • UI\Controls\Slider
  • Set Value

UI\Controls\Slider::setValue

(UI 0.9.9)

UI\Controls\Slider::setValue — Set Value

説明

public UI\Controls\Slider::setValue(int $value)

Shall set the value for this Slider

パラメータ

value

The new value

User Contributed Notes

There are no user contributed notes for this page.


Progress Control

(UI 0.9.9)

はじめに

A Progress control is a familiar Progress bar: It represents progress as a percentage, with a possible range of 0 to 100 (inclusive).

クラス概要

class UI\Controls\Progress extends UI\Control {
/* メソッド */
public getValue(): int
public setValue(int $value)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Progress::getValue — Get Value
  • UI\Controls\Progress::setValue — Set Value

User Contributed Notes

There are no user contributed notes for this page.


Get Value

  • ≪ UI\Controls\Progress
  • UI\Controls\Progress::setValue ≫
  • PHP Manual
  • UI\Controls\Progress
  • Get Value

UI\Controls\Progress::getValue

(UI 0.9.9)

UI\Controls\Progress::getValue — Get Value

説明

public UI\Controls\Progress::getValue(): int

Shall retrieve the current value of this Progress bar

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Value

  • ≪ UI\Controls\Progress::getValue
  • UI\Controls\Separator ≫
  • PHP Manual
  • UI\Controls\Progress
  • Set Value

UI\Controls\Progress::setValue

(UI 0.9.9)

UI\Controls\Progress::setValue — Set Value

説明

public UI\Controls\Progress::setValue(int $value)

Shall set the value for this Progress bar

パラメータ

value

An integer between 0 and 100 (inclusive)

User Contributed Notes

There are no user contributed notes for this page.


Control Separator

(UI 0.9.9)

はじめに

A Separator represents a control separator, it has no other function.

クラス概要

class UI\Controls\Separator extends UI\Control {
/* 定数 */
const int Horizontal;
const int Vertical;
/* Constructor */
public __construct(int $type = UI\Controls\Separator::Horizontal)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

定義済み定数

UI\Controls\Separator::Horizontal

A Horizontal Separator

UI\Controls\Separator::Vertical

A Vertical Separator

目次

  • UI\Controls\Separator::__construct — Construct a new Separator

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Separator

  • ≪ UI\Controls\Separator
  • UI\Controls\Combo ≫
  • PHP Manual
  • UI\Controls\Separator
  • Construct a new Separator

UI\Controls\Separator::__construct

(UI 0.9.9)

UI\Controls\Separator::__construct — Construct a new Separator

説明

public UI\Controls\Separator::__construct(int $type = UI\Controls\Separator::Horizontal)

Shall construct a new Separator of the given type

パラメータ

type

Separator::Horizonal or Separator::Vertical

User Contributed Notes

There are no user contributed notes for this page.


Combo Control

(UI 0.9.9)

はじめに

A Combo control represents a list of options, like the familiar select HTML element.

クラス概要

class UI\Controls\Combo extends UI\Control {
/* メソッド */
public append(string $text)
public getSelected(): int
protected onSelected()
public setSelected(int $index)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Combo::append — Append Option
  • UI\Controls\Combo::getSelected — Get Selected Option
  • UI\Controls\Combo::onSelected — Selected Handler
  • UI\Controls\Combo::setSelected — Set Selected Option

User Contributed Notes

There are no user contributed notes for this page.


Append Option

  • ≪ UI\Controls\Combo
  • UI\Controls\Combo::getSelected ≫
  • PHP Manual
  • UI\Controls\Combo
  • Append Option

UI\Controls\Combo::append

(UI 0.9.9)

UI\Controls\Combo::append — Append Option

説明

public UI\Controls\Combo::append(string $text)

Append an option to this Combo

パラメータ

text

The text for the new option

User Contributed Notes

There are no user contributed notes for this page.


Get Selected Option

  • ≪ UI\Controls\Combo::append
  • UI\Controls\Combo::onSelected ≫
  • PHP Manual
  • UI\Controls\Combo
  • Get Selected Option

UI\Controls\Combo::getSelected

(UI 0.9.9)

UI\Controls\Combo::getSelected — Get Selected Option

説明

public UI\Controls\Combo::getSelected(): int

Shall retrieve the index of the option selected in this Combo

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Selected Handler

  • ≪ UI\Controls\Combo::getSelected
  • UI\Controls\Combo::setSelected ≫
  • PHP Manual
  • UI\Controls\Combo
  • Selected Handler

UI\Controls\Combo::onSelected

(UI 0.9.9)

UI\Controls\Combo::onSelected — Selected Handler

説明

protected UI\Controls\Combo::onSelected()

Shall be executed when an option is selected in this Combo

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Selected Option

  • ≪ UI\Controls\Combo::onSelected
  • UI\Controls\EditableCombo ≫
  • PHP Manual
  • UI\Controls\Combo
  • Set Selected Option

UI\Controls\Combo::setSelected

(UI 0.9.9)

UI\Controls\Combo::setSelected — Set Selected Option

説明

public UI\Controls\Combo::setSelected(int $index)

Shall set the currently selected option in this Combo

パラメータ

index

The index of the option to select

User Contributed Notes

There are no user contributed notes for this page.


EdiableCombo Control

(UI 0.9.9)

はじめに

An Editable Combo is a Combo which allows the user to enter custom options

クラス概要

class UI\Controls\EditableCombo extends UI\Control {
/* メソッド */
public append(string $text)
public getText(): string
protected onChange()
public setText(string $text)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\EditableCombo::append — Append Option
  • UI\Controls\EditableCombo::getText — Get Text
  • UI\Controls\EditableCombo::onChange — Change Handler
  • UI\Controls\EditableCombo::setText — Set Text

User Contributed Notes

There are no user contributed notes for this page.


Append Option

  • ≪ UI\Controls\EditableCombo
  • UI\Controls\EditableCombo::getText ≫
  • PHP Manual
  • UI\Controls\EditableCombo
  • Append Option

UI\Controls\EditableCombo::append

(UI 0.9.9)

UI\Controls\EditableCombo::append — Append Option

説明

public UI\Controls\EditableCombo::append(string $text)

Shall append a new option to this Editable Combo

パラメータ

text

The text for the new option

User Contributed Notes

There are no user contributed notes for this page.


Get Text

  • ≪ UI\Controls\EditableCombo::append
  • UI\Controls\EditableCombo::onChange ≫
  • PHP Manual
  • UI\Controls\EditableCombo
  • Get Text

UI\Controls\EditableCombo::getText

(UI 0.9.9)

UI\Controls\EditableCombo::getText — Get Text

説明

public UI\Controls\EditableCombo::getText(): string

Get the value of the currently selected option in this Editable Combo

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Change Handler

  • ≪ UI\Controls\EditableCombo::getText
  • UI\Controls\EditableCombo::setText ≫
  • PHP Manual
  • UI\Controls\EditableCombo
  • Change Handler

UI\Controls\EditableCombo::onChange

(UI 0.9.9)

UI\Controls\EditableCombo::onChange — Change Handler

説明

protected UI\Controls\EditableCombo::onChange()

Shall be executed when the value of this Editable Combobox changes

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Text

  • ≪ UI\Controls\EditableCombo::onChange
  • UI\Controls\Radio ≫
  • PHP Manual
  • UI\Controls\EditableCombo
  • Set Text

UI\Controls\EditableCombo::setText

(UI 0.9.9)

UI\Controls\EditableCombo::setText — Set Text

説明

public UI\Controls\EditableCombo::setText(string $text)

Shall set the text of the currently selected option in this Editable Combo

パラメータ

text

The new text

User Contributed Notes

There are no user contributed notes for this page.


Radio Control

(UI 0.9.9)

はじめに

A Radio is similar to the radio input type familiar from HTML

クラス概要

class UI\Controls\Radio extends UI\Control {
/* メソッド */
public append(string $text)
public getSelected(): int
protected onSelected()
public setSelected(int $index)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

目次

  • UI\Controls\Radio::append — Append Option
  • UI\Controls\Radio::getSelected — Get Selected Option
  • UI\Controls\Radio::onSelected — Selected Handler
  • UI\Controls\Radio::setSelected — Set Selected Option

User Contributed Notes

There are no user contributed notes for this page.


Append Option

  • ≪ UI\Controls\Radio
  • UI\Controls\Radio::getSelected ≫
  • PHP Manual
  • UI\Controls\Radio
  • Append Option

UI\Controls\Radio::append

(UI 0.9.9)

UI\Controls\Radio::append — Append Option

説明

public UI\Controls\Radio::append(string $text)

Shall append a new option to this Radio

パラメータ

text

The text (label) for the option

User Contributed Notes

There are no user contributed notes for this page.


Get Selected Option

  • ≪ UI\Controls\Radio::append
  • UI\Controls\Radio::onSelected ≫
  • PHP Manual
  • UI\Controls\Radio
  • Get Selected Option

UI\Controls\Radio::getSelected

(UI 0.9.9)

UI\Controls\Radio::getSelected — Get Selected Option

説明

public UI\Controls\Radio::getSelected(): int

Shall retrieve the index of the currently selected option in this Radio

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Selected Handler

  • ≪ UI\Controls\Radio::getSelected
  • UI\Controls\Radio::setSelected ≫
  • PHP Manual
  • UI\Controls\Radio
  • Selected Handler

UI\Controls\Radio::onSelected

(UI 0.9.9)

UI\Controls\Radio::onSelected — Selected Handler

説明

protected UI\Controls\Radio::onSelected()

Shall be executed when the option selected in this Radio changes

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Selected Option

  • ≪ UI\Controls\Radio::onSelected
  • UI\Controls\Picker ≫
  • PHP Manual
  • UI\Controls\Radio
  • Set Selected Option

UI\Controls\Radio::setSelected

(UI 0.9.9)

UI\Controls\Radio::setSelected — Set Selected Option

説明

public UI\Controls\Radio::setSelected(int $index)

Shall set the currently selected option in this Radio

パラメータ

index

The index of the option to select

User Contributed Notes

There are no user contributed notes for this page.


Picker Control

(UI 0.9.9)

はじめに

A Picker represents a button which when clicked presents a native Date/Time/DateTime Picker interface to the user.

クラス概要

class UI\Controls\Picker extends UI\Control {
/* 定数 */
const int Date;
const int Time;
const int DateTime;
/* Constructor */
public __construct(int $type = UI\Controls\Picker::Date)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

定義済み定数

UI\Controls\Picker::Date

A Date Picker

UI\Controls\Picker::Time

A Time Picker

UI\Controls\Picker::DateTime

A Date and Time Picker

目次

  • UI\Controls\Picker::__construct — Construct a new Picker

User Contributed Notes

falcon560 at gmail dot com 05-Nov-2017 07:54
No getter method for the date/time


Construct a new Picker

  • ≪ UI\Controls\Picker
  • UI\Controls\Form ≫
  • PHP Manual
  • UI\Controls\Picker
  • Construct a new Picker

UI\Controls\Picker::__construct

(UI 0.9.9)

UI\Controls\Picker::__construct — Construct a new Picker

説明

public UI\Controls\Picker::__construct(int $type = UI\Controls\Picker::Date)

Construct a new Picker of the given type

パラメータ

type

Picker::Date, Picker::Time, or Picker::DateTime

User Contributed Notes

There are no user contributed notes for this page.


Control Form (Arrangement)

(UI 0.9.9)

はじめに

A Form is a control which allows the arrangement of other controls into a familiar layout (the form).

クラス概要

class UI\Controls\Form extends UI\Control {
/* プロパティ */
protected $controls;
/* メソッド */
public append(string $label, UI\Control $control, bool $stretchy = false): int
public delete(int $index): bool
public isPadded(): bool
public setPadded(bool $padded)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

プロパティ

controls

Contains controls, should not be manipulated directly

目次

  • UI\Controls\Form::append — Append Control
  • UI\Controls\Form::delete — Delete Control
  • UI\Controls\Form::isPadded — Padding Detection
  • UI\Controls\Form::setPadded — Set Padding

User Contributed Notes

There are no user contributed notes for this page.


Append Control

  • ≪ UI\Controls\Form
  • UI\Controls\Form::delete ≫
  • PHP Manual
  • UI\Controls\Form
  • Append Control

UI\Controls\Form::append

(UI 0.9.9)

UI\Controls\Form::append — Append Control

説明

public UI\Controls\Form::append(string $label, UI\Control $control, bool $stretchy = false): int

Shall append the control to the form, and set the label

パラメータ

label

The text for the label

control

A control

stretchy

Should be set true to stretch the control

戻り値

Shall return the index of the appended control, may be 0

User Contributed Notes

There are no user contributed notes for this page.


Delete Control

  • ≪ UI\Controls\Form::append
  • UI\Controls\Form::isPadded ≫
  • PHP Manual
  • UI\Controls\Form
  • Delete Control

UI\Controls\Form::delete

(UI 0.9.9)

UI\Controls\Form::delete — Delete Control

説明

public UI\Controls\Form::delete(int $index): bool

Shall delete the control at the given index in this Form

パラメータ

index

The index of the control to remove

戻り値

Indication of succcess

User Contributed Notes

There are no user contributed notes for this page.


Padding Detection

  • ≪ UI\Controls\Form::delete
  • UI\Controls\Form::setPadded ≫
  • PHP Manual
  • UI\Controls\Form
  • Padding Detection

UI\Controls\Form::isPadded

(UI 0.9.9)

UI\Controls\Form::isPadded — Padding Detection

説明

public UI\Controls\Form::isPadded(): bool

Shall detect if padding is enabled on this Form

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Padding

  • ≪ UI\Controls\Form::isPadded
  • UI\Controls\Grid ≫
  • PHP Manual
  • UI\Controls\Form
  • Set Padding

UI\Controls\Form::setPadded

(UI 0.9.9)

UI\Controls\Form::setPadded — Set Padding

説明

public UI\Controls\Form::setPadded(bool $padded)

Shall enable or disable padding on this Form

パラメータ

padded

User Contributed Notes

There are no user contributed notes for this page.


Control Grid (Arrangement)

(UI 0.9.9)

はじめに

A Grid is a control which is allows the arrangement of children into a grid

クラス概要

class UI\Controls\Grid extends UI\Control {
/* 定数 */
const int Fill;
const int Start;
const int Center;
const int End;
const int Leading;
const int Top;
const int Trailing;
const int Bottom;
/* プロパティ */
protected $controls;
/* メソッド */
public append(
UI\Control $control,
int $left,
int $top,
int $xspan,
int $yspan,
bool $hexpand,
int $halign,
bool $vexpand,
int $valign
)
public isPadded(): bool
public setPadded(bool $padding)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

定義済み定数

UI\Controls\Grid::Fill

UI\Controls\Grid::Start

UI\Controls\Grid::Center

UI\Controls\Grid::End

UI\Controls\Grid::Leading

UI\Controls\Grid::Top

UI\Controls\Grid::Trailing

UI\Controls\Grid::Bottom

プロパティ

controls

Contains controls, should not be manipulated directly

目次

  • UI\Controls\Grid::append — Append Control
  • UI\Controls\Grid::isPadded — Padding Detection
  • UI\Controls\Grid::setPadded — Set Padding

User Contributed Notes

There are no user contributed notes for this page.


Append Control

  • ≪ UI\Controls\Grid
  • UI\Controls\Grid::isPadded ≫
  • PHP Manual
  • UI\Controls\Grid
  • Append Control

UI\Controls\Grid::append

(UI 0.9.9)

UI\Controls\Grid::append — Append Control

説明

public UI\Controls\Grid::append(
UI\Control $control,
int $left,
int $top,
int $xspan,
int $yspan,
bool $hexpand,
int $halign,
bool $vexpand,
int $valign
)

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

control

The Control to append

left

top

xspan

yspan

hexpand

halign

vexpand

valign

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Padding Detection

  • ≪ UI\Controls\Grid::append
  • UI\Controls\Grid::setPadded ≫
  • PHP Manual
  • UI\Controls\Grid
  • Padding Detection

UI\Controls\Grid::isPadded

(UI 0.9.9)

UI\Controls\Grid::isPadded — Padding Detection

説明

public UI\Controls\Grid::isPadded(): bool

Shall detect if padding is enabled on this Grid

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Padding

  • ≪ UI\Controls\Grid::isPadded
  • UI\Controls\Group ≫
  • PHP Manual
  • UI\Controls\Grid
  • Set Padding

UI\Controls\Grid::setPadded

(UI 0.9.9)

UI\Controls\Grid::setPadded — Set Padding

説明

public UI\Controls\Grid::setPadded(bool $padding)

Shall enable or disable padding for this Grid

パラメータ

padding

User Contributed Notes

There are no user contributed notes for this page.


Control Group (Arrangement)

(UI 0.9.9)

はじめに

A Group is a titled container for child controls

クラス概要

class UI\Controls\Group extends UI\Control {
/* プロパティ */
protected $controls;
/* Constructor */
public __construct(string $title)
/* メソッド */
public append(UI\Control $control)
public getTitle(): string
public hasMargin(): bool
public setMargin(bool $margin)
public setTitle(string $title)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

プロパティ

controls

Contains controls, should not be manipulated directly

目次

  • UI\Controls\Group::append — Append Control
  • UI\Controls\Group::__construct — Construct a new Group
  • UI\Controls\Group::getTitle — Get Title
  • UI\Controls\Group::hasMargin — Margin Detection
  • UI\Controls\Group::setMargin — Set Margin
  • UI\Controls\Group::setTitle — Set Title

User Contributed Notes

There are no user contributed notes for this page.


Append Control

  • ≪ UI\Controls\Group
  • UI\Controls\Group::__construct ≫
  • PHP Manual
  • UI\Controls\Group
  • Append Control

UI\Controls\Group::append

(バージョン情報なし。おそらく Git 版にしか存在しないでしょう)

UI\Controls\Group::append — Append Control

説明

public UI\Controls\Group::append(UI\Control $control)

Shall append a control to this Group

パラメータ

control

The control to append

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Group

  • ≪ UI\Controls\Group::append
  • UI\Controls\Group::getTitle ≫
  • PHP Manual
  • UI\Controls\Group
  • Construct a new Group

UI\Controls\Group::__construct

(UI 0.9.9)

UI\Controls\Group::__construct — Construct a new Group

説明

public UI\Controls\Group::__construct(string $title)

Shall construct a new Group with the given title

パラメータ

title

The text for the title label

User Contributed Notes

There are no user contributed notes for this page.


Get Title

  • ≪ UI\Controls\Group::__construct
  • UI\Controls\Group::hasMargin ≫
  • PHP Manual
  • UI\Controls\Group
  • Get Title

UI\Controls\Group::getTitle

(UI 0.9.9)

UI\Controls\Group::getTitle — Get Title

説明

public UI\Controls\Group::getTitle(): string

Shall return the current title for this Group

パラメータ

この関数にはパラメータはありません。

戻り値

The current title

User Contributed Notes

There are no user contributed notes for this page.


Margin Detection

  • ≪ UI\Controls\Group::getTitle
  • UI\Controls\Group::setMargin ≫
  • PHP Manual
  • UI\Controls\Group
  • Margin Detection

UI\Controls\Group::hasMargin

(UI 0.9.9)

UI\Controls\Group::hasMargin — Margin Detection

説明

public UI\Controls\Group::hasMargin(): bool

Shall detect if this Group has a margin

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Margin

  • ≪ UI\Controls\Group::hasMargin
  • UI\Controls\Group::setTitle ≫
  • PHP Manual
  • UI\Controls\Group
  • Set Margin

UI\Controls\Group::setMargin

(UI 0.9.9)

UI\Controls\Group::setMargin — Set Margin

説明

public UI\Controls\Group::setMargin(bool $margin)

Shall enable or disable margins for this Group

パラメータ

margin

User Contributed Notes

There are no user contributed notes for this page.


Set Title

  • ≪ UI\Controls\Group::setMargin
  • UI\Controls\Box ≫
  • PHP Manual
  • UI\Controls\Group
  • Set Title

UI\Controls\Group::setTitle

(UI 0.9.9)

UI\Controls\Group::setTitle — Set Title

説明

public UI\Controls\Group::setTitle(string $title)

Shall set the title for this Group

パラメータ

title

The text for the new title

User Contributed Notes

There are no user contributed notes for this page.


Control Box (Arrangement)

(UI 0.9.9)

はじめに

A Box allows the arrangement of other controls

クラス概要

class UI\Controls\Box extends UI\Control {
/* 定数 */
const int Vertical;
const int Horizontal;
/* プロパティ */
protected $controls;
/* Constructor */
public __construct(int $orientation = UI\Controls\Box::Horizontal)
/* メソッド */
public append(Control $control, bool $stretchy = false): int
public delete(int $index): bool
public getOrientation(): int
public isPadded(): bool
public setPadded(bool $padded)
/* 継承したメソッド */
public UI\Control::destroy()
public UI\Control::disable()
public UI\Control::enable()
public UI\Control::getParent(): UI\Control
public UI\Control::getTopLevel(): int
public UI\Control::hide()
public UI\Control::isEnabled(): bool
public UI\Control::isVisible(): bool
public UI\Control::setParent(UI\Control $parent)
public UI\Control::show()
}

プロパティ

controls

Contains controls, should not be manipulated directly

定義済み定数

UI\Controls\Box::Vertical

UI\Controls\Box::Horizontal

目次

  • UI\Controls\Box::append — Append Control
  • UI\Controls\Box::__construct — Construct a new Box
  • UI\Controls\Box::delete — Delete Control
  • UI\Controls\Box::getOrientation — Get Orientation
  • UI\Controls\Box::isPadded — Padding Detection
  • UI\Controls\Box::setPadded — Set Padding

User Contributed Notes

There are no user contributed notes for this page.


Append Control

  • ≪ UI\Controls\Box
  • UI\Controls\Box::__construct ≫
  • PHP Manual
  • UI\Controls\Box
  • Append Control

UI\Controls\Box::append

(UI 0.9.9)

UI\Controls\Box::append — Append Control

説明

public UI\Controls\Box::append(Control $control, bool $stretchy = false): int

Shall append the given control to this Box

パラメータ

control

The control to append

stretchy

Set true to stretch the control

戻り値

Shall return the index of the appended control, may be 0

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Box

  • ≪ UI\Controls\Box::append
  • UI\Controls\Box::delete ≫
  • PHP Manual
  • UI\Controls\Box
  • Construct a new Box

UI\Controls\Box::__construct

(UI 0.9.9)

UI\Controls\Box::__construct — Construct a new Box

説明

public UI\Controls\Box::__construct(int $orientation = UI\Controls\Box::Horizontal)

Shall construct a new box

パラメータ

orientation

Box::Horizontal or Box::Vertical

User Contributed Notes

There are no user contributed notes for this page.


Delete Control

  • ≪ UI\Controls\Box::__construct
  • UI\Controls\Box::getOrientation ≫
  • PHP Manual
  • UI\Controls\Box
  • Delete Control

UI\Controls\Box::delete

(UI 0.9.9)

UI\Controls\Box::delete — Delete Control

説明

public UI\Controls\Box::delete(int $index): bool

Shall delete the control at the given index from this Box

パラメータ

index

The index of the control to delete

戻り値

Indication of success

User Contributed Notes

There are no user contributed notes for this page.


Get Orientation

  • ≪ UI\Controls\Box::delete
  • UI\Controls\Box::isPadded ≫
  • PHP Manual
  • UI\Controls\Box
  • Get Orientation

UI\Controls\Box::getOrientation

(UI 0.9.9)

UI\Controls\Box::getOrientation — Get Orientation

説明

public UI\Controls\Box::getOrientation(): int

Shall retrieve the orientation of this Box

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Padding Detection

  • ≪ UI\Controls\Box::getOrientation
  • UI\Controls\Box::setPadded ≫
  • PHP Manual
  • UI\Controls\Box
  • Padding Detection

UI\Controls\Box::isPadded

(UI 0.9.9)

UI\Controls\Box::isPadded — Padding Detection

説明

public UI\Controls\Box::isPadded(): bool

Shall detect if padding is enabled on this Box

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Set Padding

  • ≪ UI\Controls\Box::isPadded
  • UI\Draw\Pen ≫
  • PHP Manual
  • UI\Controls\Box
  • Set Padding

UI\Controls\Box::setPadded

(UI 0.9.9)

UI\Controls\Box::setPadded — Set Padding

説明

public UI\Controls\Box::setPadded(bool $padded)

Shall enable or disable padding on this Box

パラメータ

padded

User Contributed Notes

There are no user contributed notes for this page.


Draw Pen

(UI 0.9.9)

はじめに

The Pen is passed to the Area Draw event handler, it is used for clipping, filling, stroking, and writing to Draw Paths.

クラス概要

final class UI\Draw\Pen {
/* メソッド */
public clip(UI\Draw\Path $path)
public fill(UI\Draw\Path $path, UI\Draw\Brush $with)
public fill(UI\Draw\Path $path, UI\Draw\Color $with)
public fill(UI\Draw\Path $path, int $with)
public restore()
public save()
public stroke(UI\Draw\Path $path, UI\Draw\Brush $with, UI\Draw\Stroke $stroke)
public stroke(UI\Draw\Path $path, UI\Draw\Color $with, UI\Draw\Stroke $stroke)
public stroke(UI\Draw\Path $path, int $with, UI\Draw\Stroke $stroke)
public transform(UI\Draw\Matrix $matrix)
public write(UI\Point $point, UI\Draw\Text\Layout $layout)
}

目次

  • UI\Draw\Pen::clip — Clip a Path
  • UI\Draw\Pen::fill — Fill a Path
  • UI\Draw\Pen::restore — Restore
  • UI\Draw\Pen::save — Save
  • UI\Draw\Pen::stroke — Stroke a Path
  • UI\Draw\Pen::transform — Matrix Transform
  • UI\Draw\Pen::write — Draw Text at Point

User Contributed Notes

There are no user contributed notes for this page.


Clip a Path

  • ≪ UI\Draw\Pen
  • UI\Draw\Pen::fill ≫
  • PHP Manual
  • UI\Draw\Pen
  • Clip a Path

UI\Draw\Pen::clip

(UI 0.9.9)

UI\Draw\Pen::clip — Clip a Path

説明

public UI\Draw\Pen::clip(UI\Draw\Path $path)

Shall clip the given Path

パラメータ

path

The path to clip

User Contributed Notes

There are no user contributed notes for this page.


Fill a Path

  • ≪ UI\Draw\Pen::clip
  • UI\Draw\Pen::restore ≫
  • PHP Manual
  • UI\Draw\Pen
  • Fill a Path

UI\Draw\Pen::fill

(UI 0.9.9)

UI\Draw\Pen::fill — Fill a Path

説明

public UI\Draw\Pen::fill(UI\Draw\Path $path, UI\Draw\Brush $with)
public UI\Draw\Pen::fill(UI\Draw\Path $path, UI\Draw\Color $with)
public UI\Draw\Pen::fill(UI\Draw\Path $path, int $with)

Shall fill the given path

パラメータ

path

The path to fill

with

The color or brush to fill with

User Contributed Notes

There are no user contributed notes for this page.


Restore

  • ≪ UI\Draw\Pen::fill
  • UI\Draw\Pen::save ≫
  • PHP Manual
  • UI\Draw\Pen
  • Restore

UI\Draw\Pen::restore

(UI 0.9.9)

UI\Draw\Pen::restore — Restore

説明

public UI\Draw\Pen::restore()

Shall restore a previously saved Pen

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Save

  • ≪ UI\Draw\Pen::restore
  • UI\Draw\Pen::stroke ≫
  • PHP Manual
  • UI\Draw\Pen
  • Save

UI\Draw\Pen::save

(UI 0.9.9)

UI\Draw\Pen::save — Save

説明

public UI\Draw\Pen::save()

Shall save the Pen

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Stroke a Path

  • ≪ UI\Draw\Pen::save
  • UI\Draw\Pen::transform ≫
  • PHP Manual
  • UI\Draw\Pen
  • Stroke a Path

UI\Draw\Pen::stroke

(UI 0.9.9)

UI\Draw\Pen::stroke — Stroke a Path

説明

public UI\Draw\Pen::stroke(UI\Draw\Path $path, UI\Draw\Brush $with, UI\Draw\Stroke $stroke)
public UI\Draw\Pen::stroke(UI\Draw\Path $path, UI\Draw\Color $with, UI\Draw\Stroke $stroke)
public UI\Draw\Pen::stroke(UI\Draw\Path $path, int $with, UI\Draw\Stroke $stroke)

Shall stroke the given path

パラメータ

path

The path to stroke

with

The color or brush to stroke with

stroke

The configuration of the stroke

User Contributed Notes

There are no user contributed notes for this page.


Matrix Transform

  • ≪ UI\Draw\Pen::stroke
  • UI\Draw\Pen::write ≫
  • PHP Manual
  • UI\Draw\Pen
  • Matrix Transform

UI\Draw\Pen::transform

(UI 0.9.9)

UI\Draw\Pen::transform — Matrix Transform

説明

public UI\Draw\Pen::transform(UI\Draw\Matrix $matrix)

Shall perform matrix transformation

パラメータ

matrix

The matrix to use

User Contributed Notes

There are no user contributed notes for this page.


Draw Text at Point

  • ≪ UI\Draw\Pen::transform
  • UI\Draw\Path ≫
  • PHP Manual
  • UI\Draw\Pen
  • Draw Text at Point

UI\Draw\Pen::write

(UI 0.9.9)

UI\Draw\Pen::write — Draw Text at Point

説明

public UI\Draw\Pen::write(UI\Point $point, UI\Draw\Text\Layout $layout)

Shall draw the given text layout at the given point

パラメータ

point

The point to perform the drawing

layout

The layout of the text to draw

User Contributed Notes

There are no user contributed notes for this page.


Draw Path

(UI 0.9.9)

はじめに

A Draw Path guides a Draw Pen, telling the Pen where to draw on an Area.

クラス概要

class UI\Draw\Path {
/* 定数 */
const int Winding;
const int Alternate;
/* Constructor */
public __construct(int $mode = UI\Draw\Path::Winding)
/* メソッド */
public addRectangle(UI\Point $point, UI\Size $size)
public arcTo(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)
public bezierTo(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)
public closeFigure()
public end()
public lineTo(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)
public newFigure(UI\Point $point)
public newFigureWithArc(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)
}

定義済み定数

UI\Draw\Path::Winding

This is the default draw path mode

UI\Draw\Path::Alternate

This is the alternate draw path mode

目次

  • UI\Draw\Path::addRectangle — Draw a Rectangle
  • UI\Draw\Path::arcTo — Draw an Arc
  • UI\Draw\Path::bezierTo — Draw Bezier Curve
  • UI\Draw\Path::closeFigure — Close Figure
  • UI\Draw\Path::__construct — Construct a new Path
  • UI\Draw\Path::end — Finalize Path
  • UI\Draw\Path::lineTo — Draw a Line
  • UI\Draw\Path::newFigure — Draw Figure
  • UI\Draw\Path::newFigureWithArc — Draw Figure with Arc

User Contributed Notes

There are no user contributed notes for this page.


Draw a Rectangle

  • ≪ UI\Draw\Path
  • UI\Draw\Path::arcTo ≫
  • PHP Manual
  • UI\Draw\Path
  • Draw a Rectangle

UI\Draw\Path::addRectangle

(UI 0.9.9)

UI\Draw\Path::addRectangle — Draw a Rectangle

説明

public UI\Draw\Path::addRectangle(UI\Point $point, UI\Size $size)

Shall map the path of a rectangle of the given size, at the given point

パラメータ

point

The point to begin the shape

size

The size of the rectangle

User Contributed Notes

There are no user contributed notes for this page.


Draw an Arc

  • ≪ UI\Draw\Path::addRectangle
  • UI\Draw\Path::bezierTo ≫
  • PHP Manual
  • UI\Draw\Path
  • Draw an Arc

UI\Draw\Path::arcTo

(UI 0.9.9)

UI\Draw\Path::arcTo — Draw an Arc

説明

public UI\Draw\Path::arcTo(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)

Shall map the path for an arc

パラメータ

point

The point to begin mapping

radius

The radius of the arc

angle

The angle of the arc

sweep

The sweep of the arc

negative

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Draw Bezier Curve

  • ≪ UI\Draw\Path::arcTo
  • UI\Draw\Path::closeFigure ≫
  • PHP Manual
  • UI\Draw\Path
  • Draw Bezier Curve

UI\Draw\Path::bezierTo

(UI 0.9.9)

UI\Draw\Path::bezierTo — Draw Bezier Curve

説明

public UI\Draw\Path::bezierTo(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)

Shall draw a bezier curve

パラメータ

point

The point at which to begin mapping

radius

The radius of the curve

angle

The angle of the curve

sweep

The sweep of the curve

negative

User Contributed Notes

There are no user contributed notes for this page.


Close Figure

  • ≪ UI\Draw\Path::bezierTo
  • UI\Draw\Path::__construct ≫
  • PHP Manual
  • UI\Draw\Path
  • Close Figure

UI\Draw\Path::closeFigure

(UI 0.9.9)

UI\Draw\Path::closeFigure — Close Figure

説明

public UI\Draw\Path::closeFigure()

Shall close the current figure

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Path

  • ≪ UI\Draw\Path::closeFigure
  • UI\Draw\Path::end ≫
  • PHP Manual
  • UI\Draw\Path
  • Construct a new Path

UI\Draw\Path::__construct

(UI 0.9.9)

UI\Draw\Path::__construct — Construct a new Path

説明

public UI\Draw\Path::__construct(int $mode = UI\Draw\Path::Winding)

Shall construct a new path in the given mode

パラメータ

mode

Path::Winding or Path::Alternate

User Contributed Notes

There are no user contributed notes for this page.


Finalize Path

  • ≪ UI\Draw\Path::__construct
  • UI\Draw\Path::lineTo ≫
  • PHP Manual
  • UI\Draw\Path
  • Finalize Path

UI\Draw\Path::end

(UI 0.9.9)

UI\Draw\Path::end — Finalize Path

説明

public UI\Draw\Path::end()

Shall finalize this Path

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Draw a Line

  • ≪ UI\Draw\Path::end
  • UI\Draw\Path::newFigure ≫
  • PHP Manual
  • UI\Draw\Path
  • Draw a Line

UI\Draw\Path::lineTo

(UI 0.9.9)

UI\Draw\Path::lineTo — Draw a Line

説明

public UI\Draw\Path::lineTo(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)

Shall map the path for a line

パラメータ

point

The point to begin mapping

radius

angle

sweep

negative

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Draw Figure

  • ≪ UI\Draw\Path::lineTo
  • UI\Draw\Path::newFigureWithArc ≫
  • PHP Manual
  • UI\Draw\Path
  • Draw Figure

UI\Draw\Path::newFigure

(UI 0.9.9)

UI\Draw\Path::newFigure — Draw Figure

説明

public UI\Draw\Path::newFigure(UI\Point $point)

Shall map a new figure at the given point

パラメータ

point

The point to begin mapping

User Contributed Notes

There are no user contributed notes for this page.


Draw Figure with Arc

  • ≪ UI\Draw\Path::newFigure
  • UI\Draw\Matrix ≫
  • PHP Manual
  • UI\Draw\Path
  • Draw Figure with Arc

UI\Draw\Path::newFigureWithArc

(UI 0.9.9)

UI\Draw\Path::newFigureWithArc — Draw Figure with Arc

説明

public UI\Draw\Path::newFigureWithArc(
UI\Point $point,
float $radius,
float $angle,
float $sweep,
float $negative
)

パラメータ

point

radius

angle

sweep

negative

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Draw Matrix

(UI 0.9.9)

はじめに

クラス概要

class UI\Draw\Matrix {
/* メソッド */
public invert()
public isInvertible(): bool
public multiply(UI\Draw\Matrix $matrix): UI\Draw\Matrix
public rotate(UI\Point $point, float $amount)
public scale(UI\Point $center, UI\Point $point)
public skew(UI\Point $point, UI\Point $amount)
public translate(UI\Point $point)
}

目次

  • UI\Draw\Matrix::invert — Invert Matrix
  • UI\Draw\Matrix::isInvertible — Invertible Detection
  • UI\Draw\Matrix::multiply — Multiply Matrix
  • UI\Draw\Matrix::rotate — Rotate Matrix
  • UI\Draw\Matrix::scale — Scale Matrix
  • UI\Draw\Matrix::skew — Skew Matrix
  • UI\Draw\Matrix::translate — Translate Matrix

User Contributed Notes

There are no user contributed notes for this page.


Invert Matrix

  • ≪ UI\Draw\Matrix
  • UI\Draw\Matrix::isInvertible ≫
  • PHP Manual
  • UI\Draw\Matrix
  • Invert Matrix

UI\Draw\Matrix::invert

(UI 0.9.9)

UI\Draw\Matrix::invert — Invert Matrix

説明

public UI\Draw\Matrix::invert()

Shall invert this matrix

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Invertible Detection

  • ≪ UI\Draw\Matrix::invert
  • UI\Draw\Matrix::multiply ≫
  • PHP Manual
  • UI\Draw\Matrix
  • Invertible Detection

UI\Draw\Matrix::isInvertible

(UI 0.9.9)

UI\Draw\Matrix::isInvertible — Invertible Detection

説明

public UI\Draw\Matrix::isInvertible(): bool

Shall detect if this Matrix may be inverted

パラメータ

この関数にはパラメータはありません。

User Contributed Notes

There are no user contributed notes for this page.


Multiply Matrix

  • ≪ UI\Draw\Matrix::isInvertible
  • UI\Draw\Matrix::rotate ≫
  • PHP Manual
  • UI\Draw\Matrix
  • Multiply Matrix

UI\Draw\Matrix::multiply

(UI 0.9.9)

UI\Draw\Matrix::multiply — Multiply Matrix

説明

public UI\Draw\Matrix::multiply(UI\Draw\Matrix $matrix): UI\Draw\Matrix

Shall multiply this matrix with the given matrix

パラメータ

この関数にはパラメータはありません。

戻り値

The new Matrix

User Contributed Notes

There are no user contributed notes for this page.


Rotate Matrix

  • ≪ UI\Draw\Matrix::multiply
  • UI\Draw\Matrix::scale ≫
  • PHP Manual
  • UI\Draw\Matrix
  • Rotate Matrix

UI\Draw\Matrix::rotate

(UI 0.9.9)

UI\Draw\Matrix::rotate — Rotate Matrix

説明

public UI\Draw\Matrix::rotate(UI\Point $point, float $amount)

Shall rotate this Matrix

パラメータ

point

amount

User Contributed Notes

There are no user contributed notes for this page.


Scale Matrix

  • ≪ UI\Draw\Matrix::rotate
  • UI\Draw\Matrix::skew ≫
  • PHP Manual
  • UI\Draw\Matrix
  • Scale Matrix

UI\Draw\Matrix::scale

(UI 0.9.9)

UI\Draw\Matrix::scale — Scale Matrix

説明

public UI\Draw\Matrix::scale(UI\Point $center, UI\Point $point)

Shall scale this Matrix

パラメータ

center

point

User Contributed Notes

There are no user contributed notes for this page.


Skew Matrix

  • ≪ UI\Draw\Matrix::scale
  • UI\Draw\Matrix::translate ≫
  • PHP Manual
  • UI\Draw\Matrix
  • Skew Matrix

UI\Draw\Matrix::skew

(UI 0.9.9)

UI\Draw\Matrix::skew — Skew Matrix

説明

public UI\Draw\Matrix::skew(UI\Point $point, UI\Point $amount)

Shall skew this Matrix

パラメータ

point

amount

User Contributed Notes

There are no user contributed notes for this page.


Translate Matrix

  • ≪ UI\Draw\Matrix::skew
  • UI\Draw\Color ≫
  • PHP Manual
  • UI\Draw\Matrix
  • Translate Matrix

UI\Draw\Matrix::translate

(UI 0.9.9)

UI\Draw\Matrix::translate — Translate Matrix

説明

public UI\Draw\Matrix::translate(UI\Point $point)

Shall translate this Matrix

パラメータ

point

User Contributed Notes

There are no user contributed notes for this page.


Color Representation

(UI 0.9.9)

はじめに

Represents RGBA colours, individual channels are accessible via public properties.

クラス概要

class UI\Draw\Color {
/* 定数 */
const int Red;
const int Green;
const int Blue;
const int Alpha;
/* プロパティ */
public $r;
public $g;
public $b;
public $a;
/* Constructor */
public __construct(UI\Draw\Color $color = ?)
public __construct(int $color = ?)
/* メソッド */
public getChannel(int $channel): float
public setChannel(int $channel, float $value): void
}

プロパティ

r

Provides access to the red channel

g

Provides access to the green channel

b

Provides access to the blue channel

a

Provides access to the alpha channel

定義済み定数

UI\Draw\Color::Red

Identifies the red channel

UI\Draw\Color::Green

Identifies the green channel

UI\Draw\Color::Blue

Identifies the blue channel

UI\Draw\Color::Alpha

Identifies the alpha channel

目次

  • UI\Draw\Color::__construct — Construct new Color
  • UI\Draw\Color::getChannel — Color Manipulation
  • UI\Draw\Color::setChannel — Color Manipulation

User Contributed Notes

There are no user contributed notes for this page.


Construct new Color

  • ≪ UI\Draw\Color
  • UI\Draw\Color::getChannel ≫
  • PHP Manual
  • UI\Draw\Color
  • Construct new Color

UI\Draw\Color::__construct

(UI 0.9.9)

UI\Draw\Color::__construct — Construct new Color

説明

public UI\Draw\Color::__construct(UI\Draw\Color $color = ?)
public UI\Draw\Color::__construct(int $color = ?)

Shall construct a new color

パラメータ

color

May be UI\Draw\Color or RRGGBBAA

User Contributed Notes

There are no user contributed notes for this page.


Color Manipulation

  • ≪ UI\Draw\Color::__construct
  • UI\Draw\Color::setChannel ≫
  • PHP Manual
  • UI\Draw\Color
  • Color Manipulation

UI\Draw\Color::getChannel

(UI 0.9.9)

UI\Draw\Color::getChannel — Color Manipulation

説明

public UI\Draw\Color::getChannel(int $channel): float

Shall retrieve the value for a channel

パラメータ

channel

Constant channel identity

戻り値

The current value of the requested channel

User Contributed Notes

There are no user contributed notes for this page.


Color Manipulation

  • ≪ UI\Draw\Color::getChannel
  • UI\Draw\Stroke ≫
  • PHP Manual
  • UI\Draw\Color
  • Color Manipulation

UI\Draw\Color::setChannel

(UI 0.9.9)

UI\Draw\Color::setChannel — Color Manipulation

説明

public UI\Draw\Color::setChannel(int $channel, float $value): void

Shall set the selected channel to the given value

パラメータ

channel

Constant channel identity

value

The new value for the selected channel

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Draw Stroke

(UI 0.9.9)

はじめに

Holds the configuration for the Pen to perform a stroke

クラス概要

class UI\Draw\Stroke {
/* Constructor */
public __construct(
int $cap = UI\Draw\Line\Cap::Flat,
int $join = UI\Draw\Line\Join::Miter,
float $thickness = 1,
float $miterLimit = 10
)
/* メソッド */
public getCap(): int
public getJoin(): int
public getMiterLimit(): float
public getThickness(): float
public setCap(int $cap)
public setJoin(int $join)
public setMiterLimit(float $limit)
public setThickness(float $thickness)
}

目次

  • UI\Draw\Stroke::__construct — Construct a new Stroke
  • UI\Draw\Stroke::getCap — Get Line Cap
  • UI\Draw\Stroke::getJoin — Get Line Join
  • UI\Draw\Stroke::getMiterLimit — Get Miter Limit
  • UI\Draw\Stroke::getThickness — Get Thickness
  • UI\Draw\Stroke::setCap — Set Line Cap
  • UI\Draw\Stroke::setJoin — Set Line Join
  • UI\Draw\Stroke::setMiterLimit — Set Miter Limit
  • UI\Draw\Stroke::setThickness — Set Thickness

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Stroke

  • ≪ UI\Draw\Stroke
  • UI\Draw\Stroke::getCap ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Construct a new Stroke

UI\Draw\Stroke::__construct

(UI 0.9.9)

UI\Draw\Stroke::__construct — Construct a new Stroke

説明

public UI\Draw\Stroke::__construct(
int $cap = UI\Draw\Line\Cap::Flat,
int $join = UI\Draw\Line\Join::Miter,
float $thickness = 1,
float $miterLimit = 10
)

Shall construct a new Stroke

パラメータ

cap

UI\Draw\Line\Cap::Flat, UI\Draw\Line\Cap::Round, or UI\Draw\Line\Cap::Square

join

UI\Draw\Line\Join::Miter, UI\Draw\Line\Join::Round, or UI\Draw\Line\Join::Bevel

thickness

The thickness of the stroke

miterLimit

Miter limit (default is sensible for all supported platforms)

User Contributed Notes

There are no user contributed notes for this page.


Get Line Cap

  • ≪ UI\Draw\Stroke::__construct
  • UI\Draw\Stroke::getJoin ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Get Line Cap

UI\Draw\Stroke::getCap

(UI 0.9.9)

UI\Draw\Stroke::getCap — Get Line Cap

説明

public UI\Draw\Stroke::getCap(): int

Shall retrieve the line cap setting of this Stroke

パラメータ

この関数にはパラメータはありません。

戻り値

UI\Draw\Line\Cap::Flat, UI\Draw\Line\Cap::Round, or UI\Draw\Line\Cap::Square

User Contributed Notes

There are no user contributed notes for this page.


Get Line Join

  • ≪ UI\Draw\Stroke::getCap
  • UI\Draw\Stroke::getMiterLimit ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Get Line Join

UI\Draw\Stroke::getJoin

(UI 0.9.9)

UI\Draw\Stroke::getJoin — Get Line Join

説明

public UI\Draw\Stroke::getJoin(): int

Shall retrieve the line join setting of this Stroke

パラメータ

この関数にはパラメータはありません。

戻り値

UI\Draw\Line\Join::Miter, UI\Draw\Line\Join::Round, or UI\Draw\Line\Join::Bevel

User Contributed Notes

There are no user contributed notes for this page.


Get Miter Limit

  • ≪ UI\Draw\Stroke::getJoin
  • UI\Draw\Stroke::getThickness ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Get Miter Limit

UI\Draw\Stroke::getMiterLimit

(UI 0.9.9)

UI\Draw\Stroke::getMiterLimit — Get Miter Limit

説明

public UI\Draw\Stroke::getMiterLimit(): float

Shall retrieve the miter limit of this Stroke

パラメータ

この関数にはパラメータはありません。

戻り値

The current miter limit

User Contributed Notes

There are no user contributed notes for this page.


Get Thickness

  • ≪ UI\Draw\Stroke::getMiterLimit
  • UI\Draw\Stroke::setCap ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Get Thickness

UI\Draw\Stroke::getThickness

(UI 0.9.9)

UI\Draw\Stroke::getThickness — Get Thickness

説明

public UI\Draw\Stroke::getThickness(): float

Shall retrieve the thickness of this Stroke

パラメータ

この関数にはパラメータはありません。

戻り値

The current thickness

User Contributed Notes

There are no user contributed notes for this page.


Set Line Cap

  • ≪ UI\Draw\Stroke::getThickness
  • UI\Draw\Stroke::setJoin ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Set Line Cap

UI\Draw\Stroke::setCap

(UI 0.9.9)

UI\Draw\Stroke::setCap — Set Line Cap

説明

public UI\Draw\Stroke::setCap(int $cap)

Shall set the line cap setting for this Stroke

パラメータ

cap

UI\Draw\Line\Cap::Flat, UI\Draw\Line\Cap::Round, or UI\Draw\Line\Cap::Square

User Contributed Notes

There are no user contributed notes for this page.


Set Line Join

  • ≪ UI\Draw\Stroke::setCap
  • UI\Draw\Stroke::setMiterLimit ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Set Line Join

UI\Draw\Stroke::setJoin

(UI 0.9.9)

UI\Draw\Stroke::setJoin — Set Line Join

説明

public UI\Draw\Stroke::setJoin(int $join)

Shall set the line join setting for this Stroke

パラメータ

join

UI\Draw\Line\Join::Miter, UI\Draw\Line\Join::Round, or UI\Draw\Line\Join::Bevel

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Set Miter Limit

  • ≪ UI\Draw\Stroke::setJoin
  • UI\Draw\Stroke::setThickness ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Set Miter Limit

UI\Draw\Stroke::setMiterLimit

(UI 0.9.9)

UI\Draw\Stroke::setMiterLimit — Set Miter Limit

説明

public UI\Draw\Stroke::setMiterLimit(float $limit)

Set the miter limit for this Stroke

パラメータ

limit

The new limit

User Contributed Notes

There are no user contributed notes for this page.


Set Thickness

  • ≪ UI\Draw\Stroke::setMiterLimit
  • UI\Draw\Brush ≫
  • PHP Manual
  • UI\Draw\Stroke
  • Set Thickness

UI\Draw\Stroke::setThickness

(UI 0.9.9)

UI\Draw\Stroke::setThickness — Set Thickness

説明

public UI\Draw\Stroke::setThickness(float $thickness)

Shall set the thickness for this Stroke

パラメータ

thickness

The new thickness

User Contributed Notes

There are no user contributed notes for this page.


Brushes

(UI 0.9.9)

はじめに

Represents a solid color brush

クラス概要

class UI\Draw\Brush {
/* Constructor */
public __construct(UI\Draw\Color $color)
public __construct(int $color)
/* メソッド */
public getColor(): UI\Draw\Color
public setColor(UI\Draw\Color $color): void
public setColor(int $color): void
}

目次

  • UI\Draw\Brush::__construct — Construct a new Brush
  • UI\Draw\Brush::getColor — Get Color
  • UI\Draw\Brush::setColor — Set Color

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Brush

  • ≪ UI\Draw\Brush
  • UI\Draw\Brush::getColor ≫
  • PHP Manual
  • UI\Draw\Brush
  • Construct a new Brush

UI\Draw\Brush::__construct

(UI 0.9.9)

UI\Draw\Brush::__construct — Construct a new Brush

説明

public UI\Draw\Brush::__construct(UI\Draw\Color $color)
public UI\Draw\Brush::__construct(int $color)

Shall construct a solid brush using the given color

パラメータ

color

Can be a UI\Draw\Color or RRGGBBAA

User Contributed Notes

There are no user contributed notes for this page.


Get Color

  • ≪ UI\Draw\Brush::__construct
  • UI\Draw\Brush::setColor ≫
  • PHP Manual
  • UI\Draw\Brush
  • Get Color

UI\Draw\Brush::getColor

(UI 0.9.9)

UI\Draw\Brush::getColor — Get Color

説明

public UI\Draw\Brush::getColor(): UI\Draw\Color

Shall return a UI\Draw\Color for this brush

パラメータ

この関数にはパラメータはありません。

戻り値

The current color of the brush

User Contributed Notes

There are no user contributed notes for this page.


Set Color

  • ≪ UI\Draw\Brush::getColor
  • UI\Draw\Brush\Gradient ≫
  • PHP Manual
  • UI\Draw\Brush
  • Set Color

UI\Draw\Brush::setColor

(UI 0.9.9)

UI\Draw\Brush::setColor — Set Color

説明

public UI\Draw\Brush::setColor(UI\Draw\Color $color): void
public UI\Draw\Brush::setColor(int $color): void

Shall set the color of this brush to the color provided

パラメータ

color

Can be a UI\Draw\Color or RRGGBBAA

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Gradient Brushes

(UI 2.0.0)

はじめに

Abstract for gradient brushes

クラス概要

abstract class UI\Draw\Brush\Gradient extends UI\Draw\Brush {
/* メソッド */
public addStop(float $position, UI\Draw\Color $color): int
public addStop(float $position, int $color): int
public delStop(int $index): int
public setStop(int $index, float $position, UI\Draw\Color $color): bool
public setStop(int $index, float $position, int $color): bool
/* 継承したメソッド */
public UI\Draw\Brush::getColor(): UI\Draw\Color
public UI\Draw\Brush::setColor(UI\Draw\Color $color): void
public UI\Draw\Brush::setColor(int $color): void
}

目次

  • UI\Draw\Brush\Gradient::addStop — Stop Manipulation
  • UI\Draw\Brush\Gradient::delStop — Stop Manipulation
  • UI\Draw\Brush\Gradient::setStop — Stop Manipulation

User Contributed Notes

There are no user contributed notes for this page.


Stop Manipulation

  • ≪ UI\Draw\Brush\Gradient
  • UI\Draw\Brush\Gradient::delStop ≫
  • PHP Manual
  • UI\Draw\Brush\Gradient
  • Stop Manipulation

UI\Draw\Brush\Gradient::addStop

(UI 2.0.0)

UI\Draw\Brush\Gradient::addStop — Stop Manipulation

説明

public UI\Draw\Brush\Gradient::addStop(float $position, UI\Draw\Color $color): int
public UI\Draw\Brush\Gradient::addStop(float $position, int $color): int

Shall at a stop of the given color at the given position

パラメータ

position

The position for the new stop

color

The color for the new stop, may be UI\Draw\Color or RRGGBBAA

戻り値

Total number of stops

User Contributed Notes

There are no user contributed notes for this page.


Stop Manipulation

  • ≪ UI\Draw\Brush\Gradient::addStop
  • UI\Draw\Brush\Gradient::setStop ≫
  • PHP Manual
  • UI\Draw\Brush\Gradient
  • Stop Manipulation

UI\Draw\Brush\Gradient::delStop

(UI 2.0.0)

UI\Draw\Brush\Gradient::delStop — Stop Manipulation

説明

public UI\Draw\Brush\Gradient::delStop(int $index): int

警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

パラメータ

index

戻り値

Total number of stops

User Contributed Notes

There are no user contributed notes for this page.


Stop Manipulation

  • ≪ UI\Draw\Brush\Gradient::delStop
  • UI\Draw\Brush\LinearGradient ≫
  • PHP Manual
  • UI\Draw\Brush\Gradient
  • Stop Manipulation

UI\Draw\Brush\Gradient::setStop

(UI 2.0.0)

UI\Draw\Brush\Gradient::setStop — Stop Manipulation

説明

public UI\Draw\Brush\Gradient::setStop(int $index, float $position, UI\Draw\Color $color): bool
public UI\Draw\Brush\Gradient::setStop(int $index, float $position, int $color): bool

パラメータ

index

The index of the stop to set

position

The position for the stop

color

The color for the stop, may be UI\Draw\Color or RRGGBBAA

戻り値

Indication of success

User Contributed Notes

There are no user contributed notes for this page.


Linear Gradient

(UI 2.0.0)

はじめに

クラス概要

class UI\Draw\Brush\LinearGradient extends UI\Draw\Brush\Gradient {
/* Constructor */
public __construct(UI\Point $start, UI\Point $end)
/* 継承したメソッド */
public UI\Draw\Brush\Gradient::addStop(float $position, UI\Draw\Color $color): int
public UI\Draw\Brush\Gradient::addStop(float $position, int $color): int
public UI\Draw\Brush\Gradient::delStop(int $index): int
public UI\Draw\Brush\Gradient::setStop(int $index, float $position, UI\Draw\Color $color): bool
public UI\Draw\Brush\Gradient::setStop(int $index, float $position, int $color): bool
}

目次

  • UI\Draw\Brush\LinearGradient::__construct — Construct a Linear Gradient

User Contributed Notes

There are no user contributed notes for this page.


Construct a Linear Gradient

  • ≪ UI\Draw\Brush\LinearGradient
  • UI\Draw\Brush\RadialGradient ≫
  • PHP Manual
  • UI\Draw\Brush\LinearGradient
  • Construct a Linear Gradient

UI\Draw\Brush\LinearGradient::__construct

(UI 2.0.0)

UI\Draw\Brush\LinearGradient::__construct — Construct a Linear Gradient

説明

public UI\Draw\Brush\LinearGradient::__construct(UI\Point $start, UI\Point $end)

Shall construct a new linear gradient

パラメータ

start

end

User Contributed Notes

There are no user contributed notes for this page.


Radial Gradient

(UI 2.0.0)

はじめに

クラス概要

class UI\Draw\Brush\RadialGradient extends UI\Draw\Brush\Gradient {
/* Constructor */
public __construct(UI\Point $start, UI\Point $outer, float $radius)
/* 継承したメソッド */
public UI\Draw\Brush\Gradient::addStop(float $position, UI\Draw\Color $color): int
public UI\Draw\Brush\Gradient::addStop(float $position, int $color): int
public UI\Draw\Brush\Gradient::delStop(int $index): int
public UI\Draw\Brush\Gradient::setStop(int $index, float $position, UI\Draw\Color $color): bool
public UI\Draw\Brush\Gradient::setStop(int $index, float $position, int $color): bool
}

目次

  • UI\Draw\Brush\RadialGradient::__construct — Construct a new Radial Gradient

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Radial Gradient

  • ≪ UI\Draw\Brush\RadialGradient
  • UI\Draw\Text\Layout ≫
  • PHP Manual
  • UI\Draw\Brush\RadialGradient
  • Construct a new Radial Gradient

UI\Draw\Brush\RadialGradient::__construct

(UI 2.0.0)

UI\Draw\Brush\RadialGradient::__construct — Construct a new Radial Gradient

説明

public UI\Draw\Brush\RadialGradient::__construct(UI\Point $start, UI\Point $outer, float $radius)

Shall construct a new radial gradient

パラメータ

start

outer

radius

User Contributed Notes

There are no user contributed notes for this page.


Represents Text Layout

(UI 0.9.9)

はじめに

A Text Layout represents the layout of text which will be drawn by the Pen

クラス概要

class UI\Draw\Text\Layout {
/* Constructor */
public __construct(string $text, UI\Draw\Text\Font $font, float $width)
/* メソッド */
public setColor(UI\Draw\Color $color, int $start = 0, int $end = ?)
public setColor(int $color, int $start = 0, int $end = ?)
public setWidth(float $width)
}

目次

  • UI\Draw\Text\Layout::__construct — Construct a new Text Layout
  • UI\Draw\Text\Layout::setColor — Set Color
  • UI\Draw\Text\Layout::setWidth — Set Width

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Text Layout

  • ≪ UI\Draw\Text\Layout
  • UI\Draw\Text\Layout::setColor ≫
  • PHP Manual
  • UI\Draw\Text\Layout
  • Construct a new Text Layout

UI\Draw\Text\Layout::__construct

(UI 0.9.9)

UI\Draw\Text\Layout::__construct — Construct a new Text Layout

説明

public UI\Draw\Text\Layout::__construct(string $text, UI\Draw\Text\Font $font, float $width)

Shall construct a new Text Layout

パラメータ

text

The text for the layout

font

The font to use for writing

width

The width of the layout

User Contributed Notes

There are no user contributed notes for this page.


Set Color

  • ≪ UI\Draw\Text\Layout::__construct
  • UI\Draw\Text\Layout::setWidth ≫
  • PHP Manual
  • UI\Draw\Text\Layout
  • Set Color

UI\Draw\Text\Layout::setColor

(UI 0.9.9)

UI\Draw\Text\Layout::setColor — Set Color

説明

public UI\Draw\Text\Layout::setColor(UI\Draw\Color $color, int $start = 0, int $end = ?)
public UI\Draw\Text\Layout::setColor(int $color, int $start = 0, int $end = ?)

Shall set the Color for all of, or a range of the text in the Layout

パラメータ

color

The color to use

start

The starting character

end

The ending character, by default the end of the string

User Contributed Notes

There are no user contributed notes for this page.


Set Width

  • ≪ UI\Draw\Text\Layout::setColor
  • UI\Draw\Text\Font ≫
  • PHP Manual
  • UI\Draw\Text\Layout
  • Set Width

UI\Draw\Text\Layout::setWidth

(UI 0.9.9)

UI\Draw\Text\Layout::setWidth — Set Width

説明

public UI\Draw\Text\Layout::setWidth(float $width)

Shall set the width of this Text Layout

パラメータ

width

The new width

User Contributed Notes

There are no user contributed notes for this page.


Represents a Font

(UI 0.9.9)

はじめに

Loads a described font

クラス概要

class UI\Draw\Text\Font {
/* Constructor */
public __construct(UI\Draw\Text\Font\Descriptor $descriptor)
/* メソッド */
public getAscent(): float
public getDescent(): float
public getLeading(): float
public getUnderlinePosition(): float
public getUnderlineThickness(): float
}

目次

  • UI\Draw\Text\Font::__construct — Construct a new Font
  • UI\Draw\Text\Font::getAscent — Font Metrics
  • UI\Draw\Text\Font::getDescent — Font Metrics
  • UI\Draw\Text\Font::getLeading — Font Metrics
  • UI\Draw\Text\Font::getUnderlinePosition — Font Metrics
  • UI\Draw\Text\Font::getUnderlineThickness — Font Metrics

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Font

  • ≪ UI\Draw\Text\Font
  • UI\Draw\Text\Font::getAscent ≫
  • PHP Manual
  • UI\Draw\Text\Font
  • Construct a new Font

UI\Draw\Text\Font::__construct

(UI 0.9.9)

UI\Draw\Text\Font::__construct — Construct a new Font

説明

public UI\Draw\Text\Font::__construct(UI\Draw\Text\Font\Descriptor $descriptor)

Shall construct a new Font using the given descriptor

パラメータ

descriptor

The descriptor for the Font

User Contributed Notes

There are no user contributed notes for this page.


Font Metrics

  • ≪ UI\Draw\Text\Font::__construct
  • UI\Draw\Text\Font::getDescent ≫
  • PHP Manual
  • UI\Draw\Text\Font
  • Font Metrics

UI\Draw\Text\Font::getAscent

(UI 1.0.3)

UI\Draw\Text\Font::getAscent — Font Metrics

説明

public UI\Draw\Text\Font::getAscent(): float

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Font Metrics

  • ≪ UI\Draw\Text\Font::getAscent
  • UI\Draw\Text\Font::getLeading ≫
  • PHP Manual
  • UI\Draw\Text\Font
  • Font Metrics

UI\Draw\Text\Font::getDescent

(UI 1.0.3)

UI\Draw\Text\Font::getDescent — Font Metrics

説明

public UI\Draw\Text\Font::getDescent(): float

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Font Metrics

  • ≪ UI\Draw\Text\Font::getDescent
  • UI\Draw\Text\Font::getUnderlinePosition ≫
  • PHP Manual
  • UI\Draw\Text\Font
  • Font Metrics

UI\Draw\Text\Font::getLeading

(UI 1.0.3)

UI\Draw\Text\Font::getLeading — Font Metrics

説明

public UI\Draw\Text\Font::getLeading(): float

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Font Metrics

  • ≪ UI\Draw\Text\Font::getLeading
  • UI\Draw\Text\Font::getUnderlineThickness ≫
  • PHP Manual
  • UI\Draw\Text\Font
  • Font Metrics

UI\Draw\Text\Font::getUnderlinePosition

(UI 1.0.3)

UI\Draw\Text\Font::getUnderlinePosition — Font Metrics

説明

public UI\Draw\Text\Font::getUnderlinePosition(): float

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Font Metrics

  • ≪ UI\Draw\Text\Font::getUnderlinePosition
  • UI\Draw\Text\Font\Descriptor ≫
  • PHP Manual
  • UI\Draw\Text\Font
  • Font Metrics

UI\Draw\Text\Font::getUnderlineThickness

(UI 1.0.3)

UI\Draw\Text\Font::getUnderlineThickness — Font Metrics

説明

public UI\Draw\Text\Font::getUnderlineThickness(): float

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Font Descriptor

(UI 0.9.9)

はじめに

Describes a font

クラス概要

class UI\Draw\Text\Font\Descriptor {
/* Constructor */
public __construct(
string $family,
float $size,
int $weight = UI\Draw\Text\Font\Weight::Normal,
int $italic = UI\Draw\Text\Font\Italic::Normal,
int $stretch = UI\Draw\Text\Font\Stretch::Normal
)
/* メソッド */
public getFamily(): string
public getItalic(): int
public getSize(): float
public getStretch(): int
public getWeight(): int
}

目次

  • UI\Draw\Text\Font\Descriptor::__construct — Construct a new Font Descriptor
  • UI\Draw\Text\Font\Descriptor::getFamily — Get Font Family
  • UI\Draw\Text\Font\Descriptor::getItalic — Style Detection
  • UI\Draw\Text\Font\Descriptor::getSize — Size Detection
  • UI\Draw\Text\Font\Descriptor::getStretch — Style Detection
  • UI\Draw\Text\Font\Descriptor::getWeight — Weight Detection

User Contributed Notes

There are no user contributed notes for this page.


Construct a new Font Descriptor

  • ≪ UI\Draw\Text\Font\Descriptor
  • UI\Draw\Text\Font\Descriptor::getFamily ≫
  • PHP Manual
  • UI\Draw\Text\Font\Descriptor
  • Construct a new Font Descriptor

UI\Draw\Text\Font\Descriptor::__construct

(UI 0.9.9)

UI\Draw\Text\Font\Descriptor::__construct — Construct a new Font Descriptor

説明

public UI\Draw\Text\Font\Descriptor::__construct(
string $family,
float $size,
int $weight = UI\Draw\Text\Font\Weight::Normal,
int $italic = UI\Draw\Text\Font\Italic::Normal,
int $stretch = UI\Draw\Text\Font\Stretch::Normal
)

Shall construct a new Font Descriptor

パラメータ

family

The name of a valid family of fonts

size

The preferred size

weight

UI\Draw\Text\Font\Weight constant

italic

UI\Draw\Text\Font\Italic constant

stretch

UI\Draw\Text\Font\Stretch constant

User Contributed Notes

There are no user contributed notes for this page.


Get Font Family

  • ≪ UI\Draw\Text\Font\Descriptor::__construct
  • UI\Draw\Text\Font\Descriptor::getItalic ≫
  • PHP Manual
  • UI\Draw\Text\Font\Descriptor
  • Get Font Family

UI\Draw\Text\Font\Descriptor::getFamily

(UI 1.0.3)

UI\Draw\Text\Font\Descriptor::getFamily — Get Font Family

説明

public UI\Draw\Text\Font\Descriptor::getFamily(): string

Shall return the requested font family

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Style Detection

  • ≪ UI\Draw\Text\Font\Descriptor::getFamily
  • UI\Draw\Text\Font\Descriptor::getSize ≫
  • PHP Manual
  • UI\Draw\Text\Font\Descriptor
  • Style Detection

UI\Draw\Text\Font\Descriptor::getItalic

(UI 1.0.3)

UI\Draw\Text\Font\Descriptor::getItalic — Style Detection

説明

public UI\Draw\Text\Font\Descriptor::getItalic(): int

Shall return constant setting

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Size Detection

  • ≪ UI\Draw\Text\Font\Descriptor::getItalic
  • UI\Draw\Text\Font\Descriptor::getStretch ≫
  • PHP Manual
  • UI\Draw\Text\Font\Descriptor
  • Size Detection

UI\Draw\Text\Font\Descriptor::getSize

(UI 1.0.3)

UI\Draw\Text\Font\Descriptor::getSize — Size Detection

説明

public UI\Draw\Text\Font\Descriptor::getSize(): float

Shall return the requested size

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Style Detection

  • ≪ UI\Draw\Text\Font\Descriptor::getSize
  • UI\Draw\Text\Font\Descriptor::getWeight ≫
  • PHP Manual
  • UI\Draw\Text\Font\Descriptor
  • Style Detection

UI\Draw\Text\Font\Descriptor::getStretch

(UI 1.0.3)

UI\Draw\Text\Font\Descriptor::getStretch — Style Detection

説明

public UI\Draw\Text\Font\Descriptor::getStretch(): int

Shall return requested stretch

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Weight Detection

  • ≪ UI\Draw\Text\Font\Descriptor::getStretch
  • UI 関数 ≫
  • PHP Manual
  • UI\Draw\Text\Font\Descriptor
  • Weight Detection

UI\Draw\Text\Font\Descriptor::getWeight

(UI 1.0.3)

UI\Draw\Text\Font\Descriptor::getWeight — Weight Detection

説明

public UI\Draw\Text\Font\Descriptor::getWeight(): int

Shall return requested weight

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


UI 関数

目次

  • UI\Draw\Text\Font\fontFamilies — Retrieve Font Families
  • UI\quit — Quit UI Loop
  • UI\run — Enter UI Loop

User Contributed Notes

There are no user contributed notes for this page.


Retrieve Font Families

  • ≪ UI 関数
  • UI\quit ≫
  • PHP Manual
  • UI 関数
  • Retrieve Font Families

UI\Draw\Text\Font\fontFamilies

(UI 0.9.9)

UI\Draw\Text\Font\fontFamilies — Retrieve Font Families

説明

UI\Draw\Text\Font\fontFamilies(): array

Returns an array of valid font families for the current system

パラメータ

この関数にはパラメータはありません。

戻り値

Returns an array of valid font families for the current system.

User Contributed Notes

There are no user contributed notes for this page.


Quit UI Loop

  • ≪ UI\Draw\Text\Font\fontFamilies
  • UI\run ≫
  • PHP Manual
  • UI 関数
  • Quit UI Loop

UI\quit

(UI 2.0.0)

UI\quit — Quit UI Loop

説明

UI\quit(): void

Shall cause the main loop to be exited

パラメータ

この関数にはパラメータはありません。

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Enter UI Loop

  • ≪ UI\quit
  • UI\Draw\Text\Font\Weight ≫
  • PHP Manual
  • UI 関数
  • Enter UI Loop

UI\run

(UI 2.0.0)

UI\run — Enter UI Loop

説明

UI\run(int $flags = ?): void

Shall cause PHP to enter into the main loop, by default control will not be returned to the caller

パラメータ

flags

Set UI\Loop to return control, and UI\Wait to return control after waiting

戻り値

User Contributed Notes

There are no user contributed notes for this page.


Font Weight Settings

(UI 0.9.9)

はじめに

クラス概要

final class UI\Draw\Text\Font\Weight {
/* 定数 */
const int Thin;
const int UltraLight;
const int Light;
const int Book;
const int Normal;
const int Medium;
const int SemiBold;
const int Bold;
const int UltraBold;
const int Heavy;
const int UltraHeavy;
}

定義済み定数

UI\Draw\Text\Font\Weight::Thin
UI\Draw\Text\Font\Weight::UltraLight
UI\Draw\Text\Font\Weight::Light
UI\Draw\Text\Font\Weight::Book
UI\Draw\Text\Font\Weight::Normal
UI\Draw\Text\Font\Weight::Medium
UI\Draw\Text\Font\Weight::SemiBold
UI\Draw\Text\Font\Weight::Bold
UI\Draw\Text\Font\Weight::UltraBold
UI\Draw\Text\Font\Weight::Heavy
UI\Draw\Text\Font\Weight::UltraHeavy

User Contributed Notes

There are no user contributed notes for this page.


Italic Font Settings

(UI 0.9.9)

はじめに

クラス概要

final class UI\Draw\Text\Font\Italic {
/* 定数 */
const int Normal = 0;
const int Oblique = 1;
const int Italic = 2;
}

定義済み定数

UI\Draw\Text\Font\Italic::Normal
UI\Draw\Text\Font\Italic::Oblique
UI\Draw\Text\Font\Italic::Italic

User Contributed Notes

There are no user contributed notes for this page.


Font Stretch Settings

(UI 0.9.9)

はじめに

クラス概要

final class UI\Draw\Text\Font\Stretch {
/* 定数 */
const int UltraCondensed = 0;
const int ExtraCondensed = 1;
const int Condensed = 2;
const int SemiCondensed = 3;
const int Normal = 4;
const int SemiExpanded = 5;
const int Expanded = 6;
const int ExtraExpanded = 7;
const int UltraExpanded = 8;
}

定義済み定数

UI\Draw\Text\Font\Stretch::UltraCondensed
UI\Draw\Text\Font\Stretch::ExtraCondensed
UI\Draw\Text\Font\Stretch::Condensed
UI\Draw\Text\Font\Stretch::SemiCondensed
UI\Draw\Text\Font\Stretch::Normal
UI\Draw\Text\Font\Stretch::SemiExpanded
UI\Draw\Text\Font\Stretch::Expanded
UI\Draw\Text\Font\Stretch::ExtraExpanded
UI\Draw\Text\Font\Stretch::UltraExpanded

User Contributed Notes

There are no user contributed notes for this page.


Line Cap Settings

(UI 0.9.9)

はじめに

クラス概要

final class UI\Draw\Line\Cap {
/* 定数 */
const int Flat;
const int Round;
const int Square;
}

定義済み定数

UI\Draw\Line\Cap::Flat
UI\Draw\Line\Cap::Round
UI\Draw\Line\Cap::Square

User Contributed Notes

There are no user contributed notes for this page.


Line Join Settings

(UI 0.9.9)

はじめに

クラス概要

final class UI\Draw\Line\Join {
/* 定数 */
const int Miter;
const int Round;
const int Bevel;
}

定義済み定数

UI\Draw\Line\Join::Miter
UI\Draw\Line\Join::Round
UI\Draw\Line\Join::Bevel

User Contributed Notes

There are no user contributed notes for this page.


Key Identifiers

(UI 1.0.0)

はじめに

クラス概要

final class UI\Key {
/* 定数 */
const int Escape;
const int Insert;
const int Delete;
const int Home;
const int End;
const int PageUp;
const int PageDown;
const int Up;
const int Down;
const int Left;
const int Right;
const int F1;
const int F2;
const int F3;
const int F4;
const int F5;
const int F6;
const int F7;
const int F8;
const int F9;
const int F10;
const int F11;
const int F12;
const int N0;
const int N1;
const int N2;
const int N3;
const int N4;
const int N5;
const int N6;
const int N7;
const int N8;
const int N9;
const int NDot;
const int NEnter;
const int NAdd;
const int NSubtract;
const int NMultiply;
const int NDivide;
}

定義済み定数

UI\Key::Escape
UI\Key::Insert
UI\Key::Delete
UI\Key::Home
UI\Key::End
UI\Key::PageUp
UI\Key::PageDown
UI\Key::Up
UI\Key::Down
UI\Key::Left
UI\Key::Right
UI\Key::F1
UI\Key::F2
UI\Key::F3
UI\Key::F4
UI\Key::F5
UI\Key::F6
UI\Key::F7
UI\Key::F8
UI\Key::F9
UI\Key::F10
UI\Key::F11
UI\Key::F12
UI\Key::N0
UI\Key::N1
UI\Key::N2
UI\Key::N3
UI\Key::N4
UI\Key::N5
UI\Key::N6
UI\Key::N7
UI\Key::N8
UI\Key::N9
UI\Key::NDot
UI\Key::NEnter
UI\Key::NAdd
UI\Key::NSubtract
UI\Key::NMultiply
UI\Key::NDivide

User Contributed Notes

There are no user contributed notes for this page.


InvalidArgumentException

(UI 1.0.3)

はじめに

クラス概要

class UI\Exception\InvalidArgumentException extends InvalidArgumentException implements Throwable {
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 継承したメソッド */
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

User Contributed Notes

There are no user contributed notes for this page.


RuntimeException

(UI 1.0.3)

はじめに

クラス概要

class UI\Exception\RuntimeException extends RuntimeException implements Throwable {
/* 継承したプロパティ */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 継承したメソッド */
final public Exception::getMessage(): string
final public Exception::getPrevious(): ?Throwable
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
final public Exception::getTraceAsString(): string
public Exception::__toString(): string
private Exception::__clone(): void
}

User Contributed Notes

There are no user contributed notes for this page.


FAQ: よくある質問

  • 一般的な情報
  • メーリングリスト
  • PHP を手に入れるには
  • データベースに関する問題
  • インストール
  • 構築時の問題
  • PHP の使いかた
  • パスワードのハッシュ — 安全なパスワードハッシュ
  • PHP と HTML
  • PHP と COM
  • その他の質問

User Contributed Notes

There are no user contributed notes for this page.


一般的な情報

このセクションでは PHP に関するもっとも基本的な情報 (PHP とは何か? PHP は何をするものか? 等)を扱います。

  1. PHPとは?
  2. PHP とは何の略ですか?
  3. 各バージョン間の関係は?
  4. 異なるバージョンの PHP を同時に実行することができますか?
  5. バグを見つけました! 誰に伝えればよいですか?
PHPとは?

マニュアルの序文より:

PHP は "PHP: Hypertext Preprocessor" を意味する、HTML 埋め込み型の スクリプト言語です。 PHP の多くの構文は C、Java、Perl 言語から転 用したものですが、PHP 特有の機能を実装するために独自の構文を導入 しています。PHP の目的は、Web 開発者が動的に生成されるページの 作成を速やかに行うことができるようにすることです。

PHP とは何の略ですか?

PHP は PHP: Hypertext Preprocessor の略です。 最初の文字が「頭字語の頭字語」になっているため多くの人は混乱します。 この種の頭字語は「再帰的頭字語」と呼ばれます。さらに詳細な情報に興味がある方は、» Free On-Line Dictionary of Computing あるいは » Wikipedia のエントリ で再帰的頭字語についてもっと詳しく知ることが出来ます。

各バージョン間の関係は?

PHP/FI 2.0 は PHP の初期の、 そしてもうすでにサポートされていないバージョンです。 PHP 3 は PHP/FI 2.0 の後継バージョンで、 PHP/FI 2.0 に比べて大きく進歩しています。 PHP 8 が PHP の最新バージョンです。これは Zend Engine 4 を使用しており、 さまざまな OOP 機能を提供します。

異なるバージョンの PHP を同時に実行することができますか?

はい。PHP のソースコードディストリビューションに含まれる INSTALL ファイルを見てください。

バグを見つけました! 誰に伝えればよいですか?

まず、PHP Bug Database でそれが既知のバグかどうかを調べてください。 もしデータベースで見つけることができなければ、「reporting form」 を使ってバグを報告してください。メーリングリスト等ではなく Bug Database に報告することは非常に重要です。 なぜなら個々のバグには「Tracking Number」がつけられるため、 後からバグの状態をチェックすることが可能だからです。 Bug Database は » https://github.com/php/php-src/issues にあります。

User Contributed Notes

There are no user contributed notes for this page.


メーリングリスト

このセクションではPHPのコミュニティへの参加に関する質問を扱います。 最良の方法はメーリングリストに参加することです。

  1. PHPのメーリングリストはありますか?
  2. 他にコミュニティはありますか?
  3. PHP のメーリングリストを自分で作ってもかまいませんか?
  4. Help! メーリングリストに参加/脱退できません!
  5. どこかにメーリングリストのアーカイブ(過去ログ)はありますか?
  6. メーリングリストではどんな質問をすることができるのですか?
  7. メーリングリストに投稿するときには、どんな情報を含めればよいのですか?
PHPのメーリングリストはありますか?

もちろんです! 様々なトピックに関するたくさんのメーリングリストがあります。 もっとも一般的なコミュニティのメーリングリストは » メーリングリスト のページにあります。

最も一般的なメーリングリストが php-general です。 参加するには、空メールを » php-general+subscribe@lists.php.net に送ってください。脱退するには、空メールを » php-general+unsubscribe@lists.php.net に送ってください。

また、» メーリングリスト のページから参加/脱退を行うこともできます。 脱退方法は、メーリングリストのすべてのメッセージのフッターにも記載されています。

他にコミュニティはありますか?

世界中に数え切れないほどあります。» サポートページ には例としていくつかのリソース (そしてそれらについてより詳しく知るための情報) へのリンクがあります。

PHP のメーリングリストを自分で作ってもかまいませんか?

もちろん! 許可します。というよりむしろどんどんやってください! あなたが持つ PHP の知識や経験をみんなで共有することで、 PHP コミュニティだけでなく PHP 言語自体の発展の助けとなります。

Help! メーリングリストに参加/脱退できません!

メーリングリストからの脱退がうまくいかない原因でもっとも多いのは、 メールの転送処理にからむものです。たとえば、あなたのメールアドレスが elephpant@example.com であったとしましょう。 しかし、メーリングリストへの参加は php-lists@example.com で行っており、このアドレスは自動的に elephpant@example.com に転送されるようになっているものとします。 このとき、elephpant@example.com で脱退処理を行ってもうまくいきません。 このアドレスはメーリングリストに登録されていないからです。 この場合は、メールが実際に送信されているアドレス、つまり php-lists@example.com で脱退処理をしなければなりません。

どこかにメーリングリストのアーカイブ(過去ログ)はありますか?

はい。» メーリングリスト のページにアーカイブサイトへのリンクがあります。 それ以外にも、メーリングリストのコンテンツをアーカイブしているサイトは数多くあります。 サーチエンジンで "php mailing list archives" を検索してみるといいでしょう。

メーリングリストの記事は news メッセージとしても記録されています。 news クライアントで » news://news.php.net/ へアクセスすることができます。さらに、 » http://news.php.net/ に実験的な news サーバーへの Web インターフェイスがあります。

メーリングリストではどんな質問をすることができるのですか?

PHP が日進月歩で有名になっている影響で、php-general メーリングリストの流量も増加しています (今のところ、1日あたり75?200通の流量があります)。 なので、参加者全員の利益のために、メーリングリストは 他のどこを当たっても駄目だった場合の最後の手段にしてください。

メーリングリストに投稿する前に、 この FAQ とマニュアルを見て手がかりを探してください。 もし駄目なら次にメーリングリストのアーカイブをチェックしてください (上記参照)。もし、PHP のインストール、 もしくは設定で問題が起こっている場合は (ソースアーカイブに含まれる)すべてのドキュメントと README ファイルに目を通してください。 それでも問題が解決できない場合に、 適切なメーリングリストを使用することは大歓迎です。

適切な回答を得るため (そして他の開発者たちをいらつかせないため) にも、 質問は適切なメーリングリストに行うようにしましょう。 たとえば、PHP のインストールがうまくいかない場合には php-install メーリングリストを使用します。 注意: 名前はよく似ているけど使われかたはまったく異なるメーリングリストもあります。 Windows 上での PHP スクリプトの実行に関する質問は Windows PHP users メーリングリストへ行います。 Windows Internals メーリングリストではありません。

メーリングリストに投稿するときには、どんな情報を含めればよいのですか?

「PHP が動作しません。助けて! 何がおかしいのですか?」 といった投稿は間違いなく誰にとっても無意味なものです。 もしPHPが動作しないのであれば、 あなたが使用しているオペレーティングシステム、PHPのバージョン、 またそれをどのように手に入れたか(コンパイル済みだった、 Git から手に入れた、RPM で提供されたものだった、等) 動作させようとしてあなたはどんなことをしたのか、 どこであなたは行き詰まって、どんなエラーメッセージが出るのか、 どんな結果になるのかといった情報を記述する必要があります。

これは他のどんな問題にも当てはまることです。あなたは、何をしたのか、 何をしようとしているのか、そして何かエラーが出たのかを記述してください。 もしあなたが書いた PHP のプログラムで問題が起こった場合は、 動作しない個所のソースコードを含め、 どの行で問題が起こったのかをコメントしておく必要があります。 でも、必要以上のソースコードは含めないでください! さもないと、 あなたの投稿は非常に読みにくいものとなり、 多くのひとはこうした投稿を読み飛ばしてしまいます。 もし、どれくらいの情報を含めればいいのか分からない場合には、 あなたが十分だと思うだけの情報を記述するようにしましょう。 そして、より詳しい情報を求められたときのために準備をしておきます。

もう一つ重要な点があります。 それは Subject であなたの問題を端的に表すことです。 「助けてーー!」とか「何かおかしいのでしょうか?」といった Subject のついたメールはほとんど人に無視されてしまいます。

そして最後に、 » How To Ask Questions The Smart Way にあるペーパーを読むことをお薦めします。 このペーパーはあらゆる人、 特にあなた自身にとって多いに参考になるはずです。

User Contributed Notes

There are no user contributed notes for this page.


PHP を手に入れるには

このセクションでは、PHP をダウンロードする詳しい場所や OS に関する話題を扱います。

  1. PHPはどこで手に入れることができますか？
  2. コンパイル済みのバージョンはありますか？
  3. 一部のPHP拡張モジュールのコンパイルに必要なライブラリはどこで手に入りま すか？
  4. 上記のライブラリはどのように使うのですか？
  5. Gitリポジトリから最新のPHPソースコードを手に入れました。Windows上でコン パイルするにはどうしたらよいですか？
  6. ブラウザキャパビリティファイルはどこで手に入りますか？
  7. PHP をダウンロードするときの「スレッドセーフ」の意味は?
PHPはどこで手に入れることができますか？

PHPネットワークのどのメンバーのサイトからでもダウンロードすることができ ます。これらは» https://www.php.net/ から見つけることができます。また匿名 Gitを使って最新のソースコードを手に入れることもできます。詳しい情報は、 » https://www.php.net/git.php を参照ください。

コンパイル済みのバージョンはありますか？

私たちはWindows版のみコンパイル済みのバイナリを配布しています。というの もPHPをすべてのLinux/Unixのプラットホーム用にすべての拡張モジュールの組 み合わせでコンパイルするのは不可能だからです。ただ、最近の多くのLinuxディ ストリビューションには予めPHPがインストールされています。Windows用のバイ ナリは» ダウンロードページ からダウンロードすることができます。Linux用のバイナリについてはあなたが 使用しているディストリビューションのウェブサイトを訪れてください。

一部のPHP拡張モジュールのコンパイルに必要なライブラリはどこで手に入りま すか？

注意: *印がついているものはスレッドセーフではないと見なされています。 マルチスレッド環境では使わないことをおすすめします。

  • » LDAP (Unix).
  • » LDAP (Unix/Win) : Mozilla Directory (LDAP) SDK
  • » free LDAP server.
  • » Berkeley DB2 (Unix/Win) : http://www.sleepycat.com/.
  • » SNMP* (Unix): .
  • » GD (Unix/Win).
  • » mSQL* (Unix).
  • » PostgreSQL (Unix).
  • » IMAP* (Win/Unix).
  • » Sybase-CT* (Linux, libc5) : Available locally.
  • » FreeType (libttf):.
  • » ZLib (Unix/Win32).
  • » expat XML parser (Unix/Win32).
  • » PDFLib.
  • » mcrypt.
  • » mhash.
  • » t1lib.
  • » dmalloc.
  • » aspell.
  • » readline.

上記のライブラリはどのように使うのですか？

個々のライブラリで提供される情報に従ってください。いくつかのライブラリ (GD等)は、PHPのconfigureスクリプト実行時に自動的に検出されます。その他の ライブラリに関してはconfigureスクリプトのオプションに '--with-EXTENSION'オプションを追加すること使用できます。 'configure --help'を実行するとこれらのオプション一覧が 表示されます。

Gitリポジトリから最新のPHPソースコードを手に入れました。Windows上でコン パイルするにはどうしたらよいですか？

最新情報は、PHP Wiki の » Step by Step Build Instructions を参照ください。

ブラウザキャパビリティファイルはどこで手に入りますか？

browscap.iniファイルは » http://browscap.org/で 手に入れることができます。

PHP をダウンロードするときの「スレッドセーフ」の意味は?

スレッドセーフである、というのは、Windows 上の Apache 2 のような マルチスレッドのウェブサーバーでも動作するバイナリだという意味です。 スレッドごとにローカルストレージのコピーを作成し、 別のスレッドとデータの衝突を起こさないようにしています。

それで、結局どっちを選べばいいのかですって? もし PHP を CGI として動かすつもりなら、スレッドセーフでなくてもかまいません。 リクエストのたびにバイナリが起動するからです。IIS5 や IIS6 といったマルチスレッドのウェブサーバーで動かす場合は、 スレッドセーフ版の PHP を選ばなければなりません。

User Contributed Notes

There are no user contributed notes for this page.


データベースに関する問題

このセクションでは PHP とデータベースとの関係に関する一般的な質問を 扱います。なんと! PHP は事実上あらゆるデータベースにアクセスすることが できます。

  1. PHP は Microsoft SQL Server にアクセスできると聞きました。どうすれば よいのでしょうか？
  2. Microsoft Access データベースにアクセスできますか？
PHP は Microsoft SQL Server にアクセスできると聞きました。どうすれば よいのでしょうか？

Unix マシン上では、PDO_ODBC や Unified ODBC API が使えます。

Windows マシン上では、PDO_SQLSRV や SQLSRV も使えます。

次の質問に対する回答も参照ください。

Microsoft Access データベースにアクセスできますか？

Unix で PHP を動作させて Windows マシンで動作する MS Access に接続したい場合には Unix ODBC ドライバが必要です。» OpenLink Software が Unix ベースの ODBC ドライバを提供しています。

他には、Microsoft SQL Server に ODBC ドライバを使用してデータを 保存するという手段もあります。これによって、Microsoft Access (ODBC を使用します) と PHP (組み込まれているドライバを使用します) でデータに アクセスすることができます。また、Microsoft Access と PHP 両者共に 解釈可能な中間ファイル(例えば単層からなるファイルや、dBase データベース等)を使用する手もあります。これに関しては OpenLink Software の Tim Hayes が以下のように述べています。

PHP からじかに ODBC ドライバが使用できる場合(つまり OpenLink の ドライバを使用している場合)には、他のデータベースを中継手段として 用いることはよいアイデアとは言えない。どうしても中間ファイルが 必要な場合のために、OpenLink は NT、Linux、そして他の Unix 用の Virtuoso(仮想データベースエンジン)をリリースした。私たちの » ウェブサイトを 訪れてもらえれば、無料でダウンロードできる。

うまくいくことが分かってるもう一つの方法は、MySQL と Windows 用の MyODBC ドライバを利用してデータベースを同期する方法です。Steve Lawrence が言うには、

  • MySQL を説明に従って任意のプラットフォームにインストールします。 最新バージョンは » http://www.mysql.com/ にあります。データベースを作成するとき、そしてユーザーアカウントを を設定するときに、ホストフィールドに % か MySQL を使って アクセスする Windows マシンのホスト名を入力する、ということ以外には 特別な設定は必要ありません。 使用するサーバー名、ユーザー名、パスワードを書きとめておいてください。
  • MySQL サイトから Windows 用 MyODBC ドライバをダウンロードします。 それを Windows マシンにインストールします。 アーカイブに含まれるユーティリティプログラムで、 テストを行うことができます。
  • コントロールパネルの ODBC administrator を使用して、ユーザー もしくはシステム DSN を作成します。DSN 名を決定して、Step1 で MySQL に設定したホスト名、ユーザー名、パスワード、ポート等を入力します。
  • Access をフルインストールでインストールします。これは適切な アドインをインストールするためです。少なくとも ODBC サポートと リンクテーブルマネージャが必要です。
  • ここからがお楽しみです。新規データベースを作成しましょう。 テーブルウィンドウで右クリックしてリンクテーブルを選択します。 もしくはファイルメニューから外部データの取り込みを選び リンクテーブルを選択します。ファイルブラウザが表示されたら ファイルタイプから ODBC を選択します。次にシステム DSN で 選択肢 STEP3 で作成した DSN 名を選択します。リンクするテーブルを 選んで OK ボタンを押しましょう。MySQL サーバーでテーブルを オープンできるようになっていて、データの追加/削除/編集ができるように なっています。さらに、クエリの構築、テーブルのインポート/エクスポート、 フォームやレポートの構築等が可能です。

Tips and Tricks(役に立つヒント):

  • Access でテーブルを作成してそれを MySQL へエクスポートします。 それを再度アクセスからリンクすれば素早くテーブルを作成すること ができます。
  • Access でテーブルを作成するときは、そのテーブルに書き込み権限を もたせるためにプライマリキーを設定しておく必要があります。 Access とテーブルをリンクする前に MySQL にプライマリキーを設定 しておくことも忘れないでください。
  • MySQL 側でテーブル(の構成)を変更した場合、再度 Access とリンクする 必要があります。ツール>アドイン>リンクテーブルマネージャから 適切な ODBC DSN を選んで再リンクが必要なテーブルを選択します。 また、ここで OK ボタンを押す前に「リンク先を更新するための プロンプトを毎回表示する」をチェックしておけば DSN ソースを 移動させることができます。

User Contributed Notes

knb at gfz-potsdam dot de 11-Oct-2004 02:53
This is a crucial piece of information for SYBASE users:

If you are using the free, but old, 11.x client libs from sybase,
 then compile with option  "--with-sybase-ct=$SYBASE"
substitute $SYBASE with the appropriate directory name.

option --with-sybase (without ct) can somehow be used to talk to old MS-SQL servers, but only with the 11.x client libs.

If you are using free, or have legally obtained, 12.x client libs from sybase, then compile with option  "--with-sybase-ct=$SYBASE/$SYBASE_OCS"
substitute $SYBASE/$SYBASE_OCS with the appropriate directory name.


インストール

このセクションでは PHP のインストール方法に関する一般的な質問を扱います。 PHP は、ほとんど全ての OS とウェブサーバーで 利用可能です。

PHP をインストールするには、インストールと設定 の指示に従ってください。

  1. なぜ、Apache 2 のマルチスレッド MPM モードを実運用環境で使用するべきではないのですか?
  2. Unix/Windows: php.ini ファイルはどこに置けばよいのですか?
  3. Unix: PHP をインストールしましたが、ファイルをロードするたびに 'Document Contains No Data(ページが表示できません)' という メッセージが表示されます。何が起こっているのですか?
  4. Unix: RPM を使って PHP をインストールしたのですが、Apache が PHP のページを 処理してくれません。何が起こっているのですか?
  5. Unix: Apache に FrontPage 拡張モジュールのパッチを当てたら、突然 PHP が動作しなくなってしまいました。PHP は Apache の FrontPage 拡張モジュールと共存することはできないのですか?
  6. Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスしても何も表示されません。
  7. Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスすると Internal Server Error 500 となってしまいます。
  8. PHP をインストールするまではエラーもなく問題なく進んだのですが、 Apache を起動させようとすると undefined symbol エラーが発生します。 [mybox:user /src/php5] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
  9. Windows: PHP をインストールしたのですがブラウザから PHP スクリプト にアクセスすると次のようなエラーが出力されます。 cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
  10. Windows: 全ての説明に従っているのに PHP が IIS で動作しません!
  11. IIS, PWS, OmniHTTPD, Xitami上でCGIとしてPHPを実行するとき、 次のようなエラーが出る:Security Alert! PHP CGI cannot be accessed directly.
  12. php.ini が認識され読み込まれていることをどうやって知ることが できますか? 自分の行った変更が反映されてないらしいのですが。
  13. Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?
  14. Windows 上の PHP で、php.ini を使えるようにするにはどうしたらいいのですか?
  15. Apache のコンテントネゴシエーション（MultiViews オプション）を PHP で使用することはできますか?
  16. PHP が処理できるリクエストメソッドは GET および POST だけなのですか?
なぜ、Apache 2 のマルチスレッド MPM モードを実運用環境で使用するべきではないのですか?

PHP はグルー(糊)です。このグルーは、多くのサードパーティ製のライブラリを くっつけることによりクールな Web アプリケーションを構築するために使用され、 直観的で簡単に習得できる言語インターフェイスにより、一つの整合性のある実体として 見せることができます。 PHP の柔軟性と力は、プラットフォームの安定性と堅牢性に基づいています。 グルーによる結合をするためには、OS や Web サーバー、サードパーティ製のライブラリが必要です。 これらの一つの機能が停止した場合、PHP は問題を特定し、速やかに修正する 手段が必要です。 実行スレッドを完全に分離しなかったり、 メモリセグメントを完全に分離しなかったり、 各リクエストで使用される強力なサンドボックスを有さないことで、 基本的なフレームワークをより複雑なものにした場合、 PHP のシステムに弱点が生まれます。

マルチスレッド MPM を使いたい場合は、 PHP が自分のメモリ空間で実行される FastCGI の設定をみてください。

Unix/Windows: php.ini ファイルはどこに置けばよいのですか?

UNIX の場合、デフォルトでは /usr/local/lib です。コンパイル時に --with-config-file-path オプションを使用してこの場所を変えたいという人も多いでしょう。 例えばこのようにすることも出来ます：

--with-config-file-path=/etc
そしてディストリビューションの php.ini-development を /etc/php.ini にコピーし、環境に合うように 編集してください。

--with-config-file-scan-dir=PATH

Windows の場合、php.ini のデフォルトパスは Windows ディレクトリになります。 Apache ウェブサーバーを使っている場合はまず Apache がインストールされているディレクトリ (例えば c:\program files\apache group\apache にある php.ini を探そうとします。このため、異なる php.ini ファイルを異なるバージョンの Apache ごとに置いておくことができます。

設定ファイルの章も参照ください。

Unix: PHP をインストールしましたが、ファイルをロードするたびに 'Document Contains No Data(ページが表示できません)' という メッセージが表示されます。何が起こっているのですか?

これはおそらく PHP に何らかの問題が起こっていてコアダンプしている という状態です。サーバーのエラーログを見てこのケースかどうかチェック してください。そして小さなテストケースで問題を再現させてみてください。 もし 'gdb' の使い方が分かるならバグレポートに加えてバックトレースを 提供してもらえると開発者が問題の箇所を突き止めるのに 非常に役立ちます。もしあなたがPHPをApacheモジュールとして使用している 場合は以下のようにします：

  • httpd を停止します

  • gdb httpd

  • Stop your httpd processes

  • > run -X -f /path/to/httpd.conf

  • ブラウザから問題のある URL にアクセスします

  • > run -X -f /path/to/httpd.conf

  • もしコアダンプが発生すると gdb が知らせてくれます

  • bt とタイプします

  • このバックトレースをバグレポートに含めてください。バグレポートは » https://github.com/php/php-src/issues から送信してください。

もしそのスクリプトが正規表現関数 (preg_match() やその類似関数) を使用している場合、 PHP と Apache が同じ正規表現のパッケージを使用してコンパイルされているかどうかを確認してください。 PHP と Apache 1.3.x を使用している場合は常に確認が必要です。

Unix: RPM を使って PHP をインストールしたのですが、Apache が PHP のページを 処理してくれません。何が起こっているのですか?

あなたが Apache と PHP の両方を RPM でインストールしたとすると、以下に示す 内容の一部もしくは全てを httpd.conf ファイルに追加するか、コメントを 外す必要があります：

# Extra Modules
AddModule mod_php.c
AddModule mod_perl.c

# Extra Modules
LoadModule php_module         modules/mod_php.so
LoadModule php5_module        modules/libphp5.so
LoadModule perl_module        modules/libperl.so
そして以下の行：
AddType application/x-httpd-php .php
以上の内容を全体設定、もしくは PHP サポートを追加したいバーチャル ドメインの設定に加えてください。

Unix: Apache に FrontPage 拡張モジュールのパッチを当てたら、突然 PHP が動作しなくなってしまいました。PHP は Apache の FrontPage 拡張モジュールと共存することはできないのですか?

いいえ。PHP は FrontPage 拡張モジュールと問題なく共存できます。 問題は FrontPage 拡張モジュールのパッチが PHP が依存している Apache の 構造の一部を変更してしまうことにあります。パッチを当てた後で PHP を再コンパイル('make clean; make' としてください)すれば問題は 解決されます。

Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスしても何も表示されません。

ブラウザの「ソースの表示」を実行してください。おそらく PHP の ソースコードが表示されると思います。これはウェブサーバーがスクリプトを PHP に渡していないためスクリプトが実行されていない、ということを 意味します。サーバー側の設定のどこかが間違っているはずですので、 PHP インストールマニュアルに従って再度入念に設定を確認してみてください。

Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスすると Internal Server Error 500 となってしまいます。

ウェブサーバーが PHP を実行するときに何らかの問題が起きています。 どんなエラーが起こっているか確認するために、コマンドラインで PHP 実行ファイル(Windows では php.exe) のある ディレクトリに移動して php -i を実行してください。 もし PHP の実行時に問題があった場合は適切なエラーメッセージが表示されるので、 それを手がかりに次に何をすべきかを知ることができます。画面 一杯に HTML(phpinfo() 関数の出力)が表示された場合には PHP は問題なく動作していますので、問題はウェブサーバーの設定 にあるはずです。再度入念にチェックしてみてください。

PHP をインストールするまではエラーもなく問題なく進んだのですが、 Apache を起動させようとすると undefined symbol エラーが発生します。
[mybox:user /src/php5] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress

これは、PHP とは関係なく MySQL クライアントライブラリの問題です。 このライブラリのうちある種のものは --with-zlib を指定する必要がありますが、 他のものは必要ありません。この問題は MySQL FAQ でも扱われています。

Windows: PHP をインストールしたのですがブラウザから PHP スクリプト にアクセスすると次のようなエラーが出力されます。
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:

このエラーメッセージは PHP が(何らかの理由で)何も出力できなかった ことを意味します。詳細なエラーメッセージを得るためには、 コマンドラインから PHP 実行ファイル(Windows では php.exe)のあるディレクトリに移動して php -i を実行してください。もし PHP の実行時に問題 があった場合は適切なエラーメッセージが表示されるのでそれを 手がかりに次に何をすべきかを知ることができます。画面一杯に HTML (phpinfo()関数の出力) が表示された場合には PHP は問題なく動作しています。

PHP がコマンドラインで動作したなら、再度ブラウザから PHP スクリプトに アクセスしてみてください。もしまだ失敗するようなら以下のいずれかの 理由によるものと思われます。

  • PHP スクリプト、 php.exe、php5ts.dll、 php.ini もしくはロードしようとしている PHP 拡張モジュールの ファイルパーミッションが匿名インターネットユーザー IUSER_<machinename> にアクセスできない ものになっている。
  • スクリプトが存在しない(もしくはあなたが在ると思っている場所と ウェブサーバーのルートディレクトリからの相対位置がずれている)。 IIS を使用している場合は、Internet Service Manager でスクリプト マッピングを設定するときに「ファイルの存在を確認する」にチェックを することでこのエラーをトラップすることができます。もしスクリプト ファイルが存在しない場合はサーバーが代わりに 404 エラーを返すように なります。これにはもう一つ利点があります。それは IIS が スクリプトファイルの NTLanMan パーミッションに応じて認証を要求する ようになる、ということです。
Windows: 全ての説明に従っているのに PHP が IIS で動作しません!

PHP スクリプトを実行しようとするあらゆるユーザーが php.exe の実行権限を必要としているということを 忘れないでください。IIS はインストール時に追加された匿名ユーザーを使用 します。このユーザーに対して php.exe の実行権限が 必要です。また、認証された全てのユーザーに関しても php.exe の実行権限が必要です。IIS4 の場合はさらに PHP がスクリプトエンジンであるということを教えてやる必要があります。 この FAQ も読んでください。

IIS, PWS, OmniHTTPD, Xitami上でCGIとしてPHPを実行するとき、 次のようなエラーが出る:Security Alert! PHP CGI cannot be accessed directly.

cgi.force_redirect に 0 をセットしてください。デフォルトでは 1 にセットされていますので、そのディレクティブが ; でコメントアウトされていないことを確認してください。 他のディレクティブと同様にこれは php.ini 上でセットされます。

デフォルトは 1 なので、100% 正しく php.ini ファイルが 読み込まれているかどうかが重要です。 詳細はこの FAQ を 読んでください。

php.ini が認識され読み込まれていることをどうやって知ることが できますか? 自分の行った変更が反映されてないらしいのですが。

php.ini とそれが PHP に読み込まれているかを確認するには phpinfo() をコールして最初のほうに 表示されている Configuration File (php.ini) を見てください。これは PHP が認識している php.ini と、それが 読み込まれているか否かを示しています。ディレクトリパスだけが 表示されている場合は、読み込まれていないということなので、 そのディレクトリに php.ini を置いてください。 php.ini が PATH にある場合それが読み込まれます。

php.ini が読み込まれていてかつ PHP をモジュールとして実行 している場合、php.ini を変更した後で必ず Web サーバーを 再起動してください。

php_ini_loaded_file() も参照ください。

Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?

Windows では、以下のようにします。

  • コントロールパネルのシステムアイコンを選択します（スタート → コントロールパネル）。

  • 詳細設定タブに移動します。

  • 「環境変数」ボタンを押します。

  • 「システム環境変数」欄を見ます。

  • Path というエントリを見つけます（スクロールする必要があるかもしれません）。

  • Path のエントリをダブルクリックします。

  • その最後に ';' と追加し、その後に PHP のディレクトリを追加します （例: ;C:\php）。

  • OK を押します。

注意: 上の作業を行った後は、必ずコンピュータを再起動し、 PATH の変更が適用されていることを確認しましょう。

Windows 上の PHP で、php.ini を使えるようにするにはどうしたらいいのですか?

いくつかの方法があります。Apache を使用しているのなら、 Apache のドキュメントを参照ください。 それ以外の場合は、環境変数 PHPRC を指定する 必要があります。

Apache のコンテントネゴシエーション（MultiViews オプション）を PHP で使用することはできますか?

もしリンクする PHP ファイルが拡張子を持っているなら、すべては うまく動作します。この FAQ が対象としているのは、リンクする PHP ファイルが拡張子を持っておらず、拡張子のない URL から PHP ファイルを判別するためにコンテントネゴシエーションを使用する方法です。 この場合、AddType application/x-httpd-php .php という行を以下のように変更します。

AddHandler php5-script php
AddType text/html php
この方法は、Apache 1 ではうまく動作しません。なぜなら PHP モジュールが php-script をキャッチできないからです。

PHP が処理できるリクエストメソッドは GET および POST だけなのですか?

いいえ、それ以外のいかなるメソッド（例: CONNECT）でも扱えます。 適切な応答ステータスは、header() を使用して送信可能です。 GET および POST だけを処理したいなら、Apache の設定を以下のようにします。

<LimitExcept GET POST>
Deny from all
</LimitExcept>

User Contributed Notes

charleslynch at xybersoftware dot com 17-Apr-2008 07:30
One final note to the message below if you are getting the message about not having rights to execute...You need to use IIS right click on the website and choose 'Properties/Home Directory' then on the 'Execute Permissions' combo box you need to choose 'Scripts only'...Click ok...another dialog may appear asking which directories to apply the action too...choose any directories that you intend on using php in and click ok...It should work now...
joerg at fenin dot de 02-Nov-2007 02:35
To limit HTTP Request Methods on the Apache server running PHP you should use mod_rewrite or mod_security instead of LimitExcept, to give you more control over the handling of such http errors.  Can go in .htaccess file or httpd.conf

# mod_rewrite
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
  RewriteRule .* - [F,L]
</IfModule>

# mod_security
<IfModule mod_security.c>
  SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$" "deny,log,status:403"
</IfModule>

You can use the php request method scanner at askapache to see exactly how your server deals with various request methods, and check that your server is configured properly..

http://www.askapache.com/online-tools/request-method-scanner/
Curtis 18-May-2007 07:39
I have some additional troubleshooting tips for 53.7, which deals with getting a blank screen on your browser when running a PHP script.

In addition to server misconfiguration, it may also be that PHP isn't configured to output errors to the browser, which is the case if you or your host uses a more secure php.ini. If this is the case, you need to find out where errors are being logged to find out if any errors are preventing normal output from being delivered to the client.

If you have access to php.ini, check the 'display_errors' directive, which is, by default, located under the 'error_reporting' directive. It's helpful to have 'display_errors' on during debugging phases, but best to have it off in production environments.

Related functions: http://php.net/ini_set | http://php.net/error_reporting | http://php.net/error_log
emzeperx at emzeper dot hu 01-Jan-2006 12:36
You do not have to restart the whole system make effect of changing the PATH env var. For me (sbs2003) worked automatically.
on older systems you can use

set $Path=%path%;c:\php

command to extend immediately the path var.
per dot fikse at ipj dot no 12-Jul-2005 01:22
Installing PHP 4 or 5 on Windows Server 2003 x64 results in http error 505. This is not a PHP bug. It is due to running a 32-bit ISAPI DLL under the 64-bit version of IIS 6, as documented here: http://support.microsoft.com/?id=895976

Solution: Flip the Metabase flag for Enable32bitAppOnWin64 as described in http://support.microsoft.com/?id=894435 ,
like this: CSCRIPT ADSUTIL.VBS SET W3SVC/AppPools/Enable32bitAppOnWin64 1

(Alternatively with full path: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1)


構築時の問題

本節は、構築時に発生する多くの一般的なエラーを集めたものです。

  1. anonymous Git サービスで最新版の PHP を入手しましたが、 configure スクリプトがありません!
  2. PHPをApacheと組みあわせて動作するようにconfigureを行う際に問題が あります。httpd.hが見付からないといわれますが、 指定した場所にこのファイルはあるのです!
  3. PHPをconfigureしているときに (./configure) 以下のようなエラーに遭遇しました。 checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
  4. Apacheを起動するときに以下のようなメッセージが出る: fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found
  5. configureを実行した際、GD、gdbmまたは他のパッケージのファイルま たはライブラリを見つけることができないと言われます。
  6. ファイルlanguage-parser.tab.cをコンパイルする際、 'yytname undeclared'というエラーが発生します。
  7. makeを実行する際、実行には成功しているようですがコンパイルする 最終的なアプリケーションをリンクしようとした際に何かファイルが見 つからないというエラーが発生します。
  8. PHP をリンクする際、未定義の参照があるというエラーが複数発生します。
  9. インストール手順に完全に従ってUnix上でApacheモジュール版をインス トールしましたが、ブラウザでアクセスするとPHPスクリプトが表示さ れ、ファイルを保存しますかと尋ねられます。
  10. --activate-module=src/modules/php4/libphp4.a と書いてありますが、ファイルがありません。このため、 --activate-module=src/modules/php4/libmodphp4.aに 変更しましたが、やはりだめです。何が起きているのでしょう?
  11. --activate-module=src/modules/php4/libphp4.a を指定し、PHPを静的モジュールとして組み込んでApacheを構築しよう とした際に、システムがANSI対応ではないというエラーを発生します。
  12. --with-apxs を指定して PHP を構築しようとした際、奇妙なエラーメッセージが出力されます。
  13. makeの間、microtimeおよび RUSAGE_関連で多くのエラーを発生します。
  14. MySQLを使用できるようにPHPをコンパイルする際、configureは正常に 実行されるがmakeの最中に以下のようなエラーが出る: ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp' 何がおかしいのか？
  15. PHPをアップグレードしたいのですが、現在インストールされているPHPを 構築するときに指定した./configureコマンドの オプションはどこで知ることが出来ますか？
  16. GDライブラリをリンクしてPHPを構築すると、コンパイルエラーが発生したり 実行時にセグメンテーション違反になってしまいます。
  17. PHP をコンパイルする際に、よくわからないエラーが発生してハングアップ します。Solaris を使用している場合に起こるようです。
anonymous Git サービスで最新版の PHP を入手しましたが、 configure スクリプトがありません!

configure.inからconfigureスクリプトを生成するためには、GNU autoconfパッケージが必要です。Gitサーバーからソースを入手した後、 最上位のディレクトリで./buildconfを実行して下 さい。(また、configure に --enable-maintainer-modeオプションを付けて実 行した場合以外は、configureスクリプトはconfigure.in ファイルが更新された際に自動的に再構築を行いません。このため、 configure.inが 変更された場合には忘れずに手動で再構築を行う必要があります。 再構築の際に行われることの１つは、configureまたは config.statusを 実行した後、Makefileの中の@VARIABLE@のような物を見つけることです。)

PHPをApacheと組みあわせて動作するようにconfigureを行う際に問題が あります。httpd.hが見付からないといわれますが、 指定した場所にこのファイルはあるのです!

configure/setupスクリプトにApacheソースツリーの最上位の場所を指 定する必要があります。これは、--with-apache=/path/to/apache を指定するのであった、--with-apache=/path/to/apache/src ではないということです。

PHPをconfigureしているときに (./configure) 以下のようなエラーに遭遇しました。

checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up

インストールの説明をよく読み、 PHPのコンパイルにはflexとbisonの両方が必要であることに留意してください。 ソースかあるいはRPMのようなパッケージからbisonとflexを インストールしてください。

Apacheを起動するときに以下のようなメッセージが出る:

fatal: relocation error: file /path/to/libphp4.so:
symbol ap_block_alarms: referenced symbol not found

ApacheのcoreプログラムがsharedなDSOライブラリとして コンパイルされている場合にこのエラーが出ます。 最低でも以下のフラグを使用してApacheを再configureして ください:

--enable-shared=max --enable-rule=SHARED_CORE

詳細はApacheのソースディレクトリのトップレベルにある INSTALLファイル またはApacheの » DSO manual pageをご覧ください。

configureを実行した際、GD、gdbmまたは他のパッケージのファイルま たはライブラリを見つけることができないと言われます。

Cプリプロセッサおよびリンカに次のように追加でフラグを指定するこ とにより、configureスクリプトがヘッダファイルまたはライブラリを 標準以外の場所で探すことが可能となります。

    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
ログインシェルとしてcsh系のシェルを使用している場合、次のように なります。
    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure

ファイルlanguage-parser.tab.cをコンパイルする際、 'yytname undeclared'というエラーが発生します。

bisonのバージョンを更新する必要があります。最新版は、 » http://www.gnu.org/software/bison/bison.htmlにあります。

makeを実行する際、実行には成功しているようですがコンパイルする 最終的なアプリケーションをリンクしようとした際に何かファイルが見 つからないというエラーが発生します。

古いバージョンのmakeには、functionsディレクトリにあるファイルの コンパイルされたものを同じディレクトリに正しく入れないものがあり ます。cp *.o functionsを試しに実行してから make を再度実行し、解決されるか確認して下さ い。解決される場合には、GNU makeの最近のバージョンに更新するべき です。

PHP をリンクする際、未定義の参照があるというエラーが複数発生します。

最後に適切なライブラリが全てインクルードされているかどうか 確認してください。よくあるのは、'-ldl' や 指定したデータベースのサポート機能に必要なライブラリの指定が欠けているというものです。

何名かの人から、Apache とリンクする際に 'libphp4.a' の直後に '-ldl' を追加する必要があることも報告されています。

インストール手順に完全に従ってUnix上でApacheモジュール版をインス トールしましたが、ブラウザでアクセスするとPHPスクリプトが表示さ れ、ファイルを保存しますかと尋ねられます。

これは、何らかの理由によりPHPモジュールが起動していないことを意 味しています。助けを求める質問を行う前にまず以下を確認ください。

  • 実行しているhttpdバイナリが構築したばかりの新しいhttpdバイナ リであることを確認してください。確認を行うには以下のように入力 します。 /path/to/binary/httpd -l mod_php4.c がリストの中にない場合、正し いバイナリが実行されていません。正しいバイナリを見つけて、イ ンストールしてください。
  • Apache .conf ファイルの１つに正しいMIME型 が追加されていることを確認してください。これは以下のようになります。 AddType application/x-httpd-php .php また、このAddTypeの行が、 <Virtualhost> または <Directory> ブロックの中に隠 されて、テスト用のスクリプトの場所に適用できていないようなこ とがないことを確認してください。
  • 最後に、デフォルトのApache設定ファイルの場所はApache 1.2と Apache 1.3の間で変更されています。AddTypeの行を追加した設定ファ イルが実際に読み込まれていることを確認してください。このファイ ルが正しく読み込まれている場合には、明らかな構文エラーを httpd.confファイルの中に書き込んでしまったり、何らかの明らか な変更があった可能性があります。

--activate-module=src/modules/php4/libphp4.a と書いてありますが、ファイルがありません。このため、 --activate-module=src/modules/php4/libmodphp4.aに 変更しましたが、やはりだめです。何が起きているのでしょう?

libphp4.aファイルはこの時点では存在しない、ということに気をつけてください。 このファイルは、Apacheの構築時に自動的に作成されます。

--activate-module=src/modules/php4/libphp4.a を指定し、PHPを静的モジュールとして組み込んでApacheを構築しよう とした際に、システムがANSI対応ではないというエラーを発生します。

Apacheのこのエラーメッセージは紛らわしく、より新しいバージョンで は修整されています。

--with-apxs を指定して PHP を構築しようとした際、奇妙なエラーメッセージが出力されます。

ここでは、確認すべきことが3点あります。まず、何らかの理由により、 Apacheがapxs Perlスクリプトを構築する際に適当なコンパイラやフラ グ変数を付けないで構築されてしまうことが時々あります。 使用するapxsの場所を見つけたら(which apxsコマンドを 試してみてください。/usr/local/apache/bin/apxs または/usr/sbin/apxs等にあります)、 以下の行を確認してください。

my $CFG_CFLAGS_SHLIB  = ' ';          # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = ' ';          # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' ';          # substituted via Makefile.tmpl
上記のようになっている場合は問題です。これらの行は空白になっているか 'q()'のような正しくない値になっていると思います。これを以下のように 変更してください。
my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = 'gcc';                   # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-shared);              # substituted via Makefile.tmpl
可能性のある第2の問題は、RedHat-6.1と6.2でのみ存在する問題です。 RedHatが出荷した apxs スクリプトは壊れています。以下の行を見てください。
my $CFG_LIBEXECDIR    = 'modules';         # substituted via APACI install
上の行がある場合、これを次のように変更してください。
my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # substituted via APACI install
最後に、Apacheのconfigure/再インストールを行います。その際、 ./configure とmakeの間に make cleanを行ってください。

makeの間、microtimeおよび RUSAGE_関連で多くのエラーを発生します。

インストール時にmakeを行っている際、以下のようなエラーを発生す るとした場合、

microtime.c: In function `php_if_getrusage':
microtime.c:94: storage size of `usg' isn't known
microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function)
microtime.c:97: (Each undeclared identifier is reported only once
microtime.c:97: for each function it appears in.)
microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)
make[3]: *** [microtime.lo] Error 1
make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/master/php-4.0.1/ext'
make: *** [all-recursive] Error 1

あなたのシステムは壊れています。使用しているglibcと同じバージョンの glibc-develパッケージをインストールして、/usr/include ファイルを修正 する必要があります。この問題は、PHPの動作とは全く関係ありません。 これを示すには、次のような簡単なテストを行ってみてください。

$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null
これが、エラーが発生する場合、インクルードファイルが見つからない ことがわかります。

MySQLを使用できるようにPHPをコンパイルする際、configureは正常に 実行されるがmakeの最中に以下のようなエラーが出る: ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp' 何がおかしいのか？

まず、これはWarningであって致命的な エラーではないと認識することが重要です。makeの 最後のほうでこの出力がしばしば見られるため致命的なエラーと 思われがちですがそうではありません。もちろん、Warningが 起きるとコンパイラが停止するような設定をしている場合は別です。 また、MySQLサポートはデフォルトで構築されることにも 留意してください。

注意:

PHP4.3.2以降、ビルド(make)完了後に以下のようなテキストが出る ことがあります:

Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).

PHPをアップグレードしたいのですが、現在インストールされているPHPを 構築するときに指定した./configureコマンドの オプションはどこで知ることが出来ますか？

現在インストールされているPHPを構築した時のディレクトリにある config.nice ファイルを見るか、もしもうそのディレクトリが無い場合は

<?php phpinfo(); ?>
というスクリプトを実行すれば、最初の方にある./configure という箇所に表示されます。

GDライブラリをリンクしてPHPを構築すると、コンパイルエラーが発生したり 実行時にセグメンテーション違反になってしまいます。

リンクしたGDライブラリとPHPが同じライブラリ(例えばlibpng)に依存しているか どうかを確認してください。

PHP をコンパイルする際に、よくわからないエラーが発生してハングアップ します。Solaris を使用している場合に起こるようです。

PHP のコンパイル時に 非 GNU ツールを使用すると問題を引き起こします。 PHP を正しくコンパイルするには、GNU ツールを使用することを忘れないで ください。たとえば、Solaris で使用される SunOS BSD 互換の sed や Solaris 版の sed は正しく動作しません。しかし、 GNU 版もしくは Sun POSIX (xpg4) 版の sed ならうまく 動きます。以下を参照ください。 » GNU sed、 » GNU flex および » GNU bison 。

User Contributed Notes

There are no user contributed notes for this page.


PHP の使いかた

このセクションにはPHPスクリプトを書くにあたってよく問題となる事柄が 集められています。

  1. PHP の関数のパラメータの順番を覚えられません。だって関数によってばらばらなんだもん。
  2. あらゆるフォームから送信されたデータを扱うことができる汎用的な PHPスクリプトを書きたいのですが、POSTメソッドでどのようなデータ が送信されたかを知るにはどうするのですか？
  3. シングルクオート(')をバックスラッシュでエスケープされた シングルクオート(\')に変換しなければならないのですが、 正規表現を用いてこれを行うにはどの様にするのですか？ 同様に " を \" に、\ を \\ に変換したいのです。
  4.       次のようなコードを実行すると、思った通りの順番で出力が表示されません。

function myfunc($argument)
{
    echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);

      なぜですか？
  5. 改行されないのですが？ <pre> <?php echo "これは1行目"; ?> <?php echo "この行は改行に続いて出力されるはず"; ?> </pre>
  6. 'Warning: Cannot send session cookie - headers already sent...'や 'Cannot add header information - headers already set...'といった メッセージが出力されるのですが。 sent...'.
  7. リクエストヘッダに直接アクセスしたいのですが、どうすればよいですか？
  8. IISで認証を行おうとすると'No Input file specified'というエラーが 発生します。
  9. Windows: 他のコンピュータと共有しているファイルに、IIS でアクセスできません。
  10. どうすればXMLとPHPは共存することが出来るのですか？XMLの <?xml>タグがPHPでエラーになります。
  11. あらかじめ設定されている変数を全て網羅したリストはどこにあるので すか？なぜPHPのドキュメントにはその一覧がないのですか？
  12. フリーではない商用ライブラリである PDFLib を使わずに PDFファイルを生成するにはどうしたらよいでしょうか？ フリーのもので、外部のPDFライブラリが不要なものがいいのですが。
  13. いくつかの PHP ディレクティブでは、バイト値を int ではなく省略形で設定できます。この省略形で使えるオプションを教えてください。
PHP の関数のパラメータの順番を覚えられません。だって関数によってばらばらなんだもん。

PHP は、さまざまな外部ライブラリの間を取り持つ糊のような存在です。 そのため、時にはちょっとごちゃごちゃすることもあります。 しかし、経験上、以下のような規則があるようです。

配列関数 のパラメータは "needle, haystack" の順だけれども、 文字列関数 はその逆で "haystack, needle" の順となります。

あらゆるフォームから送信されたデータを扱うことができる汎用的な PHPスクリプトを書きたいのですが、POSTメソッドでどのようなデータ が送信されたかを知るにはどうするのですか？

PHPは$_POSTのような 定義済みの変数 を沢山提供しています。$_POSTを連想配列として ループすることでPOSTされた全ての値にアクセスできます。例えば、 foreach で単純にループして empty() で値をチェックし、 結果を出力します。

<?php
$empty = $post = array();
foreach ($_POST as $varname => $varvalue) {
if (empty($varvalue)) {
$empty[$varname] = $varvalue;
} else {
$post[$varname] = $varvalue;
}
}

print "<pre>";
if (empty($empty)) {
print "None of the POSTed values are empty, posted:\n";
var_dump($post);
} else {
print "We have " . count($empty) . " empty values\n";
print "Posted:\n"; var_dump($post);
print "Empty:\n"; var_dump($empty);
exit;
}
?>

シングルクオート(')をバックスラッシュでエスケープされた シングルクオート(\')に変換しなければならないのですが、 正規表現を用いてこれを行うにはどの様にするのですか？ 同様に " を \" に、\ を \\ に変換したいのです。

もしデータベースに格納するためにそんなことをしようとしているのなら、 データベース自身が持つエスケープの仕組みを使うようにしましょう。 MySQL なら mysql_real_escape_string()、 PostgreSQL なら pg_escape_string() などです。 汎用的な関数 addslashes() や stripslashes() もありますが、 これはさらに古い時代の PHP コードで使われていたものです。

次のようなコードを実行すると、思った通りの順番で出力が表示されません。
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
なぜですか？

式の中で関数の実行結果を使用する(例えば上の例の様に他の文字列と 連結する)ためには、echo するのではなく、その 値を return しなければいけません。

改行されないのですが？
<pre>
<?php echo "これは1行目"; ?>
<?php echo "この行は改行に続いて出力されるはず"; ?>
</pre>

PHPでは、"?>"か"?>\n"(\nは改行を表します)をPHPのコードブロッ クの終端と見なします。このため、コードブロック終端の改行記号は省 略され、表示される文は1行になります。つまり、改行をさせるために は、PHPのコードブロックの終端の後にもう1つ改行を挿入する必要があ るということです。

なぜPHPはこのようなことをするのでしょうか？なぜならHTMLを出力する 場合にはこの方が都合のよいことが多いからです。もしとても長い1行を 出力しなければならない場合に、改行が解釈されてしまうとしたらどう でしょう。ソースコードの1行もとても読めないくらい長いものになって しまいます。

'Warning: Cannot send session cookie - headers already sent...'や 'Cannot add header information - headers already set...'といった メッセージが出力されるのですが。 sent...'.

header(), set_cookie()や セッション関数は出力ストリームに ヘッダを付加する関数で、ヘッダを送信できるのは本文の出力を 開始する前のみです。headers_sent()を使って 既にヘッダが送信済みでないかチェックすることができます。 出力制御関数もご覧ください。

リクエストヘッダに直接アクセスしたいのですが、どうすればよいですか？

もしPHPがApacheモジュールとして動作しているなら、 getallheaders()を使えば全てのヘッダを取得する ことができます。下のちょっとしたコードで全てのリクエストヘッダを 表示することができます。

$headers = getallheaders();
foreach ($headers as $name => $content) {
echo "headers[$name] = $content<br />\n";
}

apache_lookup_uri(),
apache_response_headers(),
fsockopen()も参照ください。

IISで認証を行おうとすると'No Input file specified'というエラーが 発生します。

これはIISのセキュリティモデルの欠点で、IISで動作するCGIに共通する 問題です。これを回避策するには、認証のかかったディレクトリに(PHP が解釈しない)HTMLファイルを作成します。そしてMETAタグを使ってPHP を使用したページにリダイレクトするか、リンクを張ります。こうすれ ばPHPは認証済みかどうかを正しく認識することが出来ます。 また、これは他のNTウェブサーバーに は影響ありません。詳しくは» http://support.microsoft.com/kb/q160422/ とHTTP 認証を 参照ください。

Windows: 他のコンピュータと共有しているファイルに、IIS でアクセスできません。

Go to Internet Information Services を変更する必要があります。PHP ファイルを選択して プロパティを開き、セキュリティ タブに移動し、 Edit -< Anonymous access and authentication control 。

この問題を解決するには Anonymous Access のチェックをはずして Integrated Window Authentication をチェックしたままにしておきか、 あるいは Anonymous Access をチェックしてアクセスできないユーザーを別途指定します。

どうすればXMLとPHPは共存することが出来るのですか？XMLの <?xml>タグがPHPでエラーになります。

<?xml を直接PHPコードに埋め込むには、 PHPディレクティブのshort_tags を 0 に設定しなければなりません。 このディレクティブはini_set()でセットすることは できません。short_open_tags のオン/オフに関わらず、次のようにもできます: <?php echo '<?xml'; ?> このディレクティブはデフォルトでオンです。

あらかじめ設定されている変数を全て網羅したリストはどこにあるので すか？なぜPHPのドキュメントにはその一覧がないのですか？

マニュアルの 定義済みの変数 のページを読んでください。スクリプト上で有効な定義済み変数のリストの 一部があります。有効な変数の完全なリスト（とその詳しい情報）は phpinfo()をコールすることで見ることができます。 マニュアルの PHPの外部から来る変数 のセクションも読んでください。HTMLフォームやCookie、URL等から 来る外部変数に関するシナリオが説明されています。

フリーではない商用ライブラリである PDFLib を使わずに PDFファイルを生成するにはどうしたらよいでしょうか？ フリーのもので、外部のPDFライブラリが不要なものがいいのですが。

PHPで書かれている代替手段がいくつかあります。 » FPDF や » TCPDF などです。

いくつかの PHP ディレクティブでは、バイト値を int ではなく省略形で設定できます。この省略形で使えるオプションを教えてください。

有効なオプションは K（キロバイト）、M（メガバイト）および G（ギガバイト) です。これらはすべて、大文字小文字を区別しません。 これ以外の文字はバイト値と判断されます。 1M は、1 メガバイトあるいは 1048576 バイトと等しくなります。1K は、1 キロバイトあるいは 1024 バイトです。この表記法は、 php.ini や ini_set() 関数で使えます。 ここで、数値の値は、int 型にキャストされることに注意して下さい。 たとえば、0.5M は 0 と解釈されます。

注意: キロバイト? キビバイト?

PHP の記法では 1 キロバイト = 1024 バイトとしていますが、 IEC の標準規格では 1024 バイトのことを 1 キビバイト (kibibyte) と呼ぶことになっています。 まとめ: PHP での k および K = 1024 バイト。

User Contributed Notes

robjbrain at gmail dot com 10-Oct-2016 04:37
There is no error message given if you accidentally use KB, MB or GB instead of K, M or G. From what I can tell the alphabetic characters will be ignored and it will be treated as bytes, so 1GB actually equals 1 Byte. phpinfo() and ini_get() will report what you have written e.g. 1GB, so it will not be clear that there is anything wrong with your setting even though there is.


安全なパスワードハッシュ

この節では、なぜハッシュ関数を使ってパスワードを守るのかについての理由と、 ハッシュ処理を効率的に行う方法について説明します。

  1. なぜ、アプリケーションのユーザーが登録したパスワードをハッシュしなければならないのですか?
  2. よく使われるハッシュ関数である md5 や sha1 は、なぜパスワードのハッシュに適していないのですか?
  3. よく使われるハッシュ関数では不適切だというのなら、 パスワードをどうやってハッシュすればいいのですか?
  4. ソルトとは?
  5. ソルトはどのように保存すればいいのですか？
なぜ、アプリケーションのユーザーが登録したパスワードをハッシュしなければならないのですか?

パスワードのハッシュは、最も基本的なセキュリティ要件のひとつです。 ユーザーからパスワードを受け取るアプリケーションを設計するときには必ず考慮しなければなりません。 ハッシュしなければ、パスワードを格納したデータベースが攻撃を受けたときにパスワードを盗まれてしまいます。 それは即時にアプリケーションが乗っ取られることにつながるし、 もしそのユーザーが他のサービスでも同じアカウント・同じパスワードを使っていればさらに被害が大きくなります。

ユーザーのパスワードにハッシュアルゴリズムを適用してからデータベースに格納しておくと、 攻撃者が元のパスワードを知ることが難しくなります。 とはいえ、パスワードのハッシュ結果との比較は可能です。

しかし、ここで注意すべき点は、パスワードのハッシュ処理はあくまでもデータベースへの不正アクセスからの保護にすぎず、 アプリケーション自体に不正なコードを注入される攻撃からは守れないということです。

よく使われるハッシュ関数である md5() や sha1() は、なぜパスワードのハッシュに適していないのですか?

MD5 や SHA1 そして SHA256 といったハッシュアルゴリズムは、 高速かつ効率的なハッシュ処理のために設計されたものです。 最近のテクノロジーやハードウェア性能をもってすれば、 これらのアルゴリズムの出力をブルートフォースで(力ずくで)調べて元の入力を得るのはたやすいことです。

最近のコンピュータではハッシュアルゴリズムを高速に「逆算」できるので、 セキュリティ技術者の多くはこれらの関数をパスワードのハッシュに使わないよう強く推奨しています。

よく使われるハッシュ関数では不適切だというのなら、 パスワードをどうやってハッシュすればいいのですか?

パスワードをハッシュするときに検討すべき重要な二点は、 その計算量とソルトです。 ハッシュアルゴリズムの計算コストが増えれば増えるほど、 ブルートフォースによる出力の解析に時間を要するようになります。

PHP には ネイティブのパスワードハッシュ API が用意されており、これを使えば ハッシュの計算 や パスワードの検証 を安全に行えます。

それ以外には、crypt() 関数を使う方法もあります。 この関数は、いくつかのハッシュアルゴリズムに対応しています。 この関数を使うときには、指定したアルゴリズムが使えるかどうかを気にする必要はありません。 各アルゴリズムが PHP の内部でネイティブに実装されているので、 ご利用の OS でサポートしていないアルゴリズムでも使うことができます。

パスワードをハッシュするときのおすすめのアルゴリズムは Blowfish です。 パスワードハッシュ API でも、このアルゴリズムをデフォルトで使っています。 というのも、このアルゴリズムは MD5 や SHA1 と比較して計算コストが高いにもかかわらず、スケーラブルだからです。

crypt() でパスワードを検証する場合は、タイミング攻撃に注意が必要です。 タイミング攻撃を避けるため、処理時間が一定な文字列比較処理を使うようにしましょう。 PHP の == 演算子や === 演算子 も、そして strcmp() も、文字列比較の処理時間が一定ではありません。 その点 password_verify() はこの問題を気にしなくて済むので、 可能な限り ネイティブのパスワードハッシュ API を使うようにしましょう。

ソルトとは?

暗号理論におけるソルトとは、ハッシュ処理の際に追加するデータのことです。 事前に計算済みのハッシュとその元入力の対応表 (レインボーテーブル) で出力を解析される可能性を減らすために利用します。

端的に言うと、ソルトとはちょっとした追加データです。 これをつけるだけで、ハッシュをクラックするのが劇的に難しくなります。 事前に計算済みのハッシュとその元入力を大量にまとめた表が、オンラインで多数公開されています。 ソルトを使えば、そのハッシュ値がこれらの表に含まれている可能性を大きく減らすことができます。

password_hash() は、ソルトを指定しなかった場合にはランダムなソルトを作ります。 一般に、これがいちばんお手軽で安全なアプローチでしょう。

ソルトはどのように保存すればいいのですか？

password_hash() や crypt() を使った場合、戻り値であるパスワードハッシュの中にソルトが含まれています。 このソルトは、そのままの形式でデータベースに格納する必要があります。 というのも、利用したハッシュ関数の情報がそこに含まれており、それを直接 password_verify() や crypt() に渡せばパスワードの検証ができるからです。

crypt() や password_hash() の戻り値の書式を次の図に示します。 このように、使ったアルゴリズムや検証時に必要なソフトに関する情報もすべて含まれています。

password_hash や crypt が戻す値。 使ったアルゴリズム、そのアルゴリズムのオプション、使ったソルト、そしてハッシュしたパスワードが続く。

User Contributed Notes

tamas at microwizard dot com 22-Sep-2021 08:23
While I am reading the comments some old math lessons came into my mind and started thinking. Using constants in a mathematical algorythms do not change the complexity of the algorythm itself.

The reason of salting is to avoid using rainbow tables (sorry guys this is the only reason) because it speeds up (shortcuts) the "actual" processing power.
(((Longer stored hashes AND longer password increases complexity of cracking NOT adding salt ALONE.)))

PHP salting functions returns all the needed information for checking passwords, therfore this information should be treated as constant from farther point of view. It is also a target for rainbow tables (sure: for much-much larger ones).

What is the solution?
The solution is to store password hash and salt on different places.
The implementation is yours. Every two different places will be good enough.

Yes, it will make problems for hackers. He/she needs to understand your system. No speed up for password cracking will work for him/her without reimplementing your whole system.

This is my two cent.
swardx at gmail dot com 29-Jun-2016 09:36
A great read..

https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/

Serious Security: How to store your users' passwords safely

In summary, here is our minimum recommendation for safe storage of your users' passwords:

    Use a strong random number generator to create a salt of 16 bytes or longer.
    Feed the salt and the password into the PBKDF2 algorithm.
    Use HMAC-SHA-256 as the core hash inside PBKDF2.
    Perform 20,000 iterations or more. (June 2016.)
    Take 32 bytes (256 bits) of output from PBKDF2 as the final password hash.
    Store the iteration count, the salt and the final hash in your password database.
    Increase your iteration count regularly to keep up with faster cracking tools.

Whatever you do, don't try to knit your own password storage algorithm.
alf dot henrik at ascdevel dot com 12-Mar-2014 07:58
I feel like I should comment some of the clams being posted as replies here.

For starters, speed IS an issue with MD5 in particular and also SHA1. I've written my own MD5 bruteforce application just for the fun of it, and using only my CPU I can easily check a hash against about 200mill. hash per second. The main reason for this speed is that you for most attempts can bypass 19 out of 64 steps in the algorithm. For longer input (> 16 characters) it won't apply, but I'm sure there's some ways around it.

If you search online you'll see people claiming to be able to check against billions of hashes per second using GPUs. I wouldn't be surprised if it's possible to reach 100 billion per second on a single computer alone these days, and it's only going to get worse. It would require a watt monster with 4 dual high-end GPUs or something, but still possible.

Here's why 100 billion per second is an issue:
Assume most passwords contain a selection of 96 characters. A password with 8 characters would then have 96^8 = 7,21389578984e+15 combinations.
With 100 billion per second it would then take 7,21389578984e+15 / 3600 = ~20 hours to figure out what it actually says. Keep in mind that you'll need to add the numbers for 1-7 characters as well. 20 hours is not a lot if you want to target a single user.

So on essence:
There's a reason why newer hash algorithms are specifically designed not to be easily implemented on GPUs.

Oh, and I can see there's someone mentioning MD5 and rainbow tables. If you read the numbers here, I hope you realize how incredibly stupid and useless rainbow tables have become in terms of MD5. Unless the input to MD5 is really huge, you're just not going to be able to compete with GPUs here. By the time a storage media is able to produce far beyond 3TB/s, the CPUs and GPUs will have reached much higher speeds.

As for SHA1, my belief is that it's about a third slower than MD5. I can't verify this myself, but it seems to be the case judging the numbers presented for MD5 and SHA1. The issue with speeds is basically very much the same here as well.

The moral here:
Please do as told. Don't every use MD5 and SHA1 for hasing passwords ever again. We all know passwords aren't going to be that long for most people, and that's a major disadvantage. Adding long salts will help for sure, but unless you want to add some hundred bytes of salt, there's going to be fast bruteforce applications out there ready to reverse engineer your passwords or your users' passwords.


PHP と HTML

PHP と HTML は深く関係しています。PHP は HTML を生成し、HTML には PHP に 送信される情報が記述されています。 以下の FAQ を読む前に、どうやって 外部から来る変数を取得するかを読んでおくことは重要です。 このマニュアルにはこのトピックに関するよい例があります。

  1. フォームから、もしくは URL から値を渡す場合にはどういった エンコード/デコードが必要なのですか？
  2. <input type="image"> タグを使おうとしているのですが、変数 $foo.x と $foo.y が使えません。 $_GET['foo.x'] も存在していません。どうすればよいのですか?
  3. HTML フォームで配列を使用するにはどうすればよいですか？
  4. "select multiple" タグで選択された全ての結果を取得するには どうすればよいですか?
  5. JavaScript から PHP に変数を渡すには?
フォームから、もしくは URL から値を渡す場合にはどういった エンコード/デコードが必要なのですか？

エンコードが重要になる場面はいくつかあります。 string $data という エンコードされていない文字列データを渡す場合について考えてみると、

  • HTML を通じて渡す場合： 文字列にはどのような値が含まれるか分からないので、 データは必ず htmlspecialchars を行い、 ダブルクオートで囲まなければなりません。

  • URL を通じて渡す場合: URL はいくつかのパーツから成り立ちます。 このデータをそのパーツのうちの一つであると解釈させたいならば、 urlencode() でエンコード しなければなりません。

例1 HTML の hidden 要素

<?php
echo '<input type="hidden" value="' . htmlspecialchars($data) . '" />'."\n";
?>

注意: $data を urlencode() をしては いけません。なぜなら、その作業はブラウザに任されているからです。 一般に普及している全てのブラウザは正しくこの処理を行ってくれます。 ただ、この処理はメソッド(GET や POST)が何であるかにかかわらずに 行われるということに気をつけてください。この処理に気づくのは GET リクエストのときだけになるでしょう。なぜなら POST リクエストの内容は通常目に触れることは無いからです。

例2 ユーザーによって編集するデータ

<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>

注意: ブラウザはエスケープされたシンボルを解釈するので、data は 意図したとおりに表示されます。 フォームの内容を送信するとき、GET か POST かにかかわらず data は ブラウザによって URL エンコードされ、PHP によって URL デコードされます。 要は、URL エンコード/デコードを自分で行う必要はなく、これらの処理は すべて自動的に行われると言うことです。

例3 URL 中の場合

<?php
echo '<a href="' . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . '">'."\n";
?>

注意: この例では、実は GET リクエストを摸擬しています。このため、data を手動で urlencode() する必要があります。

注意: 全ての URL を htmlspecialchars() する必要があります。 なぜなら、この URL は HTML の value 属性として扱われるからです。 この場合は、ブラウザはまず htmlspecialchars() された データを元に戻し、それから URL を渡します。URL は urlencode() されているので、PHP はこれを正しく 解釈することができます。 URL 中の & が &amp; に置き換えられていることに気づくでしょう。もしあなたがこれを忘れても ほとんどのブラウザは元に戻してくれますが、必ずそうしてくれるとは 限りませんので、URL が動的に変更されるものでなくても URL は htmlspecialchars() されるべき です。

<input type="image"> タグを使おうとしているのですが、変数 $foo.x と $foo.y が使えません。 $_GET['foo.x'] も存在していません。どうすればよいのですか?

以下のようなタグを使えば、標準のボタンの代わりに画像を使用して フォームを送信することができます。

<input type="image" src="image.gif" name="foo" />
ユーザーが画像のどこかをクリックすると、そのフォームの内容に foo.x と foo.y という 2 つの変数が追加され、サーバーに送信されます。

PHP では foo.x と foo.y という名前は変数名として正しくないので、 自動的に foo_x と foo_y という名前に変換されます。要は、ピリオドが アンダースコアに置き換えられる、と言うことです。そのため、これらの 変数にアクセスする際には 外部から来る変数 の取得についてのセクションで記述されているのと同様な方法を とります。たとえば $_GET['foo_x'] などです。

注意:

リクエスト変数名の中のスペースは、アンダースコアに置き換えられます。

HTML フォームで配列を使用するにはどうすればよいですか？

フォームの内容を PHP スクリプトで配列として受け取るには、 <input>、<select> あるいは <textarea> といった要素の name を以下のように指定します：

<input name="MyArray[]" />
<input name="MyArray[]" />
<input name="MyArray[]" />
<input name="MyArray[]" />
変数名の最後にある括弧に注意してください。これにより、フォー ムの内容が配列として扱われます。異なる要素に同じ名前をつけること で要素を配列にグループ分けすることができます。
<input name="MyArray[]" />
<input name="MyArray[]" />
<input name="MyOtherArray[]" />
<input name="MyOtherArray[]" />
上記の HTML の場合、MyArray と MyOtherArray という 2 つの配列が生成され、 PHP スクリプトに送信されます。また、配列に特定のキーを設定する こともできます。
<input name="AnotherArray[]" />
<input name="AnotherArray[]" />
<input name="AnotherArray[email]" />
<input name="AnotherArray[phone]" />
この場合、配列 AnotherArray のキーは 0、1、email そして phone となります。

注意:

HTML に配列のキーを指定するかどうかは自由です。キーを指定しなかった 場合はフォームに現れる順番に番号がつけられます。最初の例だと、 キーは 0、1、2、3 となります。

配列関数と 外部から来る変数 も参照ください。

"select multiple" タグで選択された全ての結果を取得するには どうすればよいですか?

"select multiple" タグを使うと、ユーザーはリストから複数の項目を 選択することができるようになります。選択された項目はフォームの action で指定されたハンドラに渡されます。問題は、これらの値が全て 同じ名前で渡されることです。つまり、

<select name="var" multiple="yes">
選択されたそれぞれの項目は action のハンドラに次のように渡されます：
var=option1
var=option2
var=option3
それぞれの項目は前の変数 $var の値を上書きして しまいます。この問題を解決するには、PHPの "フォームの値を配列にする" 機能を使います。以下のようにするとよいでしょう。
<select name="var[]" multiple="yes">
こうすれば PHP に $var を配列として扱うように 知らせることができ、各項目の value の値は配列の要素として var[] に 追加されます。最初の項目は $var[0] になり、 次の項目は $var[1]... というようになります。 count() 関数を使えば選択された項目の数を知る ことができます。またもし必要なら sort() 関数を 使ってソートを行うこともできます。

JavaScript を使っている場合、フォーム要素に要素名を使って(訳注： document.myform.myelement.value 等の様に)アクセスしようとすると、 要素名に含まれる [] が問題となることがあるので 気をつけてください。この場合は、数字で表されるフォーム要素の ID を 使用するか、シングルクオートで要素名を囲んでフォーム要素の配列の インデックスとしてアクセスしてください。例えば、以下のようにします：

variable = document.forms[0].elements['var[]'];

JavaScript から PHP に変数を渡すには?

JavaScript は（普通は）クライアントサイド技術であり、一方 PHP は（普通は） サーバーサイド技術です。また HTTP は"ステートレスな"プロトコルです。 そのため、この二つの言語はダイレクトに変数を共有することができません。

しかしながら、この二つの言語の間で変数を渡すことは可能です。 一つの方法は PHP と一緒に JavaScript のコードを生成し、 ブラウザに自動的にリフレッシュ（再ロード）させることです。 以下の例はまさにそれで、PHP に画面の高さと幅を認識させています。 これは通常はクライアントサイドでしかできないことです。

例4 PHP による JavaScript の生成

<?php
if (isset($_GET['width']) AND isset($_GET['height'])) {
// ジオメトリ値を出力する
echo "画面の幅: ". $_GET['width'] ."<br />\n";
echo "画面の高さ: ". $_GET['height'] ."<br />\n";
} else {
// ジオメトリ変数を渡す
// (元のクエリ文字列を保持する
// -- POST 変数は別の方法で扱う必要がある)

echo "<script language='javascript'>\n";
echo " location.href=\"{$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"
. "&width=\" + screen.width + \"&height=\" + screen.height;\n";
echo "</script>\n";
exit();
}
?>

User Contributed Notes

There are no user contributed notes for this page.


PHP と COM

PHP は Win32 プラットフォーム上で COM と DCOM オブジェクトに アクセスすることができます。

  1. とある計算を行う DLL を作成しました。これを PHP で実行させる方法は ありますか?
  2. 'Unsupported variant type: xxxx (0xxxxx)'とはどういう意味ですか?
  3. PHP でビジュアルオブジェクトを操作できますか?
  4. COM オブジェクトをセッション情報として保存できますか?
  5. COM の出力するエラーをトラップできますか?
  6. PHP スクリプトから DLL を作成することはできますか? Perl では できるのですが。
  7. 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'とはどういう意味ですか?
  8. COM オブジェクトをリモートサーバーから実行するにはどうすればよいですか?
  9. 'DCOM is disabled in C:\path...\scriptname.php on line 6' という エラーが発生しました。どうすればよいですか？
  10. PHP を使用したページで ActiveX オブジェクトをロード/操作することは できますか?
  11. 実行中のコンポーネントのインスタンスを取得することはできますか?
  12. COM オブジェクトから送られてくるイベントを扱う方法はありますか？
  13. 2 つ以上のインターフェイスを公開している COM オブジェクトのメソッドを 呼び出そうとして困っています。どうすればよいですか?
  14. PHP は COM を扱えるということは分かりました。では COM+ については どうですか?
  15. PHP が COM オブジェクトを操作することができるということは、MTS を 使ってコンポーネントリソースを扱えると考えてもよいということですか？
とある計算を行う DLL を作成しました。これを PHP で実行させる方法は ありますか?

もしそれが普通の DLL なら、現在のところ PHP からそれを実行する手段は ありません。DLL が COM サーバーを含んでいて IDispatch インターフェイスが 実装されている場合、PHP からアクセスすることができます。

'Unsupported variant type: xxxx (0xxxxx)'とはどういう意味ですか?

多くの VARIANT タイプとその組み合わせがあり、そのほとんどは サポートされていますが、残りのいくつかは未だ実装されていません。 また配列も完全にサポートされているわけではなく、PHP と COM の間で 受け渡しが可能なのは 1 次元の添字付配列のみです。もしこの他に サポートされていないタイプを見つけた場合は(既知でなければ)、 できる限りの情報を添えてバグとして報告してください。

PHP でビジュアルオブジェクトを操作できますか?

基本的には可能です。しかし PHP はほとんどの場合ウェブスクリプティングの 言語として使用されウェブサーバー上で実行されるため、ビジュアルオブジェクトが サーバーのデスクトップに現れることはありません。もし PHP を アプリケーション作成に使用する、すなわち PHP-GTK と合わせて 使用する場合にはアクセスに制限はありません。COM を通じて ビジュアルオブジェクトを操作することができます。

COM オブジェクトをセッション情報として保存できますか?

できません。COM インスタンスはリソースとして扱われるため、1 つの スクリプトを実行している間のみ使用可能です。

COM の出力するエラーをトラップできますか?

COM 拡張モジュールは com_exception 例外をスローします。これをキャッチし、code メンバを調べることで次にすべきことを決定できます。

PHP スクリプトから DLL を作成することはできますか? Perl では できるのですが。

いいえ、残念ながら PHP にはそのようなツールはありません。

'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'とはどういう意味ですか?

このエラーが発生する理由はいくつかあります。

  • CLSID が正しくない
  • 要求された DLL が無い
  • 要求されたコンポーネントが IDispatch インターフェイスを実装していない

COM オブジェクトをリモートサーバーから実行するにはどうすればよいですか?

ローカルオブジェクトを実行するのと全く同様です。ただ、COM コンストラクタの 2 番目のパラメータにリモートマシンの IP アドレスを 渡すだけです。

php.ini に com.allow_dcom =true をセットするのを忘れないでください。

'DCOM is disabled in C:\path...\scriptname.php on line 6' という エラーが発生しました。どうすればよいですか？

php.ini を編集して com.allow_dcom =true. としてください。

PHP を使用したページで ActiveX オブジェクトをロード/操作することは できますか?

これは PHP とは関係ありません。ActiveX オブジェクトは、HTML ドキュメントから要求があった場合にクライアント側でロードされます。 PHP スクリプトとは関係が無く、従ってサーバー側と直接やりとりすることも できません。

実行中のコンポーネントのインスタンスを取得することはできますか?

モニカーを使用すれば可能です。同じ Word インスタンスに対して複数の 参照を取得したい場合は、以下のようにしてインスタンスを生成します。

<?php
$word = new COM("C:\docs\word.doc");
?>

こうすれば、実行中のインスタンスが無い、もしくはインスタンスの 取得が不可能だった場合には新規に生成され、インスタンスが取得できた 場合にはそのハンドルを返します。

COM オブジェクトから送られてくるイベントを扱う方法はありますか？

イベントシンクを定義し、com_event_sink() を使用してそれをバインドすることが可能です。PHP でイベントシンククラスの 雛形を作成するために com_print_typeinfo() を 使用することが可能です。

2 つ以上のインターフェイスを公開している COM オブジェクトのメソッドを 呼び出そうとして困っています。どうすればよいですか?

この問題に対する答えは、簡単ですが残念なものです。正確には わかりませんが、おそらく打つ手はありません。もしこの問題に関する 具体的な情報があったら» 私 に教えてください。

PHP は COM を扱えるということは分かりました。では COM+ については どうですか?

COM+ とは MTS(Microsoft Transaction Server) と MSMQ(Microsfot Message Queue Service) を通じてコンポーネントを操作する フレームワークによって COM を拡張したものです。が、PHP がそういった コンポーネントをサポートするにあたって特別に必要なことはありません。

PHP が COM オブジェクトを操作することができるということは、MTS を 使ってコンポーネントリソースを扱えると考えてもよいということですか？

PHP それ自体はまだトランザクションをサポートしていません。従って エラーが発生してもロールバック処理は行われません。もし トランザクションをサポートするコンポーネントを使用する場合は、 自分でトランザクション処理を実装する必要があります。

User Contributed Notes

codeslinger at compsalot dot com 27-Jan-2007 05:18
in response to item #1 above:  "If this is a simple DLL there is no way yet to run it from PHP."

Answer: There are several different packages/add-ons to php that enable low level access to the windows api. One of the most popular of these packages is available at http://www.winbinder.org

Winbinder does have the ability to load a dll and call it's functions.  Winbinder also provides a large set of windows apis for creating windows and controls.  This is useful for creating stand-alone desktop apps.  It is a possible alternative to php-gtk.

I've had mixed results with Winbinder, some things work very well, others are buggy; source code is available.  It's worth a look, Evaluate carefully.
17-Jul-2005 04:56
Re: The Windows English CHM Sample with MS Word Automation.

I see that $Word->Release() is called after $Word->Quit().
This seems to be erroneous. Actually, $Word->Release() should not have to be called if proper COM garbage collection is taking place. Release() is a C++ construction not used in either Visual Basic or VBScript or even MS-JScript. Just to be sure, however, I ran the sample through php.exe (5.04 CLI on Windows XP SP1 with Office 2003) and got a RPC failed error on the line containing $Word->Release(). The rest of the sample works fine, and the results are as expected. So, I propose 2 scenarios:
      1.There is a problem with the documentation (more likely).
      2.There is a problem with PHP504 itself, as this problem is reproduced with any COM Automation call, not just Word.
junk.ghost@virgin dOtt net 05-Oct-2004 09:27
It may be obvious to everyone else but...

If you want to write your own COM DLL in MSVC++6 and you want to pass it a string, you need the following in your .idl file:

HRESULT function_name([in] BSTR parameter_name,
                      [retval, out] BSTR * retval);

retval is the result of your function as a string to be passed back.

BSTR is an unsigned short *, so if you want to use your string with STL string etc. you may need to convert parameters to and from char *.

The burden of my message is that from PHP

$comThing = new COM("comThing.comThing");
print $comThing->function_name("Jeremy");

Jeremy will be marshalled as wide chars, which match BSTR.


その他の質問

ここでは他のカテゴリに分類することができないような質問を扱います。

  1. bz2 で圧縮された Windows マニュアルはどのように扱えばいいのですか？
bz2 で圧縮された Windows マニュアルはどのように扱えばいいのですか？

bz2 ファイルを処理することができるアーカイバを持っていない場合、 RedHat からコマンドラインツールを » ダウンロードしてください (詳細は下記の情報を参照)。

コマンドラインツールを使いたくない場合は、» Stuffit Expander、 » UltimateZip、 » 7-Zip、 » Quick Zip のようなフリーのツールを使用することも可能です。 » WinRAR または » Power Archiver のようなツールを持っている場合、簡単に bz2 ファイルを解凍できます。 Total Commander(以前は Windows Commander)を使用している場合は、 bz2 用のプラグインを » Total Commander のサイトから無料で手に入れることが出来ます。

Redhat から入手可能な bzip2 コマンドラインツール:

Windows 2000 SP2 のユーザーは バージョン 1.0.2 を、他の全ての Windows ユーザーはバージョン 1.00 を使用してください。 ダウンロードしたら実行ファイルの名前を bzip2.exe へ変更してください。 そしてそれをパスの通ったディレクトリ、例えば C:\Windows(ドライブ名は貴方のシステムにあわせて適宜変更してください) へコピーしてください。

注意: lang は使用する言語を意味し、 pdf のように x は指定した形式を表します。 php_manual_lang.x.bz2 を解凍するには以下のようにします。

  • コマンドプロンプトウィンドウを開きます
  • ダウンロードした php_manual_lang.x.bz2 を保存したディレクトリに cd コマンドを使用して移動します。
  • bzip2 -d php_manual_lang.x.bz2 を実行すると php_manual_lang.x というファイルが同じディレクトリに生成されます。

分割 HTML 版アーカイブ(php_manual_lang.tar.bz2) をダウンロードした場合でも手順は同じです。 唯一の違いは、bzip2 コマンドの実行後に php_manual_lang.tar が生成されることです。 tar 形式のファイルは » WinZip といったアーカイバで扱うことができます。

User Contributed Notes

There are no user contributed notes for this page.


付録

  • PHP の歴史と関連するプロジェクト
    • PHPの歴史
    • PHP関連のプロジェクトの歴史
    • PHP関連の本
    • PHP関連の出版物
  • PHP 8.2.x から PHP 8.3.x への移行
    • 新機能
    • 新しいクラスとインターフェイス
    • 新しく追加された関数
    • 新しいグローバル定数
    • 下位互換性のない変更点
    • PHP 8.3.x で推奨されなくなる機能
    • その他の変更
    • Windows のサポート
  • PHP 8.1.x から PHP 8.2.x への移行
    • 新機能
    • 新しく追加された関数
    • 新しいグローバル定数
    • 下位互換性のない変更点
    • PHP 8.2.x で推奨されなくなる機能
    • その他の変更
    • Windows のサポート
  • PHP 8.0.x から PHP 8.1.x への移行
    • 新機能
    • 新しいクラスとインターフェイス
    • 新しく追加された関数
    • 新しいグローバル定数
    • 下位互換性のない変更点
    • PHP 8.1.x で推奨されなくなる機能
    • その他の変更
  • PHP 7.4.x から PHP 8.0.x への移行
    • 新機能
    • 下位互換性のない変更点
    • 推奨されなくなる機能
    • その他の変更
  • PHP 7.3.x から PHP 7.4.x への移行
    • 新機能
    • 新しいクラスとインターフェイス
    • 新しく追加された関数
    • 新しいグローバル定数
    • 下位互換性のない変更点
    • PHP 7.4.x で推奨されなくなる機能
    • 削除された拡張モジュール
    • その他の変更
    • Windows のサポート
  • PHP 7.2.x から PHP 7.3.x への移行
    • 新機能
    • 新しく追加された関数
    • 新しいグローバル定数
    • 下位互換性のない変更点
    • PHP 7.3.x で推奨されなくなる機能
    • その他の変更
    • Windows のサポート
  • PHP 7.1.x から PHP 7.2.x への移行
    • 新機能
    • 新しい関数
    • 新しいグローバル定数
    • 下位互換性のない変更点
    • PHP 7.2.x で推奨されなくなる機能
    • その他の変更
  • PHP 7.0.x から PHP 7.1.x への移行
    • 新機能
    • 新しい関数
    • 新しいグローバル定数
    • 下位互換性のない変更点
    • PHP 7.1.x で推奨されなくなる機能
    • 変更された関数
    • その他の変更
    • Windows のサポート
  • PHP 5.6.x から PHP 7.0.x への移行
    • 下位互換性のない変更点
    • 新機能
    • PHP 7.0.x で推奨されなくなる機能
    • 変更された関数
    • 新しい関数
    • 新しいクラスおよびインターフェイス
    • 新しいグローバル定数
    • SAPI モジュールの変更
    • 削除された拡張モジュールおよび SAPI
    • その他の変更
  • PHP 5.5.x から PHP 5.6.x への移行
    • 下位互換性のない変更点
    • 新機能
    • PHP 5.6.x で推奨されなくなる機能
    • 変更された関数
    • 新しい関数
    • PHP 5.6.x における OpenSSL 関連の変更
    • その他の拡張モジュールに対する変更
    • 新しいグローバル定数
  • PHP のデバッグ
    • PHP のデバッグについて
  • Configure オプション
    • 中心となる configure オプションのリスト
  • php.ini ディレクティブ
    • php.ini ディレクティブのリスト
    • php.ini のセクション一覧
    • コア php.ini ディレクティブに関する説明
  • 拡張モジュールの一覧/分類
    • アルファベット順
    • 所属
    • 状態
  • 関数エイリアスのリスト
  • 予約語の一覧
    • キーワードのリスト
    • 定義済のクラス
    • 定義済みの定数
    • その他の予約語の一覧
  • リソース型の一覧
  • 利用できるフィルタのリスト
    • 文字列フィルタ
    • 変換フィルタ
    • 圧縮フィルタ
    • 暗号化フィルタ
  • サポートされるソケットトランスポートのリスト
    • Internet ドメイン: TCP、UDP、SSL、および TLS
    • Unix ドメイン: Unix および UDG
  • PHP 型の比較表
  • パーサトークンの一覧
  • ユーザーレベルでの命名の手引き
    • グローバル名前空間
    • ルール
    • Tips
  • マニュアルについて
    • フォーマット
    • ユーザーノートについて
    • 関数の定義(プロトタイプ)を読むには
    • 本マニュアルに記載された PHP のバージョン
    • PHP に関する更なる情報を得るには
    • ドキュメントの改善を手助けするには
    • 各種フォーマットを生成する方法
    • 翻訳
  • Creative Commons Attribution 3.0
  • 索引
    • 関数・メソッド
    • サンプル
  • 変更履歴

User Contributed Notes

There are no user contributed notes for this page.


PHP の歴史と関連するプロジェクト

目次

  • PHPの歴史
  • PHP関連のプロジェクトの歴史
  • PHP関連の本
  • PHP関連の出版物

PHP は、90年代半ばに登場してから大きな進歩を遂げました。 当初はひっそりと始まったものが、今やウェブの世界で最も強力な言語のひとつになったのです。 PHP の進化は、ギークにとってのおとぎ話のようなものでしょう。 ただ忘れてはならないのは、ここまでの成長は決してたやすいものではなかったということです。 これまでの PHP の道のりに興味がある人は、このページを読み進めてください。 過去のインターネットの歴史に触れてみたい人は、古いバージョンの PHP を » PHP Museum から取得できます。

User Contributed Notes

okhalelawrence at gmail dot com 07-Aug-2021 06:12
The Birth of PHP 6;

After Version 5: PHP received mixed reviews due to lacking native Unicode support at the core language level. In 2005, a project headed by Andrei Zmievski was initiated to bring native Unicode support throughout PHP, by embedding the International Components for Unicode (ICU) library, and representing text strings as UTF-16 internally. Since this would cause major changes both to the internals of the language and to user code, it was planned to release this as version 6.0 of the language, along with other major features then in development.

The Birth of PHP 7;

During 2014 and 2015, a new major PHP version was developed, PHP 7. The numbering of this version involved some debate among internal developers.While the PHP 6 Unicode experiment had never been released, several articles and book titles referenced the PHP 6 name, which might have caused confusion if a new release were to reuse the name. After a vote, the name PHP 7 was chosen.

The foundation of PHP 7 is a PHP branch that was originally dubbed PHP next generation (phpng). It was authored by Dmitry Stogov, Xinchen Hui and Nikita Popov, and aimed to optimize PHP performance by refactoring the Zend Engine while retaining near-complete language compatibility. By 14 July 2014, WordPress-based benchmarks, which served as the main benchmark suite for the phpng project, showed an almost 100% increase in performance. Changes from phpng make it easier to improve performance in future versions, as more compact data structures and other changes are seen as better suited for a successful migration to a just-in-time (JIT) compiler. Because of the significant changes, the reworked Zend Engine was called Zend Engine 3, succeeding Zend Engine 2 used in PHP 5.

Because of the major internal changes in phpng, it must receive a new major version number of PHP, rather than a minor PHP 5 release, according to PHP's release process. Major versions of PHP are allowed to break backward-compatibility of code and therefore PHP 7 presented an opportunity for other improvements beyond phpng that require backward-compatibility breaks.

The Birth of PHP 8;

PHP 8 was released on November 26, 2020. PHP 8 is a major version and has breaking changes from previous versions.New features and notable changes include:
Just-in-time compilation
Just-in-time compilation is supported in PHP 8.
PHP 8's JIT compiler can provide substantial performance improvements for some use cases.PHP developer Nikita Popov has stated that the performance improvements for most websites will be less substantial than the upgrade from PHP 5 to PHP 7.Performance improvements due to the addition of the JIT compiler are expected to be more substantial for mathematical-type operations than for common web-development use cases.Additionally, the JIT compiler provides future potential to move some code from C to PHP, due to the performance improvements for some use cases.
Addition of the match expression
Main article: PHP syntax and semantics § Match
PHP 8 introduced the match expression.The match expression is conceptually similar to a switch statement and is more compact for some use cases.Because match is an expression, its result can be caught into a variable or returned from a function.
Type changes and additions
PHP 8 introduced union types, a new static return type, and a new mixed type.
"Attributes", often referred to as "annotations" in other programming languages, were added in PHP 8, which allow metadata to be added to classes.
throw was changed from being a statement to being an expression. This allows exceptions to be thrown in places that were not previously possible. Sorce: wikipedia


PHPの歴史

PHP Tools、FI、Construction Kit、そして PHP/FI

現在 PHP として知られているものは、かつて PHP/FI と呼ばれていたソフトウェアの後継です。 1994 年に Rasmus Lerdorf が生み出したいちばん最初の PHP はシンプルな CGI バイナリ群で、C 言語で書かれていました。 元々は彼がオンラインで公開している経歴書のアクセス履歴を調べるために使われていましたが、 彼はそのスクリプト群を「Personal Home Page Tools」と名付けました。「PHP Tools」 と略されることが多かったようです。時を経て、さまざまな機能追加の要望が出てきたところで、 Rasmus は PHP Tools を書き直しました。より大規模でリッチな実装にしたのです。 このニューモデルはデータベースも扱えるようになり、 一種のフレームワークとして使えるようになったのです。 ユーザーは、これを使って掲示板のようなシンプルな動的ウェブアプリケーションを作れるようになりました。 1995 年 6 月、Rasmus は PHP Tools のソースコードを » 公開 しました。開発者は、それを自分の好きなように使えるようになったのです。 ユーザーが自分でバグ修正や機能改善をすることも許可されていましたし、 むしろそれを推奨していました。

同じ年の 9 月、Rasmus は PHP をさらに発展させ、短期間ですが PHP の看板を外しました。新しいツールの名前は FI ("Forms Interpreter" の略) となり、 この実装には現在の PHP の基本機能のいくつかが含まれていました。 Perl 風の変数、そしてフォーム変数の自動取得、HTML に埋め込める構文などです。 構文は Perl と似ていましたが、より制限されたシンプルなもので、 どこか一貫性に欠けるものでした。 実際、コードを HTML ファイルに埋め込むには HTML のコメントを使う必要がありました。 このやり方を誰もが気に入ったというわけではありませんでしたが、 FI はその後も成長を続け、CGI ツールとしての立場を固めていきました。 とは言え、未だに言語というにはほど遠い状態です。 しかし、翌月の 1995 年 10 月から状況は変わり始めました。 Rasmus が、コードを完全に書き直した版をリリースしたのです。 再び PHP の名前がつき、こんどは「Personal Home Page Construction Kit」 とう名前になりました。これは、当時としてはかなり進んだスクリプトインターフェイスを持っていました。 その言語は意図的に C の構文に似せて作られ、C や Perl などを知っている人たちが移行しやすいようにしてありました。 この時点ではまだ UNIX や POSIX 準拠のシステムにしか対応していませんでしたが、 Windows NT 上での実装も検討されていました。

コードはさらに一から書き直され、1996 年の 4 月には過去のリリースの名前を組み合わせた PHP/FI という名前で公開されました。この第二世代の実装で、 PHP は単なるツール群からプログラミング言語へと進化を遂げたのです。 DBM や mSQL そして Postgres95 などのデータベース、 クッキー、ユーザー定義関数などのサポートが組み込まれました。 その年の 6 月に、PHP/FI のバージョンは 2.0 になりました。 興味深いことに、PHP 2.0 の完全なバージョンとして出されたものはこれだけでした。 最終的にベータ状態を卒業したのは 1997 年 11 月のことでしたが、 そのころには裏にあるパースエンジンは完全に書き直されていました。

開発期間は短かったものの、PHP/FI は初期のウェブ開発業界での勢力を拡大し続けました。 1997 年から 1998 年にかけて、PHP/FI は世界中の数千人のマニアに使われていました。 1998 年 5 月の Netcraft の調査によると、およそ 60,000 のドメインがヘッダに "PHP" の文字を含めていたそうです。これは、そのサーバーに実際に PHP/FI がインストールされていたことを意味します。この数字は、当時のインターネット上の全ドメインの およそ 1% にあたるものでした。 これらの実績にもかかわらず、PHP/FI に円熟期が来ることはとても望めませんでした。 ちょっとした貢献をしてくれる人は何人かいたものの、 基本的には個人で開発している状態が続いていたのです。

例1 PHP/FI のコード例

<!--include /text/header.html-->

<!--getenv HTTP_USER_AGENT-->
<!--ifsubstr $exec_result Mozilla-->
  Hey, you are using Netscape!<p>
<!--endif-->

<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
  Sorry, that record does not exist<p>
<!--endif exit-->
  Welcome <!--$user-->!<p>
  You have <!--$index:0--> credits left in your account.<p>

<!--include /text/footer.html-->

PHP 3

PHP 3.0 は、現存する PHP に近い状態になった最初のバージョンです。 PHP/FI 2.0 ではまだ力不足で、自分たちが大学のプロジェクトで作っている eコマースアプリケーションを構築するには機能が足りないと気づいたのは イスラエルのテルアビブにいた Andi Gutmans と Zeev Suraski でした。彼らは 1997 年に、 PHP/FI の裏にあるパーサーを新たに書き直そうとし始めました。 Rasmus をオンラインで捕まえた彼らは、PHP の現在の実装や自分たちがそれをどう作り直そうとしているのかについて議論しました。 現在のエンジンを改善させ、既存の PHP/FI のユーザーも守るために、 Andi と Rasmus、そして Zeev は協力して新たなプログラミング言語を作ることにしました。 この全く新しい言語は新しい名前でリリースされました。PHP/FI 2.0 の名前が持っていた「個人向け」というイメージをなくすためにです。 新しい名前は、シンプルに「PHP」。「PHP: Hypertext Preprocessor」 の頭文字をとったものです。

PHP 3.0 の最も強力な点は、その拡張性でした。 さまざまなデータベースやプロトコル、そして API を扱うための成熟したインターフェイスをユーザー向けに用意しただけでなく、 その言語自身も拡張しやすいものにしました。 そのおかげで、多くの開発者がさまざまなモジュールを開発するようになりました。 間違いなく、これこそが PHP 3.0 が大成功を収めた鍵でしょう。 PHP 3.0 で登場したその他の主要機能には、 オブジェクト指向プログラミングのサポートやより強力で一貫性のある言語構文などがあります。

1998 年 6 月、世界中から新たな開発者が多く参入した PHP Development Team は、PHP/FI 2.0 の正式な後継として PHP 3.0 をアナウンスしました。 アクティブな開発が続いていた PHP/FI 2.0 は前年の 11 月に開発が止まっていましたが、 ここで始めて公式に終了宣言が出たのです。約 9 か月の公開テストを経て PHP 3.0 が公式にリリースされたときには、既に世界中の 70,000 以上のドメインに PHP がインストールされていました。さらに、その環境は POSIX 準拠の OS にとどまりませんでした。 比較的少数ではあるものの、PHP がインストールされているとされるドメインの中には Windows 95 や 98 そして NT、あるいは Macintosh でサーバーが動いているところもあったのです。 最盛期には、インターネット上のウェブサーバーのほぼ 10% に PHP 3.0 がインストールされていました。

PHP 4

PHP 3.0が公式にリリースされて間もない1998年の冬、Andi Gutmans とZeev SuraskiはPHPの核となる部分を書き直し始めました。この 目的は、複雑なアプリケーションにおけるパフォーマンスの改善と PHPコードのモジュールとしての独立性を高めることでした。 そういったアプリケーションはPHP 3.0の新機能や第三者による 多くのデータベースやAPIのサポートを使用することで開発可能 でしたが、PHP 3.0はそういった複雑なアプリケーションを効率的に 扱うようにはデザインされていませんでした。

'Zend Engine'と呼ばれる新しいエンジン(開発者であるZeevとAndi の名前の組み合わせ)は、彼らの目的を十分に果たすものでした。 そしてそれは1999年中ごろに初めて紹介されました。このエンジンを 使用し、いくつかの広範囲にわたる新機能を追加したPHP 4.0は 前のバージョンのおよそ2年後となる2000年5月にリリースされました。 PHP 4.0はパフォーマンスが大幅に改善されたのに加え、 さらに多くのウェブサーバーのサポート、HTTPセッション、 出力のバッファリング、ユーザーの入力のさらに安全な取得方法の 提供、いくつかの新しい言語構造の提供といった特徴があります。

PHP 5

PHP 5は長期にわたる開発とプレリリースを経て2004年7月に公開されました。 改良の目玉は、コアである Zend Engine 2.0 で新しいオブジェクトモデルがサポートされたことで、 その他にも多くの新しい機能が追加されています。

PHP の開発チームは数十名の開発者で構成されています。 それ以外にも、何十名もの人たちが関連プロジェクトやサポートなどにかかわっています。 たとえば PEAR や PECL、そしてドキュメンテーション、 さらにはネットワーク基盤の管理などです。 PHP のネットワーク基盤は 100 を軽く上回るウェブサーバーで構成されており、 世界の七大陸のうちの六つにまたがっています。 ここ数年の統計情報に基づいて見積もると、 PHP は今や世界中の何千万から何億ものドメインに導入されていると言っても過言ではありません。

PHP 6

PHP 6 で計画されていたのは、PHP エンジンと言語内で Unicode を強く サポートすることでした。この取り組みは後に破棄されましたが、 PHP 6 をターゲットとしていた機能は PHP 5.3 (名前空間) と PHP 5.4 (トレイト と配列の "短縮" 記法) で取り込まれました。

PHP 7

PHP 7.0 は 2015年にリリースされ、 PHP コアのメジャーバージョン Zend Engine 3.0 を目玉としていました。 このバージョンは大きなパフォーマンスの向上 (PHP 5.6 と比較して最大2倍) とメモリ使用量の効率化、 一貫した64ビットのサポート、例外の機能追加、 安全な乱数生成器、 NULL合体演算子 (??), 無名クラス やその他の機能が含まれていました。

PHP 7 シリーズの後のリリースには、 リストの短縮記法 (7.1) や オブジェクトのパラメータや戻り値への型宣言(7.2)、 柔軟な heredoc と nowdoc (7.3)、 FFI (7.4) などのような、 多くの言語機能が追加されました。

PHP 8

2020年に最初にリリースされた PHP 8.0 は、 PHP 言語のさらなるメジャーアップデートです。 このバージョンには 名前付き引数, union型 , アトリビュート, コンストラクタのプロモーション, match 式、nullsafe 演算子 (?->), JIT コンパイラが含まれています。 そして、型システムやエラーハンドリングが改善され、一貫性の向上が図られていました。

PHP 8 シリーズの後のリリースには、 enum型 (8.1), ファイバー (8.1), 読み取り専用クラス (8.2), Disjunctive Normal Form (DNF) Types (8.2), クラス定数への型宣言 (8.3) が含まれています。

User Contributed Notes

There are no user contributed notes for this page.


PHP関連のプロジェクトの歴史

PEAR

» PEAR、 PHP Extension and Application Repository (元は PHP Extension and Add-on Repositoryでした)は、 PHPで書かれた基本的なクラスの集まりで、将来的には PHPの拡張モジュールを開発者に配布する中心的な 方法になっていくでしょう。

PEARは2000年1月にTel Avivで開かれたPHP Developers' Meeting (PDM)で行われた議論の中から生まれたものです。これはStig S. Bakkenによって作成され、彼の初めて娘であるMalin Bakken に捧げられています。

2000年はじめの頃から、PEARは多くの開発者が一般的で再利用可能な 機能をPHPコミュニティ全体のために実装しました。これにより、 PEARは大きな、そして重要なプロジェクトへと成長しました。 今日PEARにはデータベースへのアクセス、キャッシュ、数学計算、 eCommerce等のバラエティに富んだクラスが含まれるようになって います。

PEARに関する詳細については、 » PEARのマニュアルを 参照ください。

PHP Quality Assurance Initiative(PHPの品質保証機関)

» PHP Quality Assurance Initiativeは、PHPのリリースが製品として様々な環境で 動作するべく十分にテストされていないという批判への対応策 として2000年の夏に開始されました。品質保証チームは現在のところ、PHPの ソースコードについて十分に理解している開発の中心となって いる人々によって構成されています。こうした開発者はPHPの ローカライズやバグフィクスに多くの時間を費やしています。 この他に、開発者の行った修正を個々の環境でテストして フィードバックを提供する多くのメンバーがいます。

PHP-GTK

» PHP-GTK は、 クライアントとして動作するGUIアプリケーションを構築するための PHPソリューションです。PHP-GTKの設計と実装は主として Andrei Zmievskiによります:

GUIプログラミングにはずっと興味を持ちつづけていて、あるとき Gtk+というものが、Cでコーディングするにはあまりに面倒なものだ ということを除けば非常にすばらしいものだと言うことを知りました。 PyGtkやGTK-Perlの実装を見て、PHPで(必要最小限の部分だけでも) Gtkインターフェイスを作成できないものだろうか、と考え始めたのです。 そして2000年の8月にちょっとした時間が出来たので実験を始めました。 私が主として参考にしたのはPyGtkの実装でした。というのもPyGtkは ほぼ全ての機能を網羅していて、且つオブジェクト指向のすばらしい インターフェイスを持っていたからです。こうした最初の段階で 私はPyGtkの作者であるJmaes Henstridgeの有用なアドバイスを得ることが 出来ました。

Gtk+関数へのインターフェイスを全て自作するのは問題外だったので コードジェネレータというアイデアに飛びつきました。これはPyGtkと 同様の方法です。コードジェネレータとはGtk+のクラス、定数、そして メソッドが記述されている .defs ファイルを読み込みPHPへのインターフェイス となるCのコードを生成するPHPのプログラムです。自動的に生成することが 出来ない部分に関しては .overrides ファイルに手動で追加していきました。

2000年の秋の間はあまり時間が取れなかったため、コードジェネレータ やインフラの構築に長い期間がかかってしまいました。しかし PHP-GTKをFrank kromannに見せると、彼は大いに興味を示して コードジェネレータとWin32版の実装を手伝い始めてくれました。 最初のプログラムHello Worldを書いて、それが動作したとき 私たちはとても興奮しました。このプロジェクトが公開するに 足るものになるにはさらに数ヶ月が必要でしたが2001年3月1日に 最初のバージョンをリリースすることが出来ました。このニュースは すぐにSlashDotにも載りました。

PHP-GTKはさらに拡張していくだろうと考え、私は専用のメーリング リストとCVSリポジトリ、そしてCollin Viebrockの助けを得て ウェブサイト(gtk.php.net)を用意しました。ドキュメンテーションは 目下進行中でJames Mooreが手伝ってくれています。

PHP-GTKはリリース以来徐々に広がっています。ドキュメンテーション チームもは日々マニュアルを更新していますし、PHP-GTK用の拡張 モジュール、そしてPHP-GTKを使った興味深いアプリケーションを 作成する人も増えてきています。

User Contributed Notes

There are no user contributed notes for this page.


PHP関連の本

PHPが成長していくに従って、開発プラットフォームとして世界中で 有名になっていきました。この流れを確かめる面白い方法のうちの 一つは、初期の頃から現在に到るまで頻繁に出版されつづけている PHPに関する本を観察してみることです。

私たちの知る限り、PHPを扱った最初の本は1999年の4月にチェコで出版された 'PHP - tvorba interaktivnich internetovych aplikaci' (PHP - Creating Interactive Internet Applications) で、Jirka Kosekにより書かれたものです。 翌月、Egon Schmid, Christian Cartus, Richard Blumeにより 書かれたドイツ語の本が続いて出版されました。 PHPについて書かれた英語の本、 Leon Atkinsonによる'Core PHP Programming'がそのすぐ後に出版され ました。これらの本は、いずれも PHP 3.0を扱っていました。 (訳註:日本語では、PHPをタイトルとする本「PHP徹底攻略」(堀田、石井、廣川)の 初版が1999年9月に出版されています。)

こうした最初の出版物に続いて、多くの著者、出版社から数多くの 本が出版されました。その数は英語で400冊以上、ドイツ語で100冊以上、 フランス語やスペイン語で50冊以上にもなります！さらに他の言語、 たとえば韓国語、日本語そしてヘブライ語でも本が出版されています。

このようにPHPに関する書籍が、異なった著者により執筆され、 多くの出版社から出版され、多くの言語で書かれている、という 事実はPHPが世界的に成功している強い証拠であると言えるでしょう。

User Contributed Notes

There are no user contributed notes for this page.


PHP関連の出版物

私たちの知る限り、PHPに関する記事が最初に掲載された雑誌は 1998年の春に出版されたthe Czech mutation of Computerworldで、 PHP 3.0が扱われていました。本と同様に、これに続いて様々な すばらしい雑誌にPHPに関する記事が掲載されています。

PHPに関する記事はDr. Dobbs, Linux Enterprise, Linux Magazine, その他多くの雑誌に掲載されています。ASPベースのアプリケーションを Windows上で動作するPHPに移植する記事が、なんと MicrosoftのMSDNに 掲載されています！

User Contributed Notes

There are no user contributed notes for this page.


PHP 8.2.x から PHP 8.3.x への移行

目次

  • 新機能
  • 新しいクラスとインターフェイス
  • 新しく追加された関数
  • 新しいグローバル定数
  • 下位互換性のない変更点
  • PHP 8.3.x で推奨されなくなる機能
  • その他の変更
  • Windows のサポート

この新しいマイナーバージョンには、たくさんの 新機能 と 互換性のない変更がいくつか あります。実運用環境の PHP をこのバージョンにあげる前に、これらの変更を必ずテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.1.x, 7.2.x, 7.3.x, 7.4.x, 8.0.x, 8.1.x, 8.2.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

PHP コア

readonly 機能の修正

無名クラスも、readonly としてマークできるようになりました。

読み取り専用プロパティは、clone している間に再初期化できるようになりました。

クラス定数に対する型宣言

クラス、インターフェイス、トレイト、そして列挙型の定数は、新たに型宣言をサポートするようになりました。

マジックメソッドで作ったクロージャ

マジックメソッドで作ったクロージャは、名前付き引数を受け入れるようになりました。

トレイトのメソッドに対する final 指定

トレイトからメソッドを使う場合に、そのメソッドに対して final を指定できるようになりました。

Override アトリビュート

親クラスまたは実装済みのインターフェイス内で、メソッドが存在するかを調べるアトリビュートとして、#[\Override] が追加されました。

クラス定数への動的なアクセス構文

クラス定数は、C::{$name} という構文で動的にアクセスできるようになりました。

static 変数の初期化

static 変数を初期化する際に、任意の式が使えるようになりました。

INI 変数に対するデフォルト値指定

ini ファイル内で、デフォルト値を指定する文法をサポートしました。

<?php
/*
/path/to/user.ini に、以下の設定が含まれているとします:

listen = localhost:${DRUPAL_FPM_PORT:-9000}
*/
$user_ini = parse_ini_file('/path/to/user.ini');
echo $user_ini['listen']; // localhost:9000

CLI

複数のファイルの文法チェックを、一度にできるようになりました。

DOM

プロパティ DOMElement::$className と、DOMElement::$id が追加されました。libxml2 の制限により、現時点でこれらはバイナリセーフではありません。つまり、プロパティの値から NUL バイト以降が切り捨てられるということです。

プロパティ DOMNode::$isConnected と DOMNameSpaceNode::$isConnected が追加されました。

プロパティ DOMNode::$parentElement と DOMNameSpaceNode::$parentElement が追加されました。

FFI

FFI\CData を他の FFI\CData に代入できるようになりました。つまり、CData を構造体やフィールドに代入できるようになったということです。

Opcache

opcache_get_status()['scripts'][n]['revalidate'] の値に、いつスクリプトの更新チェックを行うかの予定が Unix タイムスタンプの形で含まれるようになりました。いつチェックを行うかは、opcache.revalidate_freq によって決まります。

POSIX

posix_getrlimit() で、リソースの制限値をひとつ取得できる、オプションの $resource パラメータが使えるようになりました。

posix_isatty() は、通常のパラメータ解釈のセマンティクス(ZPP) に従い、整数値に対して警告を発生させるようになりました。

posix_ttyname() は、通常のパラメータ解釈のセマンティクス(ZPP) に従い、整数値に対して警告を発生させるようになりました。さらに、無効なファイルディスクリプタの整数値に対しても、警告を発生させるようになっています。

Streams

以前のバージョンでは実装されていなかった新しい通知として、STREAM_NOTIFY_COMPLETED が発生させられるようになりました。

User Contributed Notes

There are no user contributed notes for this page.


新しいクラスとインターフェイス

Date

  • DateError
  • DateObjectError
  • DateRangeError
  • DateException
  • DateInvalidOperationException
  • DateInvalidTimeZoneException
  • DateMalformedIntervalStringException
  • DateMalformedPeriodStringException
  • DateMalformedStringException

Random

  • Random\IntervalBoundary

User Contributed Notes

There are no user contributed notes for this page.


新しく追加された関数

Date

  • DatePeriod::createFromISO8601String()

DOM

  • DOMElement::getAttributeNames()
  • DOMElement::insertAdjacentElement()
  • DOMElement::insertAdjacentText()
  • DOMElement::toggleAttribute()
  • DOMNode::contains()
  • DOMNode::getRootNode()
  • DOMNode::isEqualNode()
  • DOMNameSpaceNode::contains()
  • DOMParentNode::replaceChildren()

国際化関数

  • IntlCalendar::setDate()
  • IntlCalendar::setDateTime()
  • IntlGregorianCalendar::createFromDate()
  • IntlGregorianCalendar::createFromDateTime()

JSON

  • json_validate()

LDAP

  • ldap_connect_wallet()
  • ldap_exop_sync()

マルチバイト文字列

  • mb_str_pad()

Posix

  • posix_sysconf()
  • posix_pathconf()
  • posix_fpathconf()
  • posix_eaccess()

PostgreSQL

  • pg_set_error_context_visibility() (libpq >= 9.6)

Random

  • Random\Randomizer::getBytesFromString()
  • Random\Randomizer::nextFloat()
  • Random\Randomizer::getFloat()

Reflection

  • ReflectionMethod::createFromMethodName()

Sockets

  • socket_atmark()

Standard

  • str_increment()
  • str_decrement()
  • stream_context_set_options()

Zip

  • ZipArchive::getArchiveFlag()

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

cURL

  • CURLINFO_CAPATH (libcurl >= 7.84.0)
  • CURLINFO_CAINFO (libcurl >= 7.84.0)
  • CURLOPT_MIME_OPTIONS (libcurl >= 7.81.0)
  • CURLMIMEOPT_FORMESCAPE (libcurl >= 7.81.0)
  • CURLOPT_WS_OPTIONS (libcurl >= 7.86.0)
  • CURLWS_RAW_MODE (libcurl >= 7.86.0)
  • CURLOPT_SSH_HOSTKEYFUNCTION (libcurl >= 7.84.0)
  • CURLOPT_PROTOCOLS_STR (libcurl >= 7.85.0)
  • CURLOPT_REDIR_PROTOCOLS_STR (libcurl >= 7.85.0)
  • CURLOPT_CA_CACHE_TIMEOUT (libcurl >= 7.87.0)
  • CURLOPT_QUICK_EXIT (libcurl >= 7.87.0)
  • CURLKHMATCH_OK (libcurl >= 7.19.6)
  • CURLKHMATCH_MISMATCH (libcurl >= 7.19.6)
  • CURLKHMATCH_MISSING (libcurl >= 7.19.6)
  • CURLKHMATCH_LAST (libcurl >= 7.19.6)

国際化関数

  • MIXED_NUMBERS (Spoofchecker)
  • HIDDEN_OVERLAY (Spoofchecker)

OpenSSL

  • OPENSSL_CMS_OLDMIMETYPE
  • PKCS7_NOOLDMIMETYPE

PCNTL

  • SIGINFO

PDO_ODBC

  • PDO_ODBC_TYPE

Posix

  • POSIX_SC_ARG_MAX
  • POSIX_SC_PAGESIZE
  • POSIX_SC_NPROCESSORS_CONF
  • POSIX_SC_NPROCESSORS_ONLN
  • POSIX_PC_LINK_MAX
  • POSIX_PC_MAX_CANON
  • POSIX_PC_MAX_INPUT
  • POSIX_PC_NAME_MAX
  • POSIX_PC_PATH_MAX
  • POSIX_PC_PIPE_BUF
  • POSIX_PC_CHOWN_RESTRICTED
  • POSIX_PC_NO_TRUNC
  • POSIX_PC_ALLOC_SIZE_MIN
  • POSIX_PC_SYMLINK_MAX

Sockets

以下のソケットオプションは、サポートされている場合にのみ定義されます:

  • SO_ATTACH_REUSEPORT_CBPF (Linux)
  • SO_DETACH_BPF (Linux)
  • SO_DETACH_FILTER (Linux)
  • TCP_QUICKACK (Linux)
  • IP_DONTFRAG (FreeBSD)
  • IP_MTU_DISCOVER (Linux)
  • IP_PMTUDISC_DO (Linux)
  • IP_PMTUDISC_DONT (Linux)
  • IP_PMTUDISC_WANT (Linux)
  • IP_PMTUDISC_PROBE (Linux)
  • IP_PMTUDISC_INTERFACE (Linux)
  • IP_PMTUDISC_OMIT (Linux)
  • AF_DIVERT (FreeBSD)
  • SOL_UDPLITE
  • UDPLITE_RECV_CSCOV
  • UDPLITE_SEND_CSCOV
  • SO_RERROR (NetBSD)
  • SO_ZEROIZE (OpenBSD)
  • SO_SPLICE (OpenBSD)
  • TCP_REPAIR (Linux)
  • SO_REUSEPORT_LB (FreeBSD)
  • IP_BIND_ADDRESS_NO_PORT (Linux)

Zip

  • ZipArchive::ER_DATA_LENGTH (libzip >= 1.10)
  • ZipArchive::ER_NOT_ALLOWED (libzip >= 1.10)
  • ZipArchive::AFL_RDONLY (libzip >= 1.10)
  • ZipArchive::AFL_IS_TORRENTZIP (libzip >= 1.10)
  • ZipArchive::AFL_WANT_TORRENTZIP (libzip >= 1.10)
  • ZipArchive::AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE (libzip >= 1.10)
  • ZipArchive::FL_OPEN_FILE_NOW
  • ZipArchive::LENGTH_TO_END (ZipArchive::addFile() と ZipArchive::replaceFile() のデフォルト値)
  • ZipArchive::LENGTH_UNCHECKED (libzip >= 1.10)

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

PHP コア

コールスタックがオーバーフローしそうになっているプログラム

コールスタックがオーバーフローしそうになっているプログラムは、zend.max_allowed_stack_size - zend.reserved_stack_size (ファイバーの場合は fiber.stack_size - zend.reserved_stack_size) バイト以上のスタックを使い切った時点で Error をスローするようになりました。

proc_get_status() を複数回コールする

proc_get_status() を複数回コールした場合、POSIX システムでは常に正しい値を返すようになりました。これより前のバージョンでは、最初の呼び出しの場合にだけ正しい値を返していました。proc_get_status() をコールしたあとに proc_close() を呼び出した場合も、正しい終了コードを返すようになりました。これより前のバージョンでは、-1 を返していました。内部的に、この処理は POSIX システム上で結果の値をキャッシュすることで実現しています。以前の振る舞いを望む場合は、proc_get_status() が返す配列の "cached" キーをチェックすることで、結果がキャッシュされているかを確認できます。

実行時間の最大秒数を制御するタイマー

実行時間の最大秒数を制御するタイマーが、Linux 上で ZTS を有効にしてビルドした場合でもデフォルトで有効になりました。

static プロパティと一緒にトレイトを使う

static プロパティと一緒にトレイトを使うと、親クラスから継承する static プロパティを再宣言するようになりました。つまり、現在のクラスのために別の static プロパティを作成するということです。これは、トレイトを使わずに直接 static プロパティを追加する操作に似ています。

空の配列に負のインデックスを割り当てる

空の配列に負のインデックス $n を割り当てた場合、その次のインデックスは 0 ではなく、必ず $n+1 になります。

クラス定数のアクセス権

クラス定数のアクセス権が、インターフェイスから継承した場合でも正しくチェックされるようになりました。

キーが自分自身を参照している WeakMap のエントリ

WeakMap のエントリには、(おそらく推移的に) キーが自分自身を参照しているものがあります。そのキーが到達できない場合に、循環参照のコレクタがそれを削除できるようになりました。但し、WeakMap をループしている場合を除きます (ループ経由で到達できることは、weak と見なされるためです)。これより前のバージョンでは、こうしたエントリは自動で決して削除されませんでした。

Date

日付・時刻の拡張モジュールでは、DateError と DateException の階層に、拡張モジュール特有の例外とエラーを追加しました。これは、エラー時に警告や汎用の例外を発生させていた動作を置き換えるものです。これらによって、エラーや例外をチェックする必要がなくなり、エラーハンドリングが改善できます。

DOM

親が存在しないノード上で DOMChildNode::after(), DOMChildNode::before(), DOMChildNode::replaceWith() をコールしても、親子関係に関する例外をスローせず、何もしなくなりました。これは DOM の仕様が要求している振る舞いです。

ドキュメントノードが存在しない状態で DOMParentNode と DOMChildNode のメソッドを使うと、DOM_HIERARCHY_REQUEST_ERR DOMException をスローせず、エラーなしで動作するようになりました。これはDOMの仕様が要求している振る舞いです。

prefix を指定せずに DOMDocument::createAttributeNS() をコールすると、デフォルトの名前空間を誤って作成し、その名前空間中に属性ではなく要素を置いていました。PHP 8.3 では、このバグが修正されています。

以前のバージョンでは、DOMDocument::createAttributeNS() は、prefix が既に異なる URI で使われている場合に DOM_NAMESPACE_ERRNAMESPACE_ERR DOMException をスローしていました。 このバージョンからは、prefix の名前が衝突していた場合でも、異なる prefix を正しく選べるようになりました。

新しいメソッドやプロパティが DOM クラスに追加されました。ユーザー定義のクラスがこれらを継承し、メソッドやプロパティを親クラスのものと同じ名前で宣言した場合、それらの宣言には互換性がなければいけません。互換性がない宣言の場合、それを指摘するコンパイルエラーがスローされることになります。新しく実装されたメソッドやプロパティについては、新機能 のセクションと 新しく追加された関数 を参照ください。

FFI

void 型を返すC言語の関数は、object(FFI\CData:void) { } ではなく、null を返すようになりました。

Opcache

INI ディレクティブ opcache.consistency_checks が削除されました。この機能は tracing JIT や、inheritance cache (継承関係をキャッシュする機能) と一緒に使った場合に壊れてしまっていました。その後、このディレクティブを有効にする方法が見つからないまま、PHP 8.1.18 と 8.2.5 で無効にされました。tracing JIT と inheritance cache は両方、スクリプトが永続化された後に共有メモリを変更し、そのチェックサムを無効にする可能性があります。変更されうるポインタをスキップする変更も試みられましたが、複雑過ぎて受け入れられませんでした。以上の理由から、壊れてしまうバグを修正するのではなく、ディレクティブそのものが削除されることになりました。

Phar

Phar クラスの定数が、型宣言するようになりました。

標準ライブラリ

range() 関数に対して、さまざまな変更が加えられました:

  • オブジェクトやリソース、配列を境界の値として渡すと、TypeError がスローされるようになりました。
  • $step に 0 を渡すと、よりわかりやすい ValueError がスローされるようになりました。
  • 範囲が増加しているのに、$step に負の値を渡すと、ValueError がスローされるようになりました。
  • $step が整数型として解釈できる float の場合、整数型として解釈するようになりました。
  • 引数のいずれかが無限大または NAN の場合、ValueError がスローされるようになりました。
  • $start や $end が空文字列の場合、E_WARNING が発生するようになりました。値そのものが 0 にキャストされる動作は変更されていません。
  • $start や $end が1バイトより長い場合、E_WARNING が発生するようになりました。但し、それが数値形式の文字列でない場合に限ります。
  • $start や $end が整数型にキャストした値の場合、E_WARNING が発生するようになりました。なぜなら、他の境界の入力値は数値だからです。(例: range(5, 'z');)
  • $step が float の場合で、ある範囲の文字を生成しようとした場合、E_WARNING が発生するようになりました。但し、境界の値がともに数値形式の文字列の場合を除きます。(例: range('5', '9', 0.5); のようなコードは、警告が発生しません)
  • range() 関数は、境界の値の一方が数字の場合、もう片方の境界の値を整数にキャストせず、文字のリストを生成するようになりました。(例: range('9', 'A');).
<?php
range('9', 'A'); // PHP 8.3.0 以降は、["9", ":", ";", "<", "=", ">", "?", "@", "A"]
range('9', 'A'); // PHP 8.3.0 より前は、[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
?>

number_format() は、負の $decimals の値を小数点以下 $num 桁から abs($decimals) 桁に丸めるようになりました。 これより前のバージョンでは、負の $decimals は黙って無視されていました。

file() 関数の flags パラメータは、すべての不正な値をチェックするようになりました。注意すべきなのは、これより前のバージョンでは FILE_APPEND を黙って受け入れていましたが、このバージョンから受け入れなくなったことです。

SNMP

SNMP クラスの定数が、型宣言するようになりました。

User Contributed Notes

There are no user contributed notes for this page.


PHP 8.3.x で推奨されなくなる機能

PHP コア

加算子/減算子 に対する変更

空文字列や、数値形式でない文字列、そして英数字でない文字列に対して、加算子 (++) を使うことは推奨されなくなりました。さらに、数値形式でない文字列に 加算子 を使うことも、soft-deprecated 扱いになりました。つまり、E_DEPRECATED は発生しないものの、新しいコードではこの機能を使うべきではないということです。新しい str_increment() 関数を代わりに使いましょう。

空文字列や数値形式でない文字列に対して、減算子 (--) を使うことは推奨されなくなりました。

引数を渡さずに get_class()/get_parent_class() をコールする

get_class() と get_parent_class() を、引数を渡さずにコールすることは、推奨されなくなりました。

DBA

$dba を第3引数に渡して dba_fetch() をコールすることは、推奨されなくなりました。

FFI

FFI::cast(), FFI::new(), FFI::type() を static メソッドとしてコールすることは、推奨されなくなりました。

国際化関数

定数 U_MULTIPLE_DECIMAL_SEP*E*RATORS は、推奨されなくなりました。代わりに U_MULTIPLE_DECIMAL_SEP*A*RATORS を使いましょう。

定数 NumberFormatter::TYPE_CURRENCY は、推奨されなくなりました。

LDAP

ldap_connect() に、$hostname と $port を別々に渡してコールすることは、推奨されなくなりました。

マルチバイト文字列

mb_strimwidth() に負の $width を渡すことは、推奨されなくなりました。

Phar

resource と $length を渡して Phar::setStub() をコールすることは、推奨されなくなりました。$phar->setStub(stream_get_contents($resource)); に置き換えるべきです。

Random

メルセンヌ・ツイスタ の動作モード MT_RAND_PHP は、推奨されなくなりました。

リフレクション

ReflectionProperty::setValue() にひとつだけ引数を渡してコールすることは、推奨されなくなりました。static プロパティを設定するには、最初の引数に null を渡します。

標準ライブラリ

assert_options() 関数は、推奨されなくなりました。

定数 ASSERT_ACTIVE, ASSERT_BAIL, ASSERT_CALLBACK, ASSERT_EXCEPTION, ASSERT_WARNING は、推奨されなくなりました。

INI 設定 assert.* は、推奨されなくなりました。詳細は INI ファイルの扱いの変更 を参照ください。

SQLite3

例外を使うことが推奨されるようになりました。警告は将来のバージョンで削除されます。SQLite3::enableExceptions(false) をコールすると、このバージョンでは推奨されない警告が発生します。

Zip

定数 ZipArchive::FL_RECOMPRESS は、推奨されなくなりました。将来の libzip のバージョンで削除されます。

User Contributed Notes

There are no user contributed notes for this page.


その他の変更

PHP コア

FFI

opcache.preload_user が現在のシステムユーザーに設定されている場合、事前ロードの間に FFI::load() をコールできるようになりました。これより前のバージョンでは、opcache.preload_user が設定されている場合は、事前ロードの間に FFI::load() を呼び出せませんでした。

FPM

ソケットのパスの長さが OS がサポートする長さ以上の場合、FPM CLI のテストが失敗するようになりました。

Opcache

CLI SAPI と phpdbg SAPI では、opcache.preload_user ディレクティブを設定しなくても root として事前ロードを実行できるようになりました。これら以外の SAPI では、root として事前ロードを実行する際に このディレクティブの設定が未だ必須です。なぜなら、SAPI が特権を持っていないユーザに移行する前に事前ロードが実行されるからです。

Streams

ソケット接続をブロックする fread() 関数は、バッファリングされているデータが存在した場合、追加のデータを待つのではなく、すぐに値を返すようになりました。

seek のオフセットが終端を超えた場合でも、memory ストリームは失敗しなくなりました。代わりに、次回書き込まれたときにメモリサイズが増加し、以前の終端からオフセットまでの間は、ファイルを扱っているときのようにゼロバイトで埋められます。

stat() のファイルアクセス操作が、file_exists() 類似の関数と同様に、ストリームのパスではなく、実在のパスを使うようになりました。これはストリームをオープンするときの振る舞いと一致します。

SAPI モジュールへの変更

CLI

STDOUT, STDERR, STDIN ストリームは、リソースが破棄される際にクローズされなくなりました。リソースが破棄されるタイミングでは CLI がほぼ終了しているからです。但し、fclose() やその類似の関数を使い、これらのストリームを明示的に閉じることは未だできます。

変更された関数

PHP コア

gc_status() に、以下の8つのフィールドが追加されました:

  • "running" => bool
  • "protected" => bool
  • "full" => bool
  • "buffer_size" => int
  • "application_time" => float: gc の合計の実行時間を秒単位で示します(collector_time を含みます)
  • "collector_time" => float: 循環参照を回収するのに使った時間を秒単位で示します(dessructor_time と free_time を含みます)
  • "destructor_time" => float: 循環参照を回収している間に、デストラクタを実行した時間を秒単位で示します
  • "free_time" => float: 循環参照を回収している間に、メモリを開放するのにかかった時間を秒単位で示します

class_alias() は、内部クラスのエイリアスを作成する操作もサポートしました。

ini_set('open_basedir', ...); を実行して実行時に open_basedir を設定する場合、親ディレクトリ (..) を含んだパスを受け入れなくなりました。これより前のバージョンでは、.. で始まるパスだけを拒否していました。.. で始まるパスのみを拒否する制限は、パスの先頭に ./ を付加することで簡単に回避できてしまっていました。

ユーザー定義の例外ハンドラは、シャットダウン時の例外もキャッチするようになりました。

highlight_string() と highlight_file() の結果として出力されるHTMLが、変更されました。外側のHTMLタグの間にあるホワイトスペースは削除されます。改行とスペースはHTMLエンティティに変換されなくなりました。HTML全体を <pre> タグで囲むようになっています。外側の <span> タグは <code> タグに統合されました。

Calendar

easter_date() は、64ビットシステム上で 1970 から 2,000,000,000 までの年の値をサポートしました。これより前のバージョンでは、1970 から 2037 までの年の値だけをサポートしていました。

Curl

curl_getinfo() は、新しく2つの定数をサポートしました: CURLINFO_CAPATH と CURLINFO_CAINFO です。$option が null の場合、以下の追加のキーが含まれるようになります: "capath", "cainfo"

DOM

DOMCharacterData::appendData() の仮の戻り値の型が、true に変更されました。

DOMDocument::loadHTML(), DOMDocument::loadHTMLFile(), DOMDocument::loadXML() の仮の戻り値の型が、bool になりました。これより前のバージョンでは、DOMDocument|bool を返すとドキュメントに記されていましたが、PHP 8.0 以降は static にコールできなかったため、 DOMDocument が返せていませんでした。

Gd

imagerotate() 関数のシグネチャが変更され、$ignore_transparent パラメータが削除されました。このパラメータは PHP 5.5.0 以降、無視されていたためです。

国際化関数

datefmt_set_timezone() (とそのエイリアス IntlDateformatter::setTimeZone()) は、成功時に true を返すようになりました。これより前のバージョンでは、null を返していました。

IntlBreakiterator::setText() は、失敗時に false を返すようになりました。これより前のバージョンでは、null を返していました。 また、成功時に true を返すようになりました。これより前のバージョンでは、null を返していました。

IntlChar::enumCharNames() は、戻り値として boolean を返すようになりました。これより前のバージョンでは、成功時に null、失敗時に false を返していました。

IntlDateFormatter::__construct() は、無効なロケールを設定した場合に U_ILLEGAL_ARGUMENT_ERROR 例外をスローするようになりました。

マルチバイト文字列

mb_strtolower() と mb_convert_case() は、ギリシャ文字シグマの条件付きケース変換規則を実装しました。mb_convert_case() では、条件付きケース変換は MB_CASE_LOWER と MB_CASE_TITLE モードにのみ適用され、MB_CASE_LOWER_SIMPLE と MB_CASE_TITLE_SIMPLE には適用されません。

mb_decode_mimeheader() は、RFC 2047 で要求された通りに、Qprint でエンコードされた単語のアンダースコアを解釈するようになりました。つまり、それらはスペースに変換されます。このようにMIMEエンコードされた単語では、アンダースコアは "=5F" としてエンコードしなければいけません。

mb_encode_mimeheader() の実装が変更され、レアケースではあるものの、PHP 8.2 で生の ASCII として渡されていた入力文字列が、transfer_encoding の値でエンコードされる場合があります。

mb_encode_mimeheader() は、入力文字列が Qprint エンコーディングの場合に、NUL(ゼロ)バイトを削除しなくなりました。これより前のバージョンでは、あるテキストエンコーディングの場合(特に UTF-16 と UTF-32) に NUL バイトが削除され、mb_encode_mimeheader の結果が壊れる場合がありました。

mb_detect_encoding() の "$strict に true を指定しない" モードが、ドキュメントの通りに振る舞うようになりました。これより前のバージョンでは、入力文字列と同一のバイト(たとえば、最初のバイト) が、候補となるエンコーディングのリスト全てに対して不正と判定された場合でも、false を返していました。もっと一般化すると、不正なバイトが見つかった時点で、候補となるエンコーディングから削除してしまっていました。そして、入力と同一のバイトを削除した場合に、残りのエンコーディングをすべて候補として考慮すべき場合でも、false を返していました。一方で、候補となるエンコーディングが削除されて残りがひとつだけになった場合、文字列中で後にどれくらいエンコーディングのエラーが見つかるのかを考慮することなく、その残ったエンコーディングを返していました。この振る舞いは、ドキュメントの以下の説明と一致しません: "strict が false の場合、 もっとも近いと判定された文字エンコーディングが返されます"

mysqli

mysqli_fetch_object() は、$constructor_args が空でないのに、クラスにコンストラクタが存在しない場合、 Exception ではなく ValueError を発生させるようになりました。

mysqli_poll() は、$read と $error が両方渡されない場合、ValueError を発生させるようになりました。

mysqli_field_seek() と mysqli_result::field_seek() の戻り値の型が、bool ではなく true に変更されました。

ODBC

odbc_autocommit()は、$enable パラメータで null を受け入れるようになりました。null を渡すと、パラメータをひとつ渡した場合と同じ振る舞いをします。つまり、自動コミットが有効かどうかだけを示す動きをします。

PostgreSQL

pg_fetch_object() は、$constructor_args が空でないのに、クラスにコンストラクタが存在しない場合、Exception ではなく ValueError を発生させるようになりました。

pg_insert() は、指定されたテーブルが無効な場合に、E_WARNING ではなく ValueError を発生させるようになりました。

pg_insert() と pg_convert() は、フィールドの値/タイプ が PostgreSQL の型と一致しない場合に、E_WARNING ではなく ValueError または TypeError を発生させるようになりました。

pg_fetch_result(), pg_field_prtlen(), pg_field_is_null() のパラメータ $row は、nullable になりました。

Random

mt_srand() と srand() は、ランダムなシードを使うかを決めるために、引数の数をチェックしなくなりました。null を渡すとランダムなシードを生成します。0 を渡すとゼロをシードとして使います。これらの関数の振る舞いは、Random\Engine\Mt19937::__construct() と一貫したものになりました。

リフレクション

ReflectionClass::getStaticProperties() の戻り値の型は、nullable ではなくなりました。

標準ライブラリ

unserialize() で発生していた E_NOTICE は、E_WARNING に変更されました。

処理されていない入力が残っている場合に、unserialize() は新たに E_WARNING を発生させるようになりました。

array_pad() は、配列が持つことができる最大の要素数だけを制限するようになりました。これより前のバージョンでは、一度に追加できる最大の要素数が 1048576 になっていました。

strtok() は、トークンの分割を開始した際にトークンが与えられていない場合、E_WARNING を発生させるようになりました。

password_hash() は、ソルトの生成が失敗した場合に、ValueError の $previous (直前にスローされた例外) として、既に存在する Random\RandomException をチェインさせるようになりました。

proc_open() の $command に配列を指定する場合、空でない要素を少なくともひとつ含んでいることが必須になりました。そうでない場合、ValueError がスローされます。

proc_open() の $command に配列を指定する場合、かつそれが不正なコマンドの場合に、後に警告が発生するリソースではなく false を返すようになりました。Windows では既にそのように動作していましたが、posix_spawn を使っている場合(ほとんどのプラットフォーム Linux, BSD, MacOS) でも同様の振る舞いをするようになりました。ただ、posix_spawn をサポートしていないために、以前の振る舞いが変更されていない古いプラットフォームもまだ残っています。

array_sum() と array_product() は、配列に含まれる値が int/float に変換できない場合、警告を発生させるようになりました。これより前のバージョンでは、配列とオブジェクトは無視され、それら以外の値は int にキャストされていました。さらに、数値へのキャストを定義しているオブジェクト (例: GMP) は、無視されるのではなく、数値に変換されるようになっています。

number_format() の $decimals パラメータは、負の整数値の四捨五入も扱うようになりました。つまり、$decimals が負の値の場合、$num は 小数点以下の有効桁数 $decimals 桁に丸められます。これより前のバージョンでは、負の $decimals を指定しても、黙って無視され、数値は小数点以下が0桁になるように丸められていました。

strrchr() に $before_needle が追加されました。これは strstr() や stristr() の対応するパラメータと、似た振る舞いをします。

str_getcsv() と fgetcsv() は、最後のフィールドに終端されていないクォートだけが含まれている場合、null バイトの文字列をひとつ返すのではなく、空文字列を返すようになりました。

拡張モジュールへのその他の変更

PHP コア

bool 型の値に対して、加算子/減算子 (++/--) を使うと、警告が発生するようになりました。現状、この操作にはなんの意味もありませんが、将来的に $bool += 1 のような振る舞いをするようになるからです。

null 型の値に対して、減算子 (--) を使うと、警告が発生するようになりました。現状、この操作にはなんの意味もありませんが、将来的に $null -= 1 のような振る舞いをするようになるからです。

内部オブジェクトで、_IS_NUMBER キャストを実装しているものの、加算と減算の振る舞いを上書きする do_operator ハンドラを実装していない場合があります。この場合でも、$o += 1 や $o -= 1 をあたかも実行したかのように、値をインクリメント / デクリメントできるようになりました。

DOM

DOM の寿命を管理する仕組みが書き直され、暗黙のうちに削除されていたノードが取得できるようになりました。これより前のバージョンでは、削除されていたノードを取得しようとすると例外が発生していました。

SQLite3

SQLite3 クラスは、Exception ではなく、(Exception を継承した) SQLite3Exception をスローするようになりました。

SQLite のエラーコードは、エラーメッセージに含められるのではなく、例外に渡されるようになりました。

INI ファイルの扱いの変更

  • assert.* INI 設定は、推奨されなくなりました。 以下の INI 設定が該当します:

    • assert.active
    • assert.bail
    • assert.callback
    • assert.exception
    • assert.warning
    これらの設定値がデフォルト値の場合、推奨されない警告は発生しません。zend.assertions を代わりに使うべきです。

  • zend.max_allowed_stack_size は、許可される最大のスタックサイズの値を設定するための、新しい INI ディレクティブです。設定できる値は、0 (プロセスやスレッドの、スタックサイズの最大値を用います)、-1 (無制限)、そしてバイト単位の正の数値です。デフォルトは 0 です。プロセスやスレッドのスタックサイズの最大値がわからない場合、既知のシステムのデフォルト値を使います。この値に大き過ぎる値を設定すると、スタックサイズの制限を無効にすることと同じ効果があります。ファイバーは 許可される最大のスタックサイズとして fiber.stack_size の値を使います。プロセスのコールスタックが `zend.max_allowed_stack_size - zend.reserved_stack_size` バイトを超えると、スタックオーバーフローが引き起こすセグメンテーションフォルトを防ぐため、Error がスローされます。これは、デバッグを容易にすることが目的です。スタックサイズは、制御されていない再帰処理によって増加します。増加する範囲は、内部関数やマジックメソッド __toString(), __clone(), __sleep(), __destruct() 内も含みます。この機能はスタックバッファのオーバーフローとは無関係ですし、セキュリティのための機能でもありません。

  • zend.reserved_stack_size は、予約済みのスタックサイズをバイト単位で設定するための、新しい INI ディレクティブです。許可されたスタックサイズの最大値から、この値がバッファとして引かれ、スタックサイズがチェックされます。

パフォーマンスに関わる変更

DOM

DOMNodeList をループさせた場合、キャッシュを使うようになりました。よって、ノードをリクエストする処理に、デフォルトで O(n^2) 時間かかることはなくなりました。

ノードからテキストを取得する際に、メモリを確保する処理を避けるようになりました。この結果、パフォーマンスが向上しています。

DOMChildNode::remove() は、計算量が O(1) で実行されるようになりました。

標準ライブラリ

file() 関数の flags パラメータのエラーチェックは、約7% 高速になりました。

Standard PHP Library(SPL)

RecursiveDirectoryIterator を使ってディレクトリをループする場合の、I/O が削減されました。

User Contributed Notes

There are no user contributed notes for this page.


Windows のサポート

PHP コア

PHP の実行をサポートする Windows の最低バージョンが、Windows 8 と Windows Server 2012 になりました。

User Contributed Notes

There are no user contributed notes for this page.


PHP 8.1.x から PHP 8.2.x への移行

目次

  • 新機能
  • 新しく追加された関数
  • 新しいグローバル定数
  • 下位互換性のない変更点
  • PHP 8.2.x で推奨されなくなる機能
  • その他の変更
  • Windows のサポート

この新しいマイナーバージョンには、 たくさんの 新機能 と 互換性のない変更 がいくつかあります。 実運用環境の PHP をこのバージョンにあげる前に、 これらの変更を必ずテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.1.x, 7.2.x, 7.3.x, 7.4.x, 8.0.x, 8.1.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

PHP コア

SensitiveParameter アトリビュート

バックトレースから機密情報を削除するためのアトリビュートとして、 #[\SensitiveParameter] が追加されました。

error_log_mode INI ディレクティブ

エラーログファイルに対してパーミッションを設定できる INI ディレクティブとして、 error_log_mode が追加されました。

定数式の中で、列挙型のプロパティを取得

定数式の中で、列挙型 のプロパティを取得できるようになりました。

型システムの改善

null と false が独立した型として使えるようになりました。

true 型が追加されました。

交差型 と union型 が組み合わせて使えるようになりました。 その場合、型は DNF として記す必要があります。

トレイトで定数

トレイトの中で、定数を定義できるようになりました。

読み取り専用クラス

クラスに対して readonly を指定する機能 がサポートされました。

cURL

CURLINFO_EFFECTIVE_METHOD オプションが追加されました。 これは、curl_getinfo() の戻り値として、 有効な HTTP メソッドの値を返します。

libcurl 7.62 から 7.80 までに追加された、 新しい複数の定数 が使えるようになりました。

接続を維持するためのチェックを行う関数として、 curl_upkeep() が追加されました。

DBA

データベースファイルを作成する際にサブディレクトリを作るかどうかを決めるフラグとして、 DBA_LMDB_USE_SUB_DIR と DBA_LMDB_NO_SUB_DIR が追加されました。 これらは、LMDB ドライバで使えます。

OCI8

oci8.prefetch_lob_size INI ディレクティブと、 oci_set_prefetch_lob() が追加されました。 これらを使うと、LOB(ラージオブジェクト) を取得する際に、PHP と Oracle Database 間の通信回数を削減することで、 LOB への問い合わせのパフォーマンスチューニングを行うことができます。

OpenSSL

chacha20-poly1305 向けに AEAD のサポートが追加されました。

ODBC

新しい関数 odbc_connection_string_is_quoted(), odbc_connection_string_should_quote(), odbc_connection_string_quote() が追加されました。 これらは主に、ODBC や PDO_ODBC 拡張モジュールの裏側で使われるものです。 ただ、ユニットテストを容易にしたり、 ユーザーアプリケーションやライブラリ自体がクォートを行えるようにする目的で、 ユーザーが使える関数として公開されています。

PCRE

修飾子 n (NO_AUTO_CAPTURE) のサポートが追加されました。 これを使うと、単純な (xyz) 形式でのグループ化ではキャプチャを行いません。 (?<name>xyz) のような、名前付きのグループ化を使う場合にのみ、 キャプチャを行うようになります。 これによって影響を受けるのは、どのグループがキャプチャされるかだけです。 番号付きのサブパターンによる参照もまだ使えますし、 その場合マッチ結果が格納される配列には数値が含まれています。

Random 拡張モジュール

乱数生成器に関連する既存の実装を整理し、統合する新しい拡張モジュールが追加されました。 新しく、かつ優れた乱数生成器が使えるようになり、スコープの問題も解消されています。

User Contributed Notes

There are no user contributed notes for this page.


新しく追加された関数

cURL

  • curl_upkeep()

IMAP

  • imap_is_open() (PHP 8.2.1 以降)

MySQLi

  • mysqli_execute_query()

ODBC

  • odbc_connection_string_is_quoted()
  • odbc_connection_string_should_quote()
  • odbc_connection_string_quote()

OpenSSL

  • openssl_cipher_key_length()

Reflection

  • ReflectionFunction::isAnonymous()
  • ReflectionMethod::hasPrototype()

Sodium

XChaCha20

  • sodium_crypto_stream_xchacha20_xor_ic()

標準ライブラリ

  • memory_reset_peak_usage()
  • ini_parse_quantity()

XML

  • libxml_get_external_entity_loader()

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

COM

  • DISP_E_PARAMNOTFOUND
  • LOCALE_NEUTRAL

cURL

  • CURLALTSVC_H1 (libcurl >= 7.64.1)
  • CURLALTSVC_H2 (libcurl >= 7.64.1)
  • CURLALTSVC_H3 (libcurl >= 7.64.1)
  • CURLALTSVC_READONLYFILE (libcurl >= 7.64.1)
  • CURLAUTH_AWS_SIGV4 (libcurl >= 7.75.0)
  • CURLE_PROXY (libcurl >= 7.73.0)
  • CURLFTPMETHOD_DEFAULT
  • CURLHSTS_ENABLE (libcurl >= 7.74.0)
  • CURLHSTS_READONLYFILE (libcurl >= 7.74.0)
  • CURLINFO_PROXY_ERROR (libcurl >= 7.73.0)
  • CURLINFO_REFERER (libcurl >= 7.76.0)
  • CURLINFO_RETRY_AFTER (libcurl >= 7.66.0)
  • CURLMOPT_MAX_CONCURRENT_STREAMS (libcurl >= 7.67.0)
  • CURLOPT_ALTSVC_CTRL (libcurl >= 7.64.1)
  • CURLOPT_ALTSVC (libcurl >= 7.64.1)
  • CURLOPT_AWS_SIGV4 (libcurl >= 7.75.0)
  • CURLOPT_CAINFO_BLOB (libcurl >= 7.77.0)
  • CURLOPT_DOH_SSL_VERIFYHOST (libcurl >= 7.76.0)
  • CURLOPT_DOH_SSL_VERIFYPEER (libcurl >= 7.76.0)
  • CURLOPT_DOH_SSL_VERIFYSTATUS (libcurl >= 7.76.0)
  • CURLOPT_HSTS_CTRL (libcurl >= 7.74.0)
  • CURLOPT_HSTS (libcurl >= 7.74.0)
  • CURLOPT_MAIL_RCPT_ALLLOWFAILS (libcurl >= 7.69.0)
  • CURLOPT_MAXAGE_CONN (libcurl >= 7.65.0)
  • CURLOPT_MAXFILESIZE_LARGE
  • CURLOPT_MAXLIFETIME_CONN (libcurl >= 7.80.0)
  • CURLOPT_PROXY_CAINFO_BLOB (libcurl >= 7.77.0)
  • CURLOPT_SASL_AUTHZID (libcurl >= 7.66.0)
  • CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 (libcurl >= 7.80.0)
  • CURLOPT_SSL_EC_CURVES (libcurl >= 7.73.0)
  • CURLOPT_UPKEEP_INTERVAL_MS (libcurl >= 7.62.0)
  • CURLOPT_UPLOAD_BUFFERSIZE (libcurl >= 7.62.0)
  • CURLOPT_XFERINFOFUNCTION (libcurl >= 7.32.0)
  • CURLPROTO_MQTT (libcurl >= 7.71.0)
  • CURLPX_BAD_ADDRESS_TYPE (libcurl >= 7.73.0)
  • CURLPX_BAD_VERSION (libcurl >= 7.73.0)
  • CURLPX_CLOSED (libcurl >= 7.73.0)
  • CURLPX_GSSAPI (libcurl >= 7.73.0)
  • CURLPX_GSSAPI_PERMSG (libcurl >= 7.73.0)
  • CURLPX_GSSAPI_PROTECTION (libcurl >= 7.73.0)
  • CURLPX_IDENTD_DIFFER (libcurl >= 7.73.0)
  • CURLPX_IDENTD (libcurl >= 7.73.0)
  • CURLPX_LONG_HOSTNAME (libcurl >= 7.73.0)
  • CURLPX_LONG_PASSWD (libcurl >= 7.73.0)
  • CURLPX_LONG_USER (libcurl >= 7.73.0)
  • CURLPX_NO_AUTH (libcurl >= 7.73.0)
  • CURLPX_OK (libcurl >= 7.73.0)
  • CURLPX_RECV_ADDRESS (libcurl >= 7.73.0)
  • CURLPX_RECV_AUTH (libcurl >= 7.73.0)
  • CURLPX_RECV_CONNECT (libcurl >= 7.73.0)
  • CURLPX_RECV_REQACK (libcurl >= 7.73.0)
  • CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED (libcurl >= 7.73.0)
  • CURLPX_REPLY_COMMAND_NOT_SUPPORTED (libcurl >= 7.73.0)
  • CURLPX_REPLY_CONNECTION_REFUSED (libcurl >= 7.73.0)
  • CURLPX_REPLY_GENERAL_SERVER_FAILURE (libcurl >= 7.73.0)
  • CURLPX_REPLY_HOST_UNREACHABLE (libcurl >= 7.73.0)
  • CURLPX_REPLY_NETWORK_UNREACHABLE (libcurl >= 7.73.0)
  • CURLPX_REPLY_NOT_ALLOWED (libcurl >= 7.73.0)
  • CURLPX_REPLY_TTL_EXPIRED (libcurl >= 7.73.0)
  • CURLPX_REPLY_UNASSIGNED (libcurl >= 7.73.0)
  • CURLPX_REQUEST_FAILED (libcurl >= 7.73.0)
  • CURLPX_RESOLVE_HOST (libcurl >= 7.73.0)
  • CURLPX_SEND_AUTH (libcurl >= 7.73.0)
  • CURLPX_SEND_CONNECT (libcurl >= 7.73.0)
  • CURLPX_SEND_REQUEST (libcurl >= 7.73.0)
  • CURLPX_UNKNOWN_FAIL (libcurl >= 7.73.0)
  • CURLPX_UNKNOWN_MODE (libcurl >= 7.73.0)
  • CURLPX_USER_REJECTED (libcurl >= 7.73.0)
  • CURLSSLOPT_AUTO_CLIENT_CERT (libcurl >= 7.77.0)
  • CURLSSLOPT_NATIVE_CA (libcurl >= 7.71.0)
  • CURLSSLOPT_NO_PARTIALCHAIN (libcurl >= 7.68.0)
  • CURLSSLOPT_REVOKE_BEST_EFFORT (libcurl >= 7.70.0)
  • CURL_VERSION_GSASL (libcurl >= 7.76.0)
  • CURL_VERSION_HSTS (libcurl >= 7.74.0)
  • CURL_VERSION_HTTP3 (libcurl >= 7.66.0)
  • CURL_VERSION_UNICODE (libcurl >= 7.72.0)
  • CURL_VERSION_ZSTD (libcurl >= 7.72.0)

DBA

  • DBA_LMDB_USE_SUB_DIR
  • DBA_LMDB_NO_SUB_DIR

Filter

  • FILTER_FLAG_GLOBAL_RANGE

Sockets

以下のソケットオプションは、サポートされている場合にのみ定義されます:

  • SO_INCOMING_CPU
  • SO_MEMINFO
  • SO_RTABLE (OpenBSD)
  • TCP_KEEPALIVE (MacOS)
  • TCP_KEEPCNT (Linux, others)
  • TCP_KEEPIDLE (Linux, others)
  • TCP_KEEPINTVL (Linux, others)
  • TCP_NOTSENT_LOWAT
  • LOCAL_CREDS_PERSISTENT (FreeBSD)
  • SCM_CREDS2 (FreeBSD)
  • LOCAL_CREDS (NetBSD)
  • SO_BPF_EXTENSIONS
  • SO_SETFIB
  • TCP_CONGESTION (Linux, FreeBSD)
  • SO_ZEROCOPY (Linux)
  • MSG_ZEROCOPY (Linux)

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

Date

DateTime::createFromImmutable() の仮の戻り値の型が、 static になりました。 これより前のバージョンでは、DateTime でした。

DateTimeImmutable::createFromMutable() の仮の戻り値の型が、 static になりました。 これより前のバージョンでは、DateTimeImmutable でした。

相対的な書式 の number シンボルは、複数の符号を受け入れなくなりました。 たとえば、+-2 のようなフォーマットです。

ODBC

ODBC 拡張モジュールは、ユーザー名/パスワードと接続文字列が両方渡された場合に、 ユーザー名とパスワードをエスケープするようになりました。そして、 エスケープ済みのものを接続文字列と結合することが必須になりました。 これより前のバージョンでは、 エスケープする必要がある値が含まれたユーザー指定の文字列によって、悪意ある接続文字列を生成される可能性がありました。 また、ユーザー指定の文字列を値に注入されてしまう可能性もありました。 このエスケープのルールは .NET BCL の DbConnectionOptions の振る舞いと同じです。

PDO_ODBC

PDO_ODBC 拡張モジュールは、接続文字列を渡した場合にユーザー名とパスワードをエスケープするようになりました。 詳細は ODBC の変更点 を参照ください。

標準ライブラリ

glob() は、 すべてのパスが open_basedir によって制限されている場合に、 空の配列を返すようになりました。 これより前のバージョンでは、false を返していました。 さらに、パスの一部が open_basedir によって制限されている場合でも、 警告が発生するようになっています。

FilesystemIterator::__construct() を使うと、 以前のバージョンでは FilesystemIterator::SKIP_DOTS が常に設定され、削除できませんでしたが、この振る舞いはなくなりました。 以前の振る舞いを維持するには、 flags パラメータを使ってその定数を明示的に常に設定しなければいけません。 flags パラメータのデフォルト値は変更されていません。

strtolower(),
strtoupper(),
stristr(),
stripos(),
strripos(),
lcfirst(),
ucfirst(),
ucwords(),
str_ireplace() は、ロケールに依存しなくなりました。
これらは、ロケールが "C" であったかのように ASCII のケース変換を行います。
これらの関数のロケール対応版は、マルチバイト文字列 関数で使えます。
さらに、array_change_key_case() 関数を使った場合や、
SORT_FLAG_CASE を使ってソートを行った場合も、ASCII のケース変換を行います。

str_split() は、空文字列を渡した場合に、空の配列を返すようになりました。 これより前のバージョンでは、空文字列の要素が一つ入った配列を返していました。 mb_str_split() は、既に空の配列を返しているため、影響を受けません。

ksort() と krsort() は、 SORT_REGULAR を使って数値文字列の比較を行う際に、 PHP 8 で標準になっているルールを使うようになりました。

var_export() は、クラス名をエクスポートする際、 先頭のバックスラッシュを省略しなくなりました。 つまり、エクスポートされるクラス名は完全修飾名になりました。

Standard PHP Library (SPL)

以下のメソッドは、シグネチャを強制するようになりました:

  • SplFileInfo::_bad_state_ex()
  • SplFileObject::getCsvControl()
  • SplFileObject::fflush()
  • SplFileObject::ftell()
  • SplFileObject::fgetc()
  • SplFileObject::fpassthru()

SplFileObject::hasChildren() の仮の戻り値の型が、 false になりました。 これより前のバージョンでは、bool でした。

SplFileObject::getChildren() の仮の戻り値の型が、 null になりました。 これより前のバージョンでは、?RecursiveIterator でした。

GlobIterator は、 すべてのパスが open_basedir によって制限されている場合に、 空の配列を返すようになりました。 これより前のバージョンでは、false を返していました。 さらに、パスの一部が open_basedir によって制限されている場合でも、 警告が発生するようになっています。

User Contributed Notes

There are no user contributed notes for this page.


PHP 8.2.x で推奨されなくなる機能

PHP コア

動的なプロパティの利用

クラスにアトリビュート #[\AllowDynamicProperties] を付加していない場合、 動的にプロパティを生成することは推奨されなくなりました。 stdClass で動的なプロパティを使うことはまだ許可されています。 マジックメソッド __get() / __set() を使う場合は、この変更の影響は受けません。 動的なプロパティによる非推奨の警告については、以下によって対応できます:

  • プロパティを宣言する (好ましい対応方法です)
  • クラスにアトリビュート #[\AllowDynamicProperties] を付加する (すべての子クラスにも適用されます)
  • 追加のデータをオブジェクトと関連付ける必要があるが、 そのオブジェクトがデータを所有していない場合、 WeakMap を使う

部分的にしかサポートされていない callable

$callable() 形式で呼び出せない (但し、call_user_func() を使うと呼び出せる) callable は、推奨されなくなりました。 特に注意すべきなのは以下です:

  • "self::method"
  • "parent::method"
  • "static::method"
  • ["self", "method"]
  • ["parent", "method"]
  • ["static", "method"]
  • ["Foo", "Bar::method"]
  • [new Foo, "Bar::method"]
この変更は、 "A::method" や ["A", "method"] のような通常のメソッド呼び出し形式の callable には影響しません。

"${var}" / "${expr}" 形式の、文字列への値の埋め込み

"${var}" と "${expr}" 形式の文字列への値の埋め込みは、推奨されなくなりました。 "$var"/"{$var}" や "{${expr}}" 形式をそれぞれ使ってください。

マルチバイト文字列

'テキストエンコーディング' QPrint, Base64, Uuencode, HTML-ENTITIES を使うことは、 全ての mbstring の関数で推奨されなくなりました。 mbstring でサポートされている他のテキストエンコーディングと異なり、 これらは Unicode のコードポイント列でエンコードされておらず、 生のバイト列でエンコードされています。 これらのテキストエンコーディングが指定された場合、 ほとんどの mbstring 関数では、何が正しい戻り値なのか明確でありません。 さらに、これらのエンコーディングについてはすべて、PHP には別の組み込みの実装が存在します。 たとえば、UUencode されたデータについては、 convert_uuencode() / convert_uudecode() が使えます。

Standard PHP Library(SPL)

内部メソッド SplFileInfo::_bad_state_ex() は、推奨されなくなりました。

標準ライブラリ

utf8_encode() と utf8_decode() は、推奨されなくなりました。

User Contributed Notes

There are no user contributed notes for this page.


その他の変更

PHP コア

iterable 型は、コンパイル時に組み込みで array|Traversable のエイリアスと見なされるようになりました。 よって、iterable に関連するエラーメッセージは、 array|Traversable のものが使われるようになります。 型のリフレクションは、単一の iterable (および ?iterable) については iterable という名前が付いた ReflectionNamedType を生成しますが、 union 型の中で iterable を使った場合、 array|Traversable に変換されます。

送信される Cookie の日付フォーマットが 'D, d M Y H:i:s \G\M\T' になりました。 これより前のバージョンでは 'D, d-M-Y H:i:s T' でした。

SAPI モジュールへの変更

CLI

STDOUT, STDERR, STDIN ストリームは、リソースが破棄される時にクローズされなくなりました。 これらのクローズは、ほとんどの場合 CLI が終了する際に行われます。 しかし、fclose() や類似の関数を使うことで、これらのストリームを明示的に閉じることはできます。

変更された関数

PHP コア

バイナリセーフな文字列比較を行う strcmp(), strcasecmp(), strncmp(), strncasecmp(), substr_compare() は、 比較対象の文字列の長さが等しくないときに strlen($string1) - strlen($string2) を返すことが保証されなくなり、 -1 や 1 を返すようになりました。 返される具体的な値に依存する代わりに、これらの関数の戻り値は 0 と比較すべきです。

DBA

dba_open() と dba_popen() は、以下のシグネチャを強制するようになりました:

dba_open(
string $path,
string $mode,
?string $handler = null,
int $permission = 0644,
int $map_size = 0,
?int $flags = null
): resource|false

dba_fetch() のオプションの skip 引数は、 PHP でユーザーが使える関数のセマンティクスに従い、最後に置かれるようになりました。 シグネチャは以下になります:

dba_fetch(string|array $key, resource $handle, int $skip): string|false
オーバーロードされたシグネチャは下記のとおりです:
dba_fetch(string|array $key, int $skip, resource $handle): string|false
上記は、引き続き許可されていますが、新しい標準的なシグネチャを使うことを推奨します。

Random

random_bytes() と random_int() は、CSPRNG が失敗した場合に \Random\RandomException をスローするようになりました。 これより前のバージョンでは、\Exception がスローされていました。

Standard PHP Library(SPL)

iterator_to_array() と iterator_count() の iterator 引数の型が Iterator から iterable に拡張され、 配列を渡せるようになりました。

拡張モジュールへのその他の変更

Date

DatePeriod のプロパティが、適切に宣言されるようになりました。

国際化関数

IntlBreakIterator, IntlRuleBasedBreakIterator, IntlCodePointBreakIterator, IntlPartsIterator, IntlCalendar, Collator, IntlIterator, UConverter, IntlDateFormatter, IntlDatePatternGenerator, MessageFormatter, ResourceBundle, Spoofchecker, IntlTimeZone, Transliterator のインスタンスは、シリアライズできなくなりました。 これより前のバージョンでは、シリアライズはできていましたが、 アンシリアライズした際に役に立たないオブジェクトを生成したり、失敗したりしていました。

MySQLi

libmysql のサポートが削除されました。 よって、libmysql を使って mysqli をビルドすることはもはやできません。 このバージョンからは、 mysqli 拡張モジュールは mysqlnd を使った場合にのみコンパイルできます。 以下に示す、mysqlnd で利用できない、libmysql のすべての機能が削除されました:

  • mysqli_driver の reconnect プロパティ
  • mysqli.reconnect INI ディレクティブ
  • 定数 MYSQLI_IS_MARIADB は、推奨されなくなりました

OCI8

必須となる Oracle Client library の最低バージョンが、11.2 になりました。

PCRE

パターン文字列中の NUL 文字 (\0) がサポートされるようになりました。

Session

セッションがアクティブだったり、出力が既に送信された後に session.cookie_samesite を変更しようとすると、変更が失敗するとともに、警告が発生するようになりました。 この変更は、他のセッション関連の INI 設定の振る舞いに合わせたものです。

SQLite3

sqlite3.defensive の変更可能範囲が、INI_USER になりました。

標準ライブラリ

getimagesize() は、AVIF 画像の ビット数、チャンネル情報、幅と高さの情報(dimensions) を返すようになりました。 これより前のバージョンでは、幅と高さの情報は 0x0 として報告され、ビット数とチャンネル情報は全く報告されていませんでした。

Tidy

tidy クラスのプロパティが、適切に宣言されるようになりました。 tidyNode のプロパティも、readonly として適切に宣言されるようになりました。

Zip

Zip 拡張モジュールは、1.20.0 にアップデートされました。 以下のメソッドが追加されています:

  • ZipArchive::clearError()
  • ZipArchive::getStreamName()
  • ZipArchive::getStreamIndex()

INI ファイルの扱いの変更

INI ファイルに数値を設定する際、 2進数のプレフィックス (0b/0B) および、8進数のプレフィックス (0o/0O) を指定する機能がサポートされました。 INI ファイルに数値を設定する際に値をゼロ (0) から始めた場合、 引き続き8進数の数値として解釈されます。

設定項目によっては、不正な値をパースした場合に警告が発生するようになりました。 これより前のバージョンでは、静かに無視されていました。 後方互換を保つため、値を解釈する方法は変更されていません。 影響を受ける設定は、以下のとおりです:

  • bcmath.scale
  • com.code_page
  • default_socket_timeout
  • fiber.stack_size
  • hard_timeout
  • intl.error_level
  • ldap.max_links
  • max_input_nesting_level
  • max_input_vars
  • mbstring.regex_retry_limit
  • mbstring.regex_stack_limit
  • mysqli.allow_local_infile
  • mysqli.allow_persistent
  • mysqli.default_port
  • mysqli.max_links
  • mysqli.max_persistent
  • mysqli.rollback_on_cached_plink
  • mysqlnd.log_mask
  • mysqlnd.mempool_default_size
  • mysqlnd.net_read_buffer_size
  • mysqlnd.net_read_timeout
  • oci8.default_prefetch
  • oci8.max_persistent
  • oci8.persistent_timeout
  • oci8.ping_interval
  • oci8.prefetch_lob_size
  • oci8.privileged_connect
  • oci8.statement_cache_size
  • odbc.allow_persistent
  • odbc.check_persistent
  • odbc.max_persistent
  • odbc.max_links
  • odbc.defaultbinmode
  • odbc.default_cursortype
  • odbc.defaultlrl
  • opcache.consistency_checks
  • opcache.file_update_protection
  • opcache.force_restart_timeout
  • opcache.interned_strings_buffer
  • opcache.jit_bisect_limit
  • opcache.jit_blacklist_root_trace
  • opcache.jit_blacklist_side_trace
  • opcache.jit_debug
  • opcache.jit_hot_func
  • opcache.jit_hot_loop
  • opcache.jit_hot_return
  • opcache.jit_hot_side_exit
  • opcache.jit_max_exit_counters
  • opcache.jit_max_loop_unrolls
  • opcache.jit_max_polymorphic_calls
  • opcache.jit_max_recursive_calls
  • opcache.jit_max_recursive_returns
  • opcache.jit_max_root_traces
  • opcache.jit_max_side_traces
  • opcache.log_verbosity_level
  • opcache.max_file_size
  • opcache.opt_debug_level
  • opcache.optimization_level
  • opcache.revalidate_freq
  • output_buffering
  • pcre.backtrack_limit
  • pcre.recursion_limit
  • pgsql.max_links
  • pgsql.max_persistent
  • post_max_size
  • realpath_cache_size
  • realpath_cache_ttl
  • session.cache_expire
  • session.cookie_lifetime
  • session.gc_divisor
  • session.gc_maxlifetime
  • session.gc_probability
  • soap.wsdl_cache_limit
  • soap.wsdl_cache_ttl
  • unserialize_max_depth
  • upload_max_filesize
  • user_ini.cache_ttl
  • xmlrpc_error_number
  • zend.assertions
  • zlib.output_compression_level

User Contributed Notes

There are no user contributed notes for this page.


Windows のサポート

PHP コア

Windows 特有のエラーメッセージは、ローカライズされなくなりました。 PHP のエラーメッセージによりマッチさせるため、代わりに英語で表示されます。

仮の、かつとても初期の実験的なサポートとして、 ARM64 版のビルドが追加されました。

OCI8

Oracle 10g を使ってビルドすることはもはやサポートされていないため、 configureオプション --with-oci8 は削除されました。 --with-oci8-11g, --with-oci8-12c, --with-oci8-19 は引き続きサポートされています。

Zip

Zip 拡張モジュールは、1.21.0 にアップデートされました。 かつ、デフォルトで共有ライブラリ (DLL) としてビルドされるようになりました。

User Contributed Notes

There are no user contributed notes for this page.


PHP 8.0.x から PHP 8.1.x への移行

目次

  • 新機能
  • 新しいクラスとインターフェイス
  • 新しく追加された関数
  • 新しいグローバル定数
  • 下位互換性のない変更点
  • PHP 8.1.x で推奨されなくなる機能
  • その他の変更

この新しいマイナーバージョンには、 たくさんの 新機能 と 互換性のない変更 がいくつかあります。 実運用環境の PHP をこのバージョンにあげる前に、 これらの変更を必ずテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.1.x, 7.2.x, 7.3.x, 7.4.x, 8.0.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

PHP コア

8進数の整数リテラルのプレフィックス指定

8進数の整数値の場合に、 数値リテラルのプレフィックスとして明示的に 0o や 0O を指定できるようになりました。 これは、2進数や16進数の整数リテラルの表記と似ています。

<?php
014; // プレフィックス指定がない 8進数のリテラル
0o14; // プレフィックスを指定した 8進数のリテラル
?>

文字列をキーとして持つ配列のアンパック

文字列をキーとして持つ 配列をアンパック できるようになりました。

<?php
$arr1 = [1, 'a' => 'b'];
$arr2 = [...$arr1, 'c' => 'd']; //[1, 'a' => 'b', 'c' => 'd']
?>

引数を展開した後の名前付き引数

引数を ... で展開した後に、名前付き引数を指定できるようになりました。 e.g. foo(...$args, named: $arg).

ファイルアップロード時の full-path キーのサポート

ファイルアップロード時に、 追加で full_path キーを指定できるようになりました。 これにより、アップロードされるファイルの (basename ではなく) フルパスを指定できます。 これは、 "webkitdirectory" 属性 と組み合わせて使うことを意図しています。

列挙型(Enum)

列挙型 のサポートが追加されました。

ファイバー(Fibers)

ファイバー のサポートが追加されました。

第一級callableを生成する記法

myFunc(...) という記法 で、 callable から無名関数を生成できるようになりました。 これは、 Closure::fromCallable('myFunc') と同等です。

注意: ... は文法の一部であり、省略形ではありません。

交差型

交差型 のサポートが追加されました。

警告

交差型 は、 union 型 と一緒に使うことはできません。

Never 型

戻り値にのみ指定できる型として、 新しく never 型が追加されました。 これは、関数が exit() するか、 例外をスローするか、終了しないことを示します。

初期化時の new 式の許可

new ClassName() 式が、引数のデフォルト値の初期化時、 static 変数の初期化時、グローバルな定数の初期化時、 およびアトリビュートの引数として許可されるようになりました。 オブジェクトが define() に渡せるようにもなっています。

読み取り専用プロパティ

プロパティに対して、readonly が指定できるようになりました。

クラス定数の final 指定

クラスの定数に対して、 final が指定できる ようになりました。 また、インターフェイスの定数も、デフォルトでオーバーライド(上書き)できるようになりました。

CURL

CURLOPT_DOH_URL オプションが追加されました。

libcurl >= 7.71.0 で、 証明書を blob 経由で扱うためのオプションが追加されました。

  • CURLOPT_ISSUERCERT_BLOB
  • CURLOPT_PROXY_ISSUERCERT
  • CURLOPT_PROXY_ISSUERCERT_BLOB
  • CURLOPT_PROXY_SSLCERT_BLOB
  • CURLOPT_PROXY_SSLKEY_BLOB
  • CURLOPT_SSLCERT_BLOB
  • CURLOPT_SSLKEY_BLOB

ファイルをファイル経由ではなく、 文字列で POST するために使える CURLStringFile クラスが追加されました。

<?php
$file = new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>

FPM

OpenMetrics status フォーマットが追加されました。 これは、Prometheus が FPM のメトリクスを取得する用途に使います。

pm.max_spawn_rate と呼ばれる、 動的なプロセスマネージャーのための、 新しいプールオプションが追加されました。 これを指定することで、 動的なプロセスマネージャーを選択した場合に、 高速にたくさんの子プロセスが起動できるようになります。 これのデフォルト値は 32 で、 以前からハードコーディングされていたものです。

GD

libgd に Avif のサポートが組み込まれている場合に、 imagecreatefromavif() と imageavif() で Avif が使えるようになりました。

Hash

hash(),
hash_file(),
hash_init() 関数に、
オプションの引数 options が追加されました。
これによって、ハッシュアルゴリズム特有のデータを渡せるようになります。

MurmurHash3

ストリーミングをサポートした MurmurHash3 のサポートが追加されました。 以下のバリアントが実装されています:

  • murmur3a, 32-bit hash
  • murmur3c, 128-bit hash for x86
  • murmur3f, 128-bit hash for x64

ハッシュの初期ステートを 引数 options の seed キーを通じて渡すことができます。 たとえば、以下のように書くことができます:

<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
有効な seed の値は 0 から プラットフォーム定義の UINT_MAX までです。 この値は、通常は 4294967295 です。

xxHash

xxHash のサポートが追加されました。 以下のバリアントが実装されています:

  • xxh32, 32-bit hash
  • xxh64, 64-bit hash
  • xxh3, 64-bit hash
  • xxh128, 128-bit hash

ハッシュの初期ステートを 引数 options の seed キーを通じて渡すことができます。 たとえば、以下のように書くことができます:

<?php
$h = hash("xxh3", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
以下のようにして、シークレットを引数 options の secret キーを通じて渡すこともできます:
<?php
$h = hash("xxh3", $data, options: ["secret" => "at least 136 bytes long secret here"]);
echo $h, "\n";
?>
カスタムのシークレットの品質が、 生成されるハッシュ値の品質に重大な影響を及ぼします。 できる限りエントロピーが高いシークレットを使うことを強く推奨します。

MySQLi

新しい INI ディレクティブ mysqli.local_infile_directory

mysqlnd.local_infile_directory ディレクティブが追加されました。 これによって、ファイルを読み込むことを許可するディレクトリを指定できます。 これは、 mysqli.allow_local_infile が無効の場合にだけ意味があります。 なぜなら、 この場合に全てのディレクトリからのファイルの読み込みが許可されるからです。

実行時に引数をバインド

mysqli_stmt::execute() に配列を指定することで、引数をバインドできるようになりました。 全ての値が、文字列としてバインドされます。 (連想配列でない) リストだけを指定できます。 この新機能は、MySQLi を libmysqlclient を使ってコンパイルしている場合には利用できません。

<?php
$stmt = $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>

新しいメソッド mysqli_result::fetch_column()

mysqli_result::fetch_column() が追加されました。これによって、 結果セットから単一のスカラー値を取得することができるようになります。 この新しいメソッドは、 オプションの引数 column に 0 から始まる整数値を指定することで、 どのカラムから情報を取得するかを指定できます。

<?php
$result = $mysqli->query('SELECT username FROM users WHERE id = 123');
echo $result->fetch_column();
?>

PDO

PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY 属性が追加されました。 これによって、ファイルを読み込むことを許可するディレクトリを指定できます。 これは、 PDO::MYSQL_ATTR_LOCAL_INFILE が無効の場合にだけ意味があります。 なぜなら、 この場合に全てのディレクトリからのファイルの読み込みが許可されるからです。

PDO_SQLite

SQLite の "file:" DSN 記法がサポートされるようになり、 追加のフラグも指定できるようになりました。 この機能は、open_basedir が設定されている場合は使えません。

<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>

POSIX

POSIX_RLIMIT_KQUEUES と POSIX_RLIMIT_NPTS が追加されました。 これらの rlimits は、FreeBSD でのみ利用可能です。

標準ライブラリ

fputcsv() は、 新しい引数 eol を受け入れるようになりました。 これによって、カスタムの改行文字を定義できるようになります。 デフォルトは以前と同じで、"\n" のままです。

Standard PHP Library(SPL)

SplFileObject::fputcsv() は、 新しい引数 eol を受け入れるようになりました。 これによって、カスタムの改行文字を定義できるようになります。 デフォルトは以前と同じで、"\n" のままです。

User Contributed Notes

There are no user contributed notes for this page.


新しいクラスとインターフェイス

cURL

  • CURLStringFile

国際化関数

  • IntlDatePatternGenerator

Reflection

  • ReflectionFiber

User Contributed Notes

There are no user contributed notes for this page.


新しく追加された関数

PHP コア

  • array_is_list()

GD

  • imagecreatefromavif()
  • imageavif()

MySQLi

  • mysqli_result::fetch_column()
  • mysqli_fetch_column()

プロセス制御

  • pcntl_rfork()

リフレクション

  • ReflectionFunctionAbstract::getClosureUsedVariables()

標準ライブラリ

  • fsync()
  • fdatasync()

Sodium

XChaCha20

  • sodium_crypto_stream_xchacha20()
  • sodium_crypto_stream_xchacha20_keygen()
  • sodium_crypto_stream_xchacha20_xor()

Ristretto255

Ristretto255 関数は、libsodium 1.0.18 以降で利用可能です。

  • sodium_crypto_core_ristretto255_add()
  • sodium_crypto_core_ristretto255_from_hash()
  • sodium_crypto_core_ristretto255_is_valid_point()
  • sodium_crypto_core_ristretto255_random()
  • sodium_crypto_core_ristretto255_scalar_add()
  • sodium_crypto_core_ristretto255_scalar_complement()
  • sodium_crypto_core_ristretto255_scalar_invert()
  • sodium_crypto_core_ristretto255_scalar_mul()
  • sodium_crypto_core_ristretto255_scalar_negate()
  • sodium_crypto_core_ristretto255_scalar_random()
  • sodium_crypto_core_ristretto255_scalar_reduce()
  • sodium_crypto_core_ristretto255_scalar_sub()
  • sodium_crypto_core_ristretto255_sub()
  • sodium_crypto_scalarmult_ristretto255()
  • sodium_crypto_scalarmult_ristretto255_base()

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

cURL

  • CURLOPT_DOH_URL
  • CURLOPT_ISSUERCERT_BLOB
  • CURLOPT_PROXY_ISSUERCERT
  • CURLOPT_PROXY_ISSUERCERT_BLOB
  • CURLOPT_PROXY_SSLCERT_BLOB
  • CURLOPT_PROXY_SSLKEY_BLOB
  • CURLOPT_SSLCERT_BLOB
  • CURLOPT_SSLKEY_BLOB

GD

  • IMG_AVIF
  • IMG_WEBP_LOSSLESS

MySQLi

  • MYSQLI_REFRESH_REPLICA

    この定数は、MYSQLI_REFRESH_SLAVE の代替として追加されました。 MySQL の最新の変更に追随したものです。 古い定数は後方互換性を保つためにまだ残されていますが、 将来非推奨になるか、削除される可能性があります。

PCNTL

  • PRIO_DARWIN_BG
  • PRIO_DARWIN_THREAD

POSIX

  • POSIX_RLIMIT_KQUEUES
  • POSIX_RLIMIT_NPTS

Sockets

以下のソケットオプションが、 サポートされている場合に定義されるようになりました:

  • SO_ACCEPTFILTER
  • SO_DONTTRUNC
  • SO_WANTMORE
  • SO_MARK
  • TCP_DEFER_ACCEPT

Sodium

  • SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES
  • SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES
  • SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_BYTES
  • SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES
  • SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES
  • SODIUM_CRYPTO_CORE_RISTRETTO255_HASHBYTES
  • SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES
  • SODIUM_CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES

Tokenizer

  • T_READONLY

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

PHP コア

$GLOBALS へのアクセス制限

$GLOBALS 配列へのアクセスに対し、 多くの制限が適用されるようになりました。 $GLOBALS['var'] のような、 個別の配列要素に対する読み取りや書き込みは、 これまで通り動作します。 $GLOBALS 配列全体への読み取り専用のアクセスも、 引き続きサポートされます。 しかし、$GLOBALS 配列全体への書き込みは、 もはやサポートされなくなりました。 たとえば、array_pop($GLOBALS) のようなコードは、エラーが発生します。

継承したメソッド内で static 変数を使う

static 変数を使っているメソッドが継承された (但し、オーバーライドはされていない) 場合、継承されたメソッドは static 変数を親クラスのメソッドと共有するようになりました。

<?php
class A {
public static function counter() {
static $counter = 0;
$counter++;
return $counter;
}
}
class B extends A {}
var_dump(A::counter()); // int(1)
var_dump(A::counter()); // int(2)
var_dump(B::counter()); // int(3), 以前のバージョンでは int(1)
var_dump(B::counter()); // int(4), 以前のバージョンでは int(2)
?>
これは、メソッド中の static 変数が、 static プロパティと同じ振る舞いをするようになったということです。

必須の引数の前に、デフォルト値を持つ引数を指定した場合

必須の引数の前に、 デフォルト値を持つ引数 を指定した場合、 デフォルト値を持つ引数は常に必須の引数として扱われるようになりました。 これは、 名前付き引数 を使って関数を呼び出した場合でも同様です。 PHP 8.0.0 以降、かつ 8.1.0 より前のバージョンでは、 以下のコードは推奨されない警告を発生させていましたが、 呼び出しは成功していました。 PHP 8.1.0 以降では、 ArgumentCountError がスローされるようになっています。 位置を指定して呼び出した場合でも、同じエラーがスローされます。

<?php
function makeyogurt($container = "bowl", $flavour)
{
return "Making a $container of $flavour yogurt.\n";
}
try
{
echo makeyogurt(flavour: "raspberry");
}
catch (Error $e)
{
echo get_class($e), ' - ', $e->getMessage(), "\n";
}
?>

上の例の PHP 8.0 での出力は、このようになります。:

Deprecated: Required parameter container
 in example.php on line 3
Making a bowl of raspberry yogurt.

上の例の PHP 8.1 での出力は、このようになります。:

Deprecated: Optional parameter $container declared before required parameter
 $flavour is implicitly treated as a required parameter in example.php on line 3
ArgumentCountError - makeyogurt(): Argument #1 ($container) not passed

但し、必須の引数の前であっても、 Null を許容する型 を指定するために、 引数にデフォルト値 null を指定できることに注意して下さい。 その場合でも、その引数は必須であることには変わりありません。

内部クラスと戻り値の型の互換性

ほとんどの final でない内部メソッドは、 それをオーバライドする際、 互換性がある戻り値の型を宣言することが必須になりました。 そうしない場合、継承が有効かを検証する際に、 推奨されない警告が発生するようになります。 PHP のバージョン間の互換性を保ちたいがために、 戻り値の型を宣言できない場合、 アトリビュート ReturnTypeWillChange を追加することで警告を抑止できます。

新しいキーワード

readonly は予約されたキーワードになりました。しかし、まだ関数名としては使えます。

never が予約語になりました。 よって、クラスやインターフェイス、 トレイトの名前として使えなくなっています。 名前空間の中であっても同様です。

リソースからオブジェクトへの移行

いくつかの リソース が、object に移行しました。 is_resource() 関数を使って戻り値をチェックしているコードは、 false を返すことをチェックするコードに置き換えるべきです。

  • FileInfo 関数は、 fileinfo リソース ではなく、 finfo オブジェクトを受け取り、 返すようになりました。

  • FTP 関数は、 ftp リソース ではなく、 FTP\Connection オブジェクトを受け取り、 返すようになりました。

  • IMAP 関数は、 imap リソース ではなく、 IMAP\Connection オブジェクトを受け取り、 返すようになりました。

  • LDAP 関数は、 ldap link リソース ではなく、 LDAP\Connection オブジェクトを受け取り、 返すようになりました。

  • LDAP 関数は、 ldap result リソース ではなく、 LDAP\Result オブジェクトを受け取り、 返すようになりました。

  • LDAP 関数は、 ldap result entry リソース ではなく、 LDAP\ResultEntry オブジェクトを受け取り、 返すようになりました。

  • PgSQL 関数は、 pgsql link リソース ではなく、 PgSql\Connection オブジェクトを受け取り、 返すようになりました。

  • PgSQL 関数は、 pgsql result リソース ではなく、 PgSql\Result オブジェクトを受け取り、 返すようになりました。

  • PgSQL 関数は、 pgsql large object リソース ではなく、 PgSql\Lob オブジェクトを受け取り、 返すようになりました。

  • PSpell 関数は、 pspell リソース ではなく、 PSpell\Dictionary オブジェクトを受け取り、 返すようになりました。

  • PSpell 関数は、 pspell config リソース ではなく、 PSpell\Config オブジェクトを受け取り、 返すようになりました。

MySQLi

mysqli_fetch_fields() と mysqli_fetch_field_direct() は、 max_length を指定すると 常に 0 を返すようになりました。 この情報は、結果セットを繰り返し処理する際に計算できますし、 長さの最大値をとります。 PHP でも以前のバージョンから、 内部的にこれと同じ処理が行われてきました。

MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH オプションは、もはや意味をなさなくなりました。

MYSQLI_STORE_RESULT_COPY_DATA オプションは、もはや意味をなさなくなりました。 mysqli::store_result() の mode 引数にどんな値を渡しても、 同様に意味がなくなっています。

mysqli::connect() は、 成功時に null ではなく、true を返すようになりました。

デフォルトのエラー処理モードが、 "silent" から "exceptions" に変更されました。 この変更の意味の詳細と、 どのようにこの属性を明示的に設定するかについては、 MySQLi のエラー報告モード のページを参照ください。 以前のバージョンの振る舞いは、 mysqli_report(MYSQLI_REPORT_OFF); を使うことで再現できます。

mysqli_stmt::execute() を継承したクラスは、 追加でオプションの引数を指定しなければいけません。

MySQLnd

INI ディレクティブ mysqlnd.fetch_data_copy が削除されました。 このディレクティブによって、 ユーザーの目に見える形で、振る舞いが変更されるべきではないからです。

OpenSSL

EC キーの秘密鍵は、他のキーと同じように PKCS#8 フォーマットでエクスポートされるようになりました。

openssl_pkcs7_encrypt() と openssl_cms_encrypt() は、 デフォルト値が RC2-40 から AES-128-CBC に変更されました。 RC2-40 暗号はセキュアではないと見なされており、 OpenSSL 3 からはデフォルトで有効ではなくなっています。

PHP Data Objects(PDO)

PDO::ATTR_STRINGIFY_FETCHES は、bool 型の値を "0" や "1" に変換するようになりました。 以前のバージョンでは、bool は文字列に変換されていませんでした。

PDOStatement::bindColumn() に PDO::PARAM_LOB を指定してコールした場合、 かつ、PDO::ATTR_STRINGIFY_FETCHES が有効になっていない場合は、 常にストリームに結果をバインドするようになりました。 以前のバージョンでは、 使っているデータベースドライバやバインドが行われるタイミングによって、 文字列にバインドされることもあれば、 ストリームにバインドされることもありました。

MySQL ドライバ

結果セットの整数と浮動小数点の値は、 エミュレートされたプリペアドステートメントを使った場合、 文字列ではなく、 ネイティブの PHP の型を使って返されるようになりました。 これは、ネイティブのプリペアドステートメントの振る舞いと一致します。 以前のバージョンの振る舞いは、 PDO::ATTR_STRINGIFY_FETCHES オプションを有効にすることで再現できます。

SQLite ドライバ

結果セットの整数と浮動小数点の値は、 ネイティブの PHP の型を使って返されるようになりました。 以前のバージョンの振る舞いは、 PDO::ATTR_STRINGIFY_FETCHES オプションを有効にすることで再現できます。

Phar

ArrayAccess インターフェイスに準拠するため、 Phar::offsetUnset() と、 PharData::offsetUnset() は bool を返さなくなりました。

標準ライブラリ

version_compare() は、 ドキュメントに書かれていない演算子の省略形を受け入れなくなりました。

htmlspecialchars(), htmlentities(), htmlspecialchars_decode(), html_entity_decode(), get_html_translation_table() のデフォルト値が、 ENT_COMPAT から ENT_QUOTES | ENT_SUBSTITUTE に変更されました。 これは、' が &#039; にエスケープされるようになるということです。 以前のバージョンでは、' に対してはエスケープは行われていませんでした。 さらに、不正な UTF-8 文字列は、空文字列を返すのではなく、 Unicode 置換文字に置きかえられるようになっています。

debug_zval_dump() は、 値の前に & を付加する代わりに、 自身のリファレンスカウントだけでなく、 リファレンスラッパーのリファレンスカウントも表示するようになりました。 これは、PHP 7.0 以降のリファレンスの表現をより正確にモデル化したものです。

debug_zval_dump() は、 インターン化された文字列や、 変更できない配列については、 ダミーのリファレンスカウントではなく、 interned と表示するようになりました。

Standard PHP Library (SPL)

SplFixedArray は、 array のように JSON にエンコードできるようになりました。

User Contributed Notes

There are no user contributed notes for this page.


PHP 8.1.x で推奨されなくなる機能

PHP コア

__serialize(), __unserialize() がない状態で、 Serializable を実装するのは推奨されない

新しいこれらのメソッドだけを実装するか、 これらのメソッドをサポートしていない PHP 7.4 より前のバージョンでも使う場合は、 新旧両方のインターフェイスを実装すべきです。

ビルトイン関数の nullable でない引数に null を渡した場合

ビルトイン関数のスカラー型の引数は、 デフォルトで nullable ですが、 この振る舞いは推奨されなくなりました。 ユーザ定義の関数においては、 スカラー型の引数は nullable と明示的にマークする必要があり、 その振る舞いと合わせるためです。

<?php
var_dump(str_contains("foobar", null));
// Deprecated: Passing null to parameter #2 ($needle) of type string
// is deprecated
?>

暗黙の float から int への変換

精度を損なうことになる float から int への暗黙の変換は、 推奨されなくなりました。 これは配列のキーに float を使った場合や、 型の自動変換 (coerciveモード) 時に int 型を宣言した場合や、 int に対して演算子を適用する場合に影響します。

<?php
$a = [];
$a[15.5]; // 推奨されません。0.5 がキーの値から失われるからです
$a[15.0]; // 15.0 == 15 なので OK
?>

トレイトの static な要素をコールする

トレイトにある static メソッドや、 static プロパティに直接アクセスすることは、 推奨されなくなりました。 これらは、トレイトを使っているクラスからのみアクセスすべきものです。

__sleep() から配列でない値を返す

配列でない値を __sleep() から返すと、警告が発生するようになりました。

void の関数からリファレンスを返す

<?php
function &test(): void {}
?>
上記のような関数は矛盾しているため、 呼び出された時に Only variable references should be returned by reference という E_NOTICE が既に発生するようになっています。

false な変数を自動的に復活させる挙動(Autovivification)

Autovivification とは、 値を追加しようとする際に配列を自動で生成する処理のことです。 スカラー型の値からこのような処理を行うことは禁止されていますが、 false だけは例外でした。 このバージョンから、この例外も推奨されなくなります。

<?php
$arr = false;
$arr[] = 2; // 推奨されません
?>

注意:

null や 未定義値から、 自動的に配列を生成する処理は未だ許可されています:

<?php
// 未定義値から配列を生成
$arr[] = 'some value';
$arr['doesNotExist'][] = 2;
// null から配列を生成
$arr = null;
$arr[] = 2;
?>

ctype 関数

文字列でない引数の検証

ctype関数 に文字列でない引数を渡すことは、 推奨されなくなりました。 将来のバージョンでは、引数は ASCII コードポイントではなく、 文字列として解釈されるようになります。 ユーザが意図する振る舞いによっては、 引数を文字列にキャストするか、 chr() を明示的にコールすべきです。 全ての ctype_*() 関数が影響を受けます。

日付・時刻 関数

date_sunrise() と date_sunset() は、推奨されなくなりました。 date_sun_info() を使って下さい。

strptime() 関数は、 推奨されなくなりました。 (ロケールに依存しないパースを行う場合) date_parse_from_format() または (ロケールに依存するパースを行う場合) IntlDateFormatter::parse() を代わりに使って下さい。

strftime() と gmstrftime() は、推奨されなくなりました。 (ロケールに依存しないフォーマットを行う場合) date() または (ロケールに依存するフォーマットを行う場合) IntlDateFormatter::format() を代わりに使って下さい。

Filter

FILTER_SANITIZE_STRING と FILTER_SANITIZE_STRIPPED フィルタは、推奨されなくなりました。

INI ディレクティブ filter.default は、推奨されなくなりました。

GD

imagepolygon(), imageopenpolygon(), imagefilledpolygon() の num_points 引数は、 推奨されなくなりました。

Hash

mhash(),
mhash_keygen_s2k(),
mhash_count(),
mhash_get_block_size(),
mhash_get_hash_name()
は、推奨されなくなりました。
hash_*() 関数を代わりに使って下さい。

IMAP

定数 NIL は、推奨されなくなりました。 0 を代わりに使って下さい。

国際化関数(Intl)

IntlCalendar::roll() に bool 引数を渡してコールすることは、 推奨されなくなりました。 true と false の代わりに、 1 と -1 をそれぞれ渡すようにして下さい。

マルチバイト文字列

mb_check_encoding() 関数を引数を渡さずにコールすることは、推奨されなくなりました。

MySQLi

mysqli_driver::$driver_version プロパティは、推奨されなくなりました。 このプロパティは意味がなく、時代遅れになっています。 PHP_VERSION_ID を代わりに使って下さい。

mysqli 引数を渡して、 mysqli::get_client_info() や mysqli_get_client_info() をコールすることは、推奨されなくなりました。 クライアントライブラリのバージョン情報を取得するには、 mysqli_get_client_info() を引数なしでコールするようにして下さい。

mysqli::init() メソッドは、 推奨されなくなりました。 parent::init() のコールを parent::__construct() に置き換えるようにして下さい。

OCI8

INI ディレクティブ oci8.old_oci_close_semantics は、推奨されなくなりました。

ODBC

odbc_result_all() 関数は推奨されなくなりました。

PDO

フェッチモードの定数 PDO::FETCH_SERIALIZE は、推奨されなくなりました。

PgSQL

全ての pgsql_*() 関数に対して、接続リソースを渡さないことは推奨されなくなりました。

SOAP

SoapClient::__construct() の ssl_method オプションは推奨されなくなりました。 SSL コンテキストオプションを使うのが望ましいです。

標準ライブラリ

object に対して、 key(), current(), next(), prev(), reset(), end() を呼び出すことは推奨されなくなりました。 get_mangled_object_vars() を使って 最初に object を配列に変換するか、 ArrayIterator のような Iterator を実装したクラスのメソッドを使ってください。

INI ディレクティブ auto_detect_line_endings は、推奨されなくなりました。 必要な場合は、 "\r" を手動で扱うようにして下さい。

定数 FILE_BINARY と FILE_TEXT は推奨されなくなりました。 これらの定数は、使われたことがありませんでした。

User Contributed Notes

There are no user contributed notes for this page.


その他の変更

SAPI モジュールへの変更

CLI

readline 拡張モジュール が組み込まれていないのに、 -a オプションを使った場合、 エラーが発生するようになりました。 以前のバージョンでは、 readline が組み込まれていない時に -a オプションを使うと、 php コマンドを引数なしでコールしたのと同じ振る舞いをするのに、 "Interactive mode enabled" というメッセージを追加で出力していました。 この場合のモードは、インタラクティブでは ありませんでした。

PHPDBG

phpdbg のリモート関連の機能が削除されました。

変更された関数

PHP コア

foreach、 var_dump()、 serialize()、 オブジェクトの比較時などで用いられるプロパティの順序が変更されました。 プロパティは宣言や継承に応じて、自然順に並ぶようになりました。 親クラスで宣言されたプロパティは、 子クラスのプロパティの前に並びます。

この順序は、 構造体 zend_object 内部のレイアウトと一致しており、 default_properties_table[] と properties_info_table[] でも同様の順序が用いられています。 以前のバージョンでは、 プロパティの順序がドキュメント化されておらず、 クラスの継承の実装の詳細に依存していました。

Filter

FILTER_VALIDATE_INT フィルタの FILTER_FLAG_ALLOW_OCTAL フラグは、 8進数のプレフィックス ("0o"/"0O") が先頭についた8進文字列を受け入れるようになりました。

GMP

全ての GMP 関数が、 8進数のプレフィックス ("0o"/"0O") が先頭についた8進文字列を受け入れるようになりました。

PDO ODBC

PDO::getAttribute() に PDO::ATTR_SERVER_INFO や PDO::ATTR_SERVER_VERSION を指定した場合でも、 値を返すようになりました。 以前のバージョンでは、 PDOException をスローしていました。

リフレクション

ReflectionProperty::setAccessible() と ReflectionMethod::setAccessible() は、もはや意味をなさなくなりました。 プロパティとメソッドは、 常にリフレクション経由でアクセス可能と見なされるようになっています。

標準ライブラリ

syslog() 関数は、バイナリセーフになりました。

拡張モジュールへのその他の変更

GD

imagewebp() 関数の quality 引数に IMG_WEBP_LOSSLESS を指定することで、 ロスレスエンコードが行えるようになりました。

システムが使っている libgd が WebP のロスレスエンコーディングをサポートしている場合にのみ、 この定数は定義されます。

MySQLi

libmysqlclient とリンクした場合に、 mysqli_stmt::next_result() と mysqli::fetch_all() が使えるようになりました。

OpenSSL

  • OpenSSL 拡張モジュール は、OpenSSL 1.0.2 以降が必須になりました。

  • OpenSSL 3.0 がサポートされるようになりました。 多くの暗号が(レガシーなプロバイダの一部となっているため) デフォルトで有効ではなくなり、 引数の検証 (たとえば鍵の最小サイズ) が厳しくなっています。

Phar

  • SHA256 が、シグネチャのデフォルトとして使われるようになりました。

  • OpenSSL_SHA256 と OpenSSL_SHA512 シグネチャのサポートが追加されました。

SNMP

  • セキュリティプロトコルのために、 SHA256 と SHA512 のサポートが追加されました。

標準ライブラリ

configure オプション --with-password-argon2 は、 libargon2 を検知するのに pkg-config を使うようになっています。 そのため、libargon2 のインストール先を指定するには、 PKG_CONFIG_PATH を使うべきです。

INI ファイルの扱いの変更

  • INI ディレクティブ log_errors_max_len は削除されました。 PHP 8.0.0 以降、この設定は意味をなさなくなっていました。

  • クォートされた文字列の先頭にドル記号がある場合、 そのドル記号はエスケープされるようになりました。 つまり、 "\${" は、 ${ という文字列として解釈されます。

  • ダブルクォートで囲まれた文字列中のバックスラッシュは、 エスケープ文字としてより一貫した形で扱われるようになりました。 以前のバージョンでは、 "foo\\" の後に改行文字以外の文字が続いた場合、 文字列の終端とは見なされませんでした。 PHP 8.1.0 以降では、foo\ という文字列として解釈されるようになります。 例外として、"foo\" の後に改行文字が続いた場合は、 foo\ という文字列として解釈されます。 文字列が終端していないとは見なされません。 但し、"C:\foo\" のような、 Windows のファイルパスを使う場合には例外が存在します。

User Contributed Notes

There are no user contributed notes for this page.


PHP 7.4.x から PHP 8.0.x への移行

目次

  • 新機能
  • 下位互換性のない変更点
  • 推奨されなくなる機能
  • その他の変更

この新しいメジャーバージョンには、たくさんの 新機能 と 互換性のない変更 がいくつかあります。 実運用環境の PHP をこのバージョンにあげる前に、これらの変更を必ずテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.0.x, 7.1.x, 7.2.x, 7.3.x, 7.4.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

PHP コア

名前付き引数

名前付き引数 のサポートが追加されました。

アトリビュート

アトリビュート のサポートが追加されました。

コンストラクタのプロパティ昇格機能

コンストラクタの引数をプロパティへ昇格させる機能 が追加されました。

union 型

union 型 のサポートが追加されました。

match 式

match 式 のサポートが追加されました。

nullsafe 演算子

nullsafe 演算子 (?->) のサポートが追加されました。

その他の新機能

  • WeakMap クラスが追加されました。

  • ValueError クラスが追加されました。

  • 任意の数の関数の引数が、可変長引数に置き換えられるようになりました。 但し、型に互換性がある場合に限ります。 たとえば、次のようなコードが書けるようになります:

    <?php
    class A {
    public function     method(int $many, string $parameters, $here) {}
    }
    class     B extends A {
    public function     method(...$everything) {}
    }
    ?>

  • 以下のようにして、static ("遅延静的束縛"における) 型が、 戻り値の型として使えるようになりました:

    <?php
    class Test {
    public function     create(): static {
    return new static();
    }
    }
    ?>

  • オブジェクトのクラス名を $object::class と書くことで取得できるようになりました。 この結果は、get_class($object) と同じです。

  • new と instanceof が、 new (expression)(...$args) や $obj instanceof (expression) という形で、任意の式と一緒に使えるようになりました。

  • 変数の文法に一貫性を持たせるため、いくつかの修正が適用されます。 たとえば、Foo::BAR::$baz のような書き方が許可されるようになりました。

  • インターフェイス Stringable が追加されました。 クラスが __toString() メソッドを定義していた場合、 このインターフェイスが自動的に実装されます。

  • トレイトで、private な抽象メソッドを定義できるようになりました。 このメソッドは、トレイトを使うクラスで実装されなければなりません。

  • throw が式として使えるようになりました。 これによって、以下のような書き方ができるようになります:

    <?php
    $fn     = fn() => throw new Exception('Exception in arrow function');
    $user = $session->user ?? throw new Exception('Must have user');

  • 引数のリストに付ける最後のカンマも、オプションで許可されるようになりました。

    <?php
    function functionWithLongSignature(
    Type1 $parameter1,
    Type2 $parameter2, // <-- このカンマが許可されるようになりました
    ) {
    }

  • 変数に保存せずに、 例外をキャッチするために、catch (Exception) というコードが書けるようになりました。

  • mixed 型のサポートが追加されました。

  • 親クラスで宣言された private メソッドは、 子クラスのメソッドに対して継承ルールを強制しなくなりました( private final と宣言されたコンストラクタは例外です)。 次の例は、どういった制限がなくなるのかを示しています:

    <?php
    class ParentClass {
    private function     method1() {}
    private function     method2() {}
    private static function     method3() {}
    // "final" が意味をなさなくなったので、警告が発生します:
    private final function method4() {}
    }
    class     ChildClass extends ParentClass {
    // 親クラスの private メソッドとアクセス権の修飾子が異なっている
    // 以下の全ての宣言が許されるようになりました。
    public abstract function method1() {}
    public static function     method2() {}
    public function     method3() {}
    public function     method4() {}
    }
    ?>

  • (int) $resource と同じ値を返す get_resource_id() 関数が追加されました。 よりわかりやすいAPIで、同じ機能を提供するものです。

  • InternalIterator が追加されました。

日付と時刻

  • DateTime::createFromInterface() と DateTimeImmutable::createFromInterface() が追加されました。

  • DateTime のフォーマット指定子 p が追加されました。 これは P と同じですが、 UTC の +00:00 ではなく、 Z を返します。

DOM

新しいDOMの走査と管理を行う API を持つ DOMParentNode と DOMChildNode が追加されました。

フィルタ

FILTER_VALIDATE_BOOLEAN のエイリアスとして、 FILTER_VALIDATE_BOOL が追加されました。 新しい名前のほうが望ましいです。なぜなら、 正規化された型の名前を使っているからです。

Enchant

enchant_dict_add(), enchant_dict_is_added(), LIBENCHANT_VERSION が追加されました。

FPM

新しいオプション pm.status_listen が追加されました。 これによって、異なるエンドポイント(例: ポートやUDSファイル)から、 ステータスを取得することが出来るようになります。 実行時間がかかっているリクエストを処理しているために、全ての子プロセスがビジーである場合、 ステータスを取得するのに役立ちます。

Hash

HashContext オブジェクトが、シリアライズ出来るようになりました。

国際化関数

定数 IntlDateFormatter::RELATIVE_FULL,
IntlDateFormatter::RELATIVE_LONG,
IntlDateFormatter::RELATIVE_MEDIUM,
IntlDateFormatter::RELATIVE_SHORT が追加されました。

LDAP

検索結果に含まれる参照メッセージの数を返す ldap_count_references() が追加されました。

OPcache

opcache.record_warnings INI ディレクティブが有効になっている場合、 OPcache はコンパイル時の警告を記録し、次に include されたときにそれを繰り返します。 これは、たとえキャッシュから情報を得た場合でも同じです。

OpenSSL

暗号化メッセージ構文(CMS) (» RFC 5652) のサポートが追加されました。 これは、暗号化、復号化、署名、検証と読み込みの関数が含まれます。 API は PKCS #7 の関数と似ていますが、新しいエンコーディングの定数が追加されています: OPENSSL_ENCODING_DER, OPENSSL_ENCODING_SMIME OPENSSL_ENCODING_PEM です。

  • 証明書を使ってファイル中のメッセージを暗号化し、 結果を指定されたファイルに出力する openssl_cms_encrypt() が追加されました。
  • ファイル中の S/MIME メッセージを復号化し、 結果を指定されたファイルに出力する openssl_cms_decrypt() が追加されました。
  • CMSファイルを PEM 証明書の配列にエクスポートする openssl_cms_read() が追加されました。
  • 証明書と鍵を使ってファイル中のMIMEメッセージに署名し、 結果を指定されたファイルに出力する openssl_cms_sign() が追加されました。
  • データブロックが無傷なことや、 署名した人がその人であることを検証し、 署名した人の証明書を返す openssl_cms_verify() が追加されました。

正規表現 (Perl互換)

直近で発生した PCRE に関するエラーを人間が読みやすいメッセージとして返す preg_last_error_msg() が追加されました。 これは、整数の enum を返していた preg_last_error() を補完するものです。

リフレクション

  • 以下のメソッドは、内部関数の引数のデフォルト値に関する情報を返すようになりました:

    • ReflectionParameter::isDefaultValueAvailable()
    • ReflectionParameter::getDefaultValue()
    • ReflectionParameter::isDefaultValueConstant()
    • ReflectionParameter::getDefaultValueConstantName()

SQLite3

データベース上で認証する用途に使う、 ユーザー空間のコールバックを設定する SQLite3::setAuthorizer() と、 それに対応するクラス定数が追加されました。

標準ライブラリ

  • 文字列に haystack が含まれているかどうかを調べる str_contains() 関数が追加されました。

    文字列が needle で始まるかを調べる str_starts_with() 関数が追加されました。

    文字列が needle で終わるかを調べる str_ends_with() 関数が追加されました。

  • IEEE 754 のセマンティクスに沿って浮動小数点数の割り算を行う fdiv() 関数が追加されました。 ゼロ除算は、well-defined とみなされ、 Inf, -Inf, NaN のいずれかを返します。

  • エラーメッセージで使うのに便利な型を返す get_debug_type() 関数が追加されました。 gettype() と違うのは、 この関数は正規化された型の名前を使い、オブジェクトのときはクラス名を返し、 リソースの場合はリソースのタイプを示すことです。

  • printf() 関数とその仲間の関数は、 フォーマット指定子 %h と %H をサポートしました。 これらは %g および %G と同じですが、 10進数の区切り文字を LC_NUMERIC ロケールによって決めるのではなく、 常に "." を使います。

  • printf() 関数とその仲間の関数は、 精度または広さを指定する用途のために "*" をサポートしました。 この場合、精度/広さは printf の引数として渡します。 精度として -1 を %g, %G, %h, %H に指定することも出来ます。 たとえば、次のコードで、PHP のデフォルトの浮動小数点のフォーマットを再現することができます:

    <?php
    printf    ("%.*H", (int) ini_get("precision"), $float);
    printf("%.*H", (int) ini_get("serialize_precision"), $float);
    ?>

  • proc_open() に、疑似端末(PTY) ディスクリプタのサポートが追加されました。 以下のコードは、 stdin, stdout, stderr を同じPTYにアタッチします:

    <?php
    $proc     = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
    ?>

  • proc_open() 関数は、 ソケットペアのディスクリプタをサポートするようになりました。 以下のコードは、異なるソケットペアを stdin, stdout, stderr にアタッチします:

    <?php
    $proc     = proc_open($command, [['socket'], ['socket'], ['socket']], $pipes);
    ?>

    Windows では、パイプと異なり、ソケットは ブロッキングI/O の問題の影響を受けません。 しかし、全てのプログラムが標準入出力のソケットで正しく動くとは限りません。

  • ソート関数が安定ソートになりました。 これは、比較して等しいと判定された要素は、もともとの順序を維持するということです。

  • array_diff(), array_intersect() や、 そのバリエーションの関数は、単一の配列を引数に取れるようになりました。 これによって、以下のような使い方が出来るようになるということです:

    <?php
    // $excludes が空でも問題ありません:
    array_diff($array, ...$excludes);
    // $arrays が 単一の配列だけを含んでいても問題ありません:
    array_intersect(...$arrays);
    ?>

  • ob_implicit_flush() 関数の flag 引数が、int ではなく bool を受け取るように変更されました。

Tokenizer

PhpToken クラスは、 オブジェクトベースのインターフェイスを tokenizer に追加します。 このクラスは、統一された、人間工学に基づいた表現を提供しながら、 メモリ効率がよく、高速になっています。

Zip

  • Zip 拡張モジュールが、1.19.1 に更新されました。

  • エントリの変更時間を設定するための ZipArchive::setMtimeName(), ZipArchive::setMtimeIndex() が追加されました。

  • アーカイブがクローズされている間に行われた更新情報を提供する ZipArchive::registerProgressCallback() が追加されました。

  • アーカイブがクローズされている間にキャンセルを許可する ZipArchive::registerCancelCallback() が追加されました。

  • エントリの内容を置換する ZipArchive::replaceFile() が追加されました。

  • オプションの圧縮機能がサポートされているかをチェックする ZipArchive::isCompressionMethodSupported() が追加されました。

  • オプションの暗号化機能がサポートされているかをチェックする ZipArchive::isEncryptionMethodSupported() が追加されました。

  • 最後に追加されたエントリのインデックスの値を取得するために、 ZipArchive::lastId が追加されました。

  • ZipArchive::status や
ZipArchive::statusSys プロパティ、
または ZipArchive::getStatusString() メソッドを使って、
アーカイブがクローズされた後でもエラーをチェックできるようになりました。

  • ZipArchive::addGlob() と ZipArchive::addPattern() メソッドの 'remove_path' オプションは、 ('add_path' オプションと一貫性を保つため) 任意の文字列のプレフィックスとして扱われるようになりました。 これより前のバージョンでは、デイレクトリ名として扱われていました。

  • オプションの 圧縮/伸長 機能が phpinfo でも一覧できるようになりました。

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

PHP コア

文字列と数値の比較

(厳密でないやり方で)数値と非数値文字列を比較する場合、 数値を文字列にキャストし、文字列と比較するようになりました。 数値と数値形式の文字列の比較は、以前と同じ振る舞いをします。 注意すべきなのは、これによって、 0 == "not-a-number" が false と見なされるようになったことです。

比較 | 変更前 | 変更後
0 == "0" | true | true
0 == "0.0" | true | true
0 == "foo" | true | false
0 == "" | true | false
42 == " 42" | true | true
42 == "42foo" | true | false

その他の下位互換性のない変更

  • match が予約語になりました。

  • mixed が予約語になりました。 よって、クラスやインターフェイス、 トレイトの名前として使えなくなっています。 名前空間の中であっても同様です。

  • アサーションに失敗すると、デフォルトで例外をスローするようになりました。 古い振る舞いを望む場合、php.ini で assert.exception=0 と設定できます。

  • クラス名と同じ名前のメソッドは、コンストラクタと解釈されなくなりました。 __construct() メソッドを代わりに使って下さい。

  • static でないメソッドを、staticメソッドとしてコールできる機能が削除されました。 static でないメソッドをクラス名を使ってチェックした場合、 is_callable() は失敗します。 (オブジェクトのインスタンスを使ってチェックしなければいけません)

  • (real) と (unset) キャストが削除されました。

  • track_errors ini ディレクティブは削除されました。 つまり、php_errormsg が利用できなくなったということです。 代わりに error_get_last() 関数が使えます。

  • 大文字小文字を区別しない定数を定義できる機能が削除されました。 define() 関数の第3引数はもはや true ではありません。

  • __autoload() 関数を使ってオートローダーを指定する機能は削除されました。 代わりに spl_autoload_register() を使うべきです。

  • set_error_handler() 関数で設定されるカスタムエラーハンドラには、 errcontext 引数は渡されなくなりました。

  • create_function() 関数は削除されました。 無名関数が代わりに使えます。

  • each() 関数は削除されました。 代わりに foreach や ArrayIterator を使うべきです。

  • Closure::fromCallable() や ReflectionMethod::getClosure() を使って メソッドから生成されたクロージャーから this の束縛を解除できる機能は削除されました。

  • this を使っている適切なクロージャーから、 this の束縛を解除する機能も削除されています。

  • オブジェクトに対して array_key_exists() 関数を使える機能は削除されました。 isset() または property_exists() を代わりに使えます。

  • array_key_exists() 関数の引数 key の型に関する振る舞いが、 isset() 関数や配列アクセスの場合と一貫したものになりました。 全てのキーの型は通常の強制が行われ、配列やオブジェクトのキーは TypeError がスローされるようになりました。

  • はじめの数値のキーとして n を持つ配列は、 たとえ n が負の値であっても、 次の暗黙のキーは n+1 を使うようになります。

  • デフォルトの error_reporting のレベルは E_ALL になりました。 これより前のバージョンでは、 E_ALL から E_NOTICE と E_DEPRECATED が除かれていました。

  • display_startup_errors は、 デフォルトで有効になりました。

  • 親クラスがないクラスの内部で parent を使うと、 致命的なコンパイルエラーが発生するようになりました。

  • @ 演算子は、致命的なエラー (E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR, E_PARSE) を隠さなくなりました。 @ を使う時に、 error_reporting が 0 であることを期待しているエラーハンドラは、 代わりにマスクチェックを調整すべきです:

    <?php
    // こういうエラーハンドラは
    function my_error_handler($err_no, $err_msg, $filename, $linenum) {
    if (    error_reporting() == 0) {
    return     false;
    }
    // ...
    }

    // 以下に置き換えましょう
    function my_error_handler($err_no, $err_msg, $filename, $linenum) {
    if (!(    error_reporting() & $err_no)) {
    return     false;
    }
    // ...
    }
    ?>

    さらに、実運用環境で表示されていなかった、 情報のリークに繋がるエラーメッセージにも注意を払うべきです。 エラーのロギングと併せて、 display_errors=Off となっていることを確認するようにして下さい。

  • #[ は、コメントの開始として解釈されなくなりました。 この文法は、アトリビュート として使われるようになっているからです。

  • 非互換なメソッドのシグネチャによる継承エラー(リスコフの置換原則違反)については、 常に致命的なエラーが生成されるようになりました。 これより前のバージョンでは、警告が生成される場合がありました。

  • ビットシフトや加算、減算に対する連結演算子の優先順位が変更されました。

    <?php
    echo "Sum: " . $a + $b;
    // 上記は、以前のバージョンでは以下のように解釈されていました:
    echo ("Sum: " . $a) + $b;
    // PHP 8.0.0 からは、以下のように解釈されます:
    echo "Sum:" . ($a + $b);
    ?>

  • 実行時に null に解決されるデフォルト値を持つ引数は、 引数の型を暗黙のうちに nullable とマークすることはなくなりました。 明示的に nullable と宣言するか、 明示的にデフォルト値を null と宣言しなければなりません。

    <?php
    // 以下のようなコードは
    function test(int $arg = CONST_RESOLVING_TO_NULL) {}
    // このように置き換えるか
    function test(?int $arg = CONST_RESOLVING_TO_NULL) {}
    // こう書きましょう
    function test(int $arg = null) {}
    ?>

  • たくさんの警告が Error 例外に変換されるようになりました:

    • オブジェクトでない値にプロパティを書き込もうとした場合。 これより前のバージョンでは、 null については stdClass オブジェクトが暗黙のうちに作られ、 空文字列については false となっていました。
    • PHP_INT_MAX キーが既に使われている配列に対して、 要素を追加しようとした場合。
    • 不正な型(配列やオブジェクト) を配列のキーや文字列のオフセットとして使おうとした場合。
    • スカラー値に配列のインデックスを書き込もうとした場合
    • 配列やTraversable でない値をアンパックしようとした場合
    • 未定義の、非修飾の定数にアクセスしようとした場合。 これより前のバージョンでは、 非修飾の定数にアクセスしようとすると、警告が発生し、 文字列として解釈されていました。
    • 可変長引数でない組み込み関数に、間違った数の引数を渡した場合、 ArgumentCountError がスローされるようになりました。
    • 無効な countable 型を count() に渡した場合、 TypeError がスローされるようになりました。

    多くの notice が警告に変換されるようになりました:

    • 未定義の変数を読み取ろうとした場合
    • 未定義のプロパティを読み取ろうとした場合
    • 未定義の配列のキーを読み取ろうとした場合
    • オブジェクトでない値のプロパティを読み取ろうとした場合
    • 配列でない値のインデックスにアクセスしようとした場合
    • 配列を文字列に変換しようとした場合
    • リソースを配列のキーとして使おうとした場合
    • null や bool 値や float の値を文字列オフセットとして使おうとした場合
    • 境界を超えて文字列のオフセットを読み取ろうとした場合
    • 文字列のオフセットに空文字列を割り当てようとした場合

  • 文字列のオフセットに複数バイトを割り当てようとすると、警告が発生するようになりました。

  • ソースファイル中に(文字列の範囲外のNUL バイトのような) 想定外の文字が含まれていた場合、 コンパイル時に警告を出す代わりに、 ParseError がスローされるようになりました。

  • 例外がキャッチされなかった場合、 "クリーンなシャットダウン" が行われます。 これは、例外がキャッチされなかった後、 デストラクタが呼ばれるということです。

  • コンパイル時の致命的なエラー "Only variables can be passed by reference" は、 実行時まで遅延され、 "Argument cannot be passed by reference" という Error 例外に変換されるようになりました。

  • "Only variables should be passed by reference" という警告は、 "Argument cannot be passed by reference" という例外に変換されるようになりました。

  • 無名クラスのために生成される名前が変更されました。 最初の親クラスやインターフェイスの名前が含まれるようになっています:

    <?php
    new class extends ParentClass {};
    // -> ParentClass@anonymous
    new class implements FirstInterface, SecondInterface {};
    // -> FirstInterface@anonymous
    new class {};
    // -> class@anonymous
    ?>

    上で示した名前の後に、NULバイトやユニークなサフィックスが続きます。

  • トレイトのエイリアス調整において、 クラス名を指定していないメソッド参照は、 曖昧でないことが必須になりました:

    <?php
    class X {
    use     T1, T2 {
    func as otherFunc;
    }
    function     func() {}
    }
    ?>

    T1::func() と T2::func() が両方存在している場合、 PHP 8.0.0 より前のバージョンでは、 このコードは黙って動作し、func は T1::func を参照するものと想定されていました。 PHP 8.0.0 からは、このコードは致命的なエラーが発生します。 T1::func または T2::func を明示的に書く必要があります。

  • トレイトで定義される抽象メソッドのシグネチャは それを実装するクラスのメソッド側で、 一致しているかがチェックされるようになりました:

    <?php
    trait MyTrait {
    abstract private function     neededByTrait(): string;
    }

    class     MyClass {
    use     MyTrait;

    // エラー。戻り値の型が一致しません。
    private function neededByTrait(): int { return 42; }
    }
    ?>

  • 無効にされている関数は、存在しない関数であるかのように扱われるようになりました。 無効にされている関数を呼び出しても unknown と報告されますし、 無効にされている関数を再定義することも可能になっています。

  • data:// ストリームラッパーは書き込み可能ではなくなりました。 これは、ドキュメント化されている振る舞いに一致します。

  • 算術演算子とビット演算子 +, -, *, /, **, %, <<, >>, &, |, ^, ~, ++, -- は、オペランドのひとつが配列だったり、 リソース だったり、オーバーロードされていない object だったりした場合に、 一貫して TypeError をスローするようになりました。 これに対する唯一の例外は、配列と配列を + でマージする操作で、 これはまだサポートされています。

  • float 型から文字列型へのキャストは、 ロケールに依存しないように常に振る舞うようになります。

    <?php
    setlocale    (LC_ALL, "de_DE");
    $f = 3.14;
    echo     $f, "\n";
    // PHP 8.0.0 より前のバージョン: 3,14
    // PHP 8.0.0 以降: 3.14
    ?>

    数値のフォーマットをカスタマイズする方法については、 printf(), number_format() 関数 および NumberFormatter() メソッドを参照ください。

  • 推奨されなくなっていた、 オフセットを指定してアクセスするための波括弧のサポートが削除されました。

    <?php
    // 以下ではなく:
    $array{0};
    $array{"key"};
    // このように書いて下さい:
    $array[0];
    $array["key"];
    ?>

  • private メソッドに final 修正子を指定した場合、 そのメソッドがコンストラクタでない限り、警告が発生するようになります。

  • オブジェクトのコンストラクタで exit() が呼び出された場合、 オブジェクトのデストラクタはコールされなくなりました。 これは、コンストラクタが例外をスローしたときの振る舞いと一致します。

  • 名前空間に含まれる名前には、 ホワイトスペースを含めることができなくなりました。 つまり、Foo\Bar は名前空間の名前として認識されますが Foo \ Bar は認識されなくなったということです。 逆に、予約語のキーワードは名前空間の一部として許されるようになりました。 これによって、コードの解釈が変わるかもしれません。 new\x は constant('new\x') と同じですが、 new \x() とは異なります。

  • 三項演算子をネストする場合、明示的に括弧が必要になりました。

  • debug_backtrace() と Exception::getTrace() メソッド は、引数にリファレンスを取らなくなりました。 これにより、バックトレースを通じて、関数の引数を変更できなくなります。

  • 数値形式の文字列の扱いが、より直感的で間違いにくいものに変更されました。 ホワイトスペースが前に付いている場合の扱いと一貫性を持たせるため、 数値形式の文字列の後にホワイトスペースを付けることが許されるようになりました。 これがもっとも影響するのは以下です:

    • is_numeric() 関数
    • 文字列同士の比較
    • 型宣言
    • インクリメントとデクリメント演算

    "数値が始めに来る文字列" の概念は殆どなくなっています; このケースは、移行を容易にするために存在しています。 "A non well-formed numeric value encountered" という E_NOTICE が発生する文字列 は、"A non-numeric value encountered" という E_WARNING が発生するようになっています。 そして、"A non-numeric value encountered" という E_WARNING が発生していた全ての文字列は、 TypeError が発生するようになりました。 これが最も影響するのは、以下の場合です:

    • 算術演算
    • ビット演算

    この E_WARNING から TypeError への変更は、 不正な文字列オフセットの場合に発生する "Illegal string offset 'string'" という E_WARNING にも影響します。 文字列から int/float に明示的にキャストする場合の振る舞いは変更されていません

  • マジックメソッドは引数と戻り値の型を持ち、 宣言された場合はチェックが行われるようになりました。 シグネチャは次の一覧と一致させるべきです:

    • __call(string $name, array $arguments): mixed
    • __callStatic(string $name, array $arguments): mixed
    • __clone(): void
    • __debugInfo(): ?array
    • __get(string $name): mixed
    • __invoke(mixed $arguments): mixed
    • __isset(string $name): bool
    • __serialize(): array
    • __set(string $name, mixed $value): void
    • __set_state(array $properties): object
    • __sleep(): array
    • __unserialize(array $data): void
    • __unset(string $name): void
    • __wakeup(): void

  • call_user_func_array() 関数に渡される 配列のキーは、引数名として解釈されるようになりました。 これより前のバージョンでは、静かに無視されていました。

  • 名前空間の内部で assert() と呼ばれる関数を宣言する ことは許されなくなり、 E_COMPILE_ERROR が発生するようになりました。 assert() 関数は PHP エンジンによって特別扱いを受けることになっているので、 名前空間の内部で同じ名前が定義されていると、 動作が一貫しなくなる原因になるからです。

リソースからオブジェクトへの移行

いくつかの リソース が、object に移行しました。 is_resource() 関数を使って戻り値をチェックしているコードは、 false を返すことをチェックするコードに置き換えるべきです。

  • curl_init() 関数は リソース ではなく、CurlHandle オブジェクトを返すようになりました。 curl_close() 関数はもはや意味をなしません。 CurlHandle インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • curl_multi_init() 関数は リソース ではなく、CurlMultiHandle オブジェクトを返すようになりました。 curl_multi_close() 関数はもはや意味をなしません。 CurlMultiHandle インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • curl_share_init() 関数は リソース ではなく、CurlShareHandle オブジェクトを返すようになりました。 curl_share_close() 関数はもはや意味をなしません。 CurlShareHandle インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • enchant_broker_init() 関数は リソース ではなく、EnchantBroker オブジェクトを返すようになりました。

  • enchant_broker_request_dict() と enchant_broker_request_pwl_dict() 関数は リソース ではなく、EnchantDictionary オブジェクトを返すようになりました。

  • GD 拡張モジュールは 画像の基本的なデータ構造として リソース ではなく、GdImage オブジェクトを使うようになりました。 imagedestroy() 関数はもはや意味をなしません。 GdImage インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • openssl_x509_read() と openssl_csr_sign() 関数は リソース ではなく、OpenSSLCertificate オブジェクトを返すようになりました。 openssl_x509_free() 関数は非推奨となり、 もはや意味をなしません。 OpenSSLCertificate インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • openssl_csr_new() 関数は リソース ではなく、OpenSSLCertificateSigningRequest オブジェクトを返すようになりました。

  • openssl_pkey_new() 関数は リソース ではなく、OpenSSLAsymmetricKey オブジェクトを返すようになりました。 openssl_pkey_free() 関数は非推奨となり、 もはや意味をなしません。 OpenSSLAsymmetricKey インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • shmop_open() 関数は リソース ではなく、Shmop オブジェクトを返すようになりました。 shmop_close() 関数は非推奨となり、 もはや意味をなしません。 Shmop インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • socket_create(), socket_create_listen(), socket_accept(), socket_import_stream(), socket_addrinfo_connect(), socket_addrinfo_bind(), socket_wsaprotocol_info_import() 関数は リソース ではなく、Socket オブジェクトを返すようになりました。 socket_addrinfo_lookup() 関数は リソース ではなく、AddressInfo オブジェクトを返すようになりました。

  • msg_get_queue() 関数は リソース ではなく、SysvMessageQueue オブジェクトを返すようになりました。

  • sem_get() 関数は リソース ではなく、SysvSemaphore オブジェクトを返すようになりました。

  • shm_attach() 関数は リソース ではなく、SysvSharedMemory オブジェクトを返すようになりました。

  • xml_parser_create() と xml_parser_create_ns() 関数は リソース ではなく、XMLParser オブジェクトを返すようになりました。 xml_parser_free() 関数はもはや意味をなしません。 XMLParser インスタンスは、 参照されなくなった場合に、自動的に破棄されます。

  • XMLWriter 関数 は リソース ではなく、XMLWriter オブジェクトを受け入れ、返すようになりました。

  • inflate_init() 関数は リソース ではなく、InflateContext オブジェクトを返すようになりました。

  • deflate_init() 関数は リソース ではなく、DeflateContext オブジェクトを返すようになりました。

COM および .Net (Windows)

タイプライブラリ から 大文字小文字を区別せずに定数をインポートする機能は削除されました。 com_load_typelib() 関数の第二引数は もはや false ではありません。 com.autoregister_casesensitive はもはや無効ではなくなりました。 つまり、com.typelib_file の #case_insensitive マーカーは無視されます。

CURL

CURLOPT_POSTFIELDS は、 オブジェクトを配列として受け入れなくなりました。 オブジェクトを配列として解釈させるためには、 明示的に (array) キャストを行って下さい。 配列を受け入れる他のオプションにも、同じことが当てはまります。

日付と時刻

mktime() と gmmktime() 関数は 少なくともひとつ引数が必要になりました。 現在のタイムスタンプを取得する用途には time() 関数が使えます。

DOM

DOM 拡張モジュールで実装されておらず、振る舞いも持たず、 テストデータもないクラスが削除されました。 これらのクラスは、最新のDOM標準からも削除されています:

  • DOMNameList
  • DomImplementationList
  • DOMConfiguration
  • DomError
  • DomErrorHandler
  • DOMImplementationSource
  • DOMLocator
  • DOMUserDataHandler
  • DOMTypeInfo
  • DOMStringExtend

DOM 拡張モジュールで実装されておらず、 振る舞いも持たない以下のメソッドが削除されました:

  • DOMNamedNodeMap::setNamedItem()
  • DOMNamedNodeMap::removeNamedItem()
  • DOMNamedNodeMap::setNamedItemNS()
  • DOMNamedNodeMap::removeNamedItemNS()
  • DOMText::replaceWholeText()
  • DOMNode::compareDocumentPosition()
  • DOMNode::isEqualNode()
  • DOMNode::getFeature()
  • DOMNode::setUserData()
  • DOMNode::getUserData()
  • DOMDocument::renameNode()

Enchant

  • enchant_broker_list_dicts(),
enchant_broker_describe(),
enchant_dict_suggest() 関数は、
null ではなく、空の配列を返すようになりました。

Exif

read_exif_data() 関数は削除されました。 exif_read_data() 関数を代わりに使うべきです。

フィルタ

  • FILTER_VALIDATE_URL フラグのための定数 FILTER_FLAG_SCHEME_REQUIRED と FILTER_FLAG_HOST_REQUIRED が削除されました。 scheme と host は（かつてもそうでしたが) 常に必須です。

  • filter_input() 関数などで使われている定数 INPUT_REQUEST と INPUT_SESSION は削除されました。 これらは実装されたことがなく、使うと常に警告が発生していました。

GD

  • 推奨されなくなっていた image2wbmp() 関数は削除されました。

  • 推奨されなくなっていた関数 png2wbmp() と jpeg2wbmp() が削除されました。

  • imagecropauto() 関数の mode 引数のデフォルトは -1 ではなくなりました。 IMG_CROP_DEFAULT を代わりに使うべきです。

  • Windows では、php_gd2.dll の名前が、php_gd.dll に変更されました。

GMP

gmp_random() 関数は削除されました。
gmp_random_range() や
gmp_random_bits() 関数を代わりに使うべきです。

Iconv

エラーが発生した時に errno を適切に設定していなかった iconv の実装はもはやサポートされなくなりました。

IMAP

  • imap_headerinfo() 関数で 未使用になっていた default_host 引数が削除されました。

  • imap_headerinfo() 関数のエイリアスだった imap_header() 関数は削除されました。

国際化関数

  • 推奨されなくなっていた定数 INTL_IDNA_VARIANT_2003 が削除されました。

  • 推奨されなくなっていた定数 Normalizer::NONE が削除されました。

LDAP

  • 推奨されなくなっていた関数
ldap_sort(),
ldap_control_paged_result(),
ldap_control_paged_result_response() は削除されました。

  • ldap_set_rebind_proc() のインターフェイスが変更されました。 callback 引数は空文字列を受け入れなくなりました。 null を代わりに使うべきです。

マルチバイト文字列

  • INI ディレクティブ mbstring.func_overload は削除されました。 関連する定数 MB_OVERLOAD_MAIL, MB_OVERLOAD_STRING, MB_OVERLOAD_REGEX も削除されています。 mb_get_info() 関数の "func_overload" と "func_overload_list" エントリも削除されています。

  • mb_parse_str() は、 結果の配列を指定しないと使えなくなりました。

  • たくさんの mbregex の関数エイリアスが削除されました。 どの関数を代わりに使うべきなのかは、以下の一覧を参照ください:

    • mbregex_encoding() → mb_regex_encoding()
    • mbereg() → mb_ereg()
    • mberegi() → mb_eregi()
    • mbereg_replace() → mb_ereg_replace()
    • mberegi_replace() → mb_eregi_replace()
    • mbsplit() → mb_split()
    • mbereg_match() → mb_ereg_match()
    • mbereg_search() → mb_ereg_search()
    • mbereg_search_pos() → mb_ereg_search_pos()
    • mbereg_search_regs() → mb_ereg_search_regs()
    • mbereg_search_init() → mb_ereg_search_init()
    • mbereg_search_getregs() → mb_ereg_search_getregs()
    • mbereg_search_getpos() → mb_ereg_search_getpos()
    • mbereg_search_setpos() → mb_ereg_search_setpos()

  • mb_ereg_replace() 関数の e 修正子が削除されました。 mb_ereg_replace_callback() 関数を代わりに使って下さい。

  • mb_ereg_replace() 関数に文字列でないパターン引数を渡すと、 ASCII コードポイントではなく、文字列として解釈されるようになりました。 以前のバージョンの振る舞いは、 明示的に chr() 関数を呼び出すことで復元できます。

  • mb_strpos(),
mb_strrpos(), mb_stripos(),
mb_strripos(), mb_strstr(),
mb_stristr(), mb_strrchr(),
mb_strrichr() 関数の
needle 引数は、空に出来るようになりました。

  • mb_decode_numericentity() 関数で内部的に使われていなかった 引数 is_hex は削除されました。

  • mb_strrpos() 関数の第三引数に、 オフセットではなくエンコーディングを渡していた古い振る舞いは削除されました。 明示的にオフセットに 0 を渡し、 第四引数にエンコーディングを渡す方法を代わりに使うべきです。

  • 文字エンコーディング ISO_8859-* のエイリアスは ISO8859-* に置き換えられました。 これは、iconv 拡張モジュールと相互運用性を向上させるためです。 アンダースコア付きの mbregex の ISO 8859 aliases (ISO_8859_* と ISO8859_*) も削除されています。

  • mb_ereg() と mb_eregi() 関数は、 マッチに成功した場合に true を返すようになりました。 これより前のバージョンでは、 matches が渡されなかった場合に 整数 1 が返されていました。 matches が渡された場合には max(1, strlen($matches[0])) が返されていました。

OCI8

  • OCI-Lob クラスは OCILob と呼ばれるようになり、 OCI-Collection クラスは OCICollection と呼ばれるようになりました。 これは、PHP 8 の arginfo 型アノテーションツールの 名前に関する規約で強制されたものです。

  • いくつかの関数エイリアスが推奨されなくなりました。

  • oci_internal_debug() 関数と そのエイリアス ociinternaldebug() は削除されました。

ODBC

  • odbc_connect() 関数は 接続を使い回さなくなりました。

  • odbc_exec() 関数で使われていなかった flags 引数が削除されました。

OpenSSL

  • openssl_seal() と openssl_open() 関数には method を渡すことが必須になりました。 なぜなら、以前のデフォルト値 "RC4" はセキュアでないと見なされているからです。

正規表現 (Perl互換)

不正なエスケープシーケンスを渡した場合、 もはやリテラルと解釈されなくなりました。 リテラルと解釈する振る舞いは X 修正子で必須でしたが、 無視されるようになっています。

PHP Data Objects(PDO)

  • デフォルトのエラーハンドリングのモードが "silent" から "exceptions" に変更されました。 詳細は Errors とエラーハンドリング を参照ください。

  • いくつかの PDOクラスのメソッドシグネチャが変更されました:

    • PDO::query(string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs)
    • PDOStatement::setFetchMode(int $mode, mixed ...$args)

PDO ODBC

php.ini ディレクティブ pdo_odbc.db2_instance_name は削除されました。

PDO MySQL

PDO::inTransaction() は、 PDO が管理しているおおよその情報ではなく、 実際のトランザクションの状態を報告するようになりました。 クエリが "暗黙のコミット" に依存していた場合、 PDO::inTransaction() は後に false を返します。 なぜなら、トランザクションが既にアクティブではないからです。

PostgreSQL

  • pg_connect() 関数で 推奨されなくなっていた、 接続文字列の代わりに複数の引数を受け入れる文法は もはやサポートされなくなりました。

  • 推奨されなくなっていた pg_lo_import() と pg_lo_export() 関数の、 最後の引数で接続を渡すシグネチャはサポートされなくなりました。 代わりに、接続は最初の引数で渡すべきです。

  • pg_fetch_all() 関数 は 結果セットの行が0行の場合に、false ではなく空の配列を返すようになりました。

Phar

phar に関連付けられたメタデータは、自動的にアンシリアライズされなくなりました。 これは、オブジェクトのインスタンス化やオートローディングなどに起因する、 潜在的なセキュリティ上の脆弱性を修正するためです。

リフレクション

  • メソッドシグネチャに関する変更

    • ReflectionClass::newInstance($args)
    • ReflectionFunction::invoke($args)
    • ReflectionMethod::invoke($object, $args)

    は、以下のように変更されました:

    • ReflectionClass::newInstance(...$args)
    • ReflectionFunction::invoke(...$args)
    • ReflectionMethod::invoke($object, ...$args)

    PHP 7 と PHP 8 の間で互換性を保たなければならないコードは、 両方のバージョンで互換性を取るために、以下のようなシグネチャが使えます:

    • ReflectionClass::newInstance($arg = null, ...$args)
    • ReflectionFunction::invoke($arg = null, ...$args)
    • ReflectionMethod::invoke($object, $arg = null, ...$args)

  • ReflectionType::__toString() メソッドは、 完全な型のデバッグ用の文字列表現を返すようになり、非推奨ではなくなりました。 特に、nullable な型に対しては、nullを代入できることを示す情報が含まれるようになります。 戻り値のフォーマットは安定しておらず、PHP のバージョンによって変わる可能性があります。

  • リフレクションの export() メソッドは削除されました。 代わりに、リフレクションオブジェクトを文字列にキャストすることができます。

  • ReflectionMethod::isConstructor() と ReflectionMethod::isDestructor() メソッドは インターフェイスの __construct() と __destruct() についても true を返すようになりました。 これより前のバージョンでは、クラスとトレイトのメソッドに対してだけ true を返していました。

  • ReflectionType::isBuiltin() メソッドは、 ReflectionNamedType クラスに移動しました。 ReflectionUnionType クラスには存在しなくなっています。

Sockets

  • 推奨されなくなっていた socket_addrinfo_lookup() 関数の flags に指定する AI_IDN_ALLOW_UNASSIGNED および AI_IDN_USE_STD3_ASCII_RULES は削除されました。

Standard PHP Library (SPL)

  • SplFileObject::fgetss() メソッドは削除されました。

  • SplFileObject::seek() は、 常に行の先頭にシークするようになりました。 これより前のバージョンでは、 >=1 を position に指定すると、次の行の先頭を探していました。

  • SplHeap::compare() はメソッドシグネチャを指定するようになりました。 このメソッドを実装する継承先のクラスは、 互換性のあるメソッドシグネチャを持たなければなりません。

  • SplDoublyLinkedList::push(),
SplDoublyLinkedList::unshift() および
SplQueue::enqueue() は、true ではなく
void を返すようになりました。

  • spl_autoload_register() 関数は、 引数が不正な場合には常に TypeError を発生させるようになりました。 よって、2番目の引数 do_throw は無視され、 false を設定すると、警告が発生します。

  • SplFixedArray クラスは Iterator ではなく IteratorAggregate を実装しました。 SplFixedArray::rewind(), SplFixedArray::current(), SplFixedArray::key(), SplFixedArray::next(), SplFixedArray::valid() は削除されました。 代替として、SplFixedArray::getIterator() が追加されました。 SplFixedArray を通じて明示的にイテレーションを行うあらゆるコードは、 SplFixedArray::getIterator() メソッドを使い Iterator を取得しなければなりません。 これは、SplFixedArray がネストされたループ中で安全に使えるようになったということです。

標準ライブラリ

  • assert() 関数は 文字列の引数を評価しなくなりました。 代わりに、他の引数と同じように扱われます。 assert('$a == $b') ではなく assert($a == $b) を使うべきです。 INI ディレクティブ assert.quiet_eval と 定数 ASSERT_QUIET_EVAL も削除されました。 なぜなら、もはや何の効果も無いからです。

  • parse_str() は、 結果の配列を指定しなければ使えなくなりました。

  • string.strip_tags フィルタは削除されました。

  • strpos(),
strrpos(),
stripos(),
strripos(),
strstr(),
strchr(),
strrchr(),
stristr() 関数の
needle
引数は常に文字列として解釈されるようになりました。
これより前のバージョンでは、
文字列でない引数は ASCII コードポイントと解釈されていました。
chr() 関数を明示的に呼ぶことで、
以前の振る舞いを復元できます。

  • strpos(),
strrpos(),
stripos(),
strripos(),
strstr(),
stristr(),
strrchr() 関数の
needle 引数は、空に出来るようになりました。

  • substr(), substr_count(), substr_compare(), iconv_substr() 関数の length 引数は null も指定できるようになりました。 null を指定した場合、 length 引数が指定されなかったことと同じように振る舞います。 よって、この場合、空文字列ではなく、残りの文字列を返します。

  • array_splice() 関数の length 引数は null も指定できるようになりました。 null を指定した場合、引数を省略した場合と同じ振る舞いをします。 よって、offset から配列の最後までの全ての要素を削除する動きになります。

  • vsprintf(),
vfprintf(),
vprintf() 関数の
args 引数は、配列であることが必須になりました。
これより前のバージョンでは、あらゆる型の値を受け入れていました。

  • password_hash() 関数の 'salt' オプションはサポートされなくなりました。 'salt' オプションを使うと警告が生成され、 指定された salt は無視されます。 そして生成された salt が代わりに使われます。

  • quotemeta() 関数は、空文字列を渡すと空文字列を返すようになりました。 これより前のバージョンでは、false を返していました。

  • 以下の関数は削除されました:

    • hebrevc()
    • convert_cyr_string()
    • money_format()
    • ezmlm_hash()
    • restore_include_path()
    • get_magic_quotes_gpc()
    • get_magic_quotes_runtime()
    • fgetss()

  • 定数 FILTER_SANITIZE_MAGIC_QUOTES は削除されました。

  • ($pieces, $glue) のような形で、implode() 関数を逆の引数の順番で呼ぶことはサポートされなくなりました。

  • parse_url() 関数は、 query および fragment が存在しないことと、空であることを区別するようになりました:

    • http://example.com/foo → query = null, fragment = null
    • http://example.com/foo? → query = "", fragment = null
    • http://example.com/foo# → query = null, fragment = ""
    • http://example.com/foo?# → query = "", fragment = ""
    これより前のバージョンでは、上の全ての場合で、query と fragment の値が null になっていました。

  • var_dump() と debug_zval_dump() 関数は INIディレクティブ precision ではなく serialize_precision を使って浮動小数点を印字するようになりました。 デフォルトの設定では、浮動小数点はこのデバッグ関数によって 全精度で印字されるようになるということです。

  • __sleep() が返す 配列に存在しないプロパティが含まれていた場合、 静かに無視されるようになりました。 これより前のバージョンでは、 そうしたプロパティは値 null を持つかのようにシリアライズされていました。

  • デフォルトの起動時のロケールは、常に "C" になりました。 デフォルトでは、どのロケールからも環境を継承しません。 これより前のバージョンでは、 LC_ALL は "C" に設定されていましたが、 LC_CTYPE は環境から情報を継承していました。 しかしながら、関数によっては、明示的に setlocale() を呼び出さないと 継承した環境を尊重しないものもあります。 ロケールをデフォルトから変えるためには、 setlocale() 関数を明示的に呼ぶことが常に必須になりました。

  • 非推奨になっていた crypt() 関数が DES にフォールバックする振る舞いが削除されました。 不明な salt フォーマットを crypt() 関数に渡すと、 弱い DES ハッシュにフォールバックするのではなく、 *0 という値になり、失敗するようになります。

  • crypt() 関数に、 SHA256/SHA512 の範囲外の round を指定すると、 最も近い境界値に切り詰めるのではなく、 *0 という値になり、失敗するようになりました。 これは、glibc の振る舞いと一致します。

  • 配列に比較結果が等しい要素が含まれている場合、ソートを行う関数の結果が変わる可能性があります。

  • コールバックを受け入れるあらゆる関数のうち、 リファレンスの引数を受け入れるように明示的に指定して「いない」 ものに対し、 リファレンスを使ったコールバックを渡すと警告が発生するようになりました。 例としては、 array_filter() や array_reduce() 関数があります。 これらでほとんどの関数の例を示していますが、全てではありません。

  • file_get_contents() 関数のように、 関数が使うHTTPストリームラッパーは、 デフォルトで HTTP/1.0 ではなく、 HTTP/1.1 を指定するようになりました。 これによって、クライアントの振る舞いが変わるわけではありませんが、 サーバーが異なるレスポンスを返す可能性があります。 古い振る舞いをさせるには、 以下のようにして 'protocol_version' ストリームコンテキストオプションを設定して下さい。

    <?php
    $ctx     = stream_context_create(['http' => ['protocol_version' => '1.0']]);
    echo     file_get_contents('http://example.org', false, $ctx);
    ?>

  • 明示的に salt を指定せず crypt() 関数を呼ぶことはサポートされなくなりました。 自動的に生成される salt で強いハッシュを生成したい場合、 代わりに password_hash() を使って下さい。

  • substr(),
mb_substr(),
iconv_substr(),
grapheme_substr() 関数は、
文字列の境界を越えたオフセットを一貫した形で処理するようになりました。
これより前のバージョンでは、空文字列ではなく false を返す場合がありました。

  • Windows では、 シェルを使い、プログラムを実行する関数 (proc_open(), exec(), popen() など) は、 一貫して %comspec% /s /c "$commandline" を使うようになりました。 これは、(追加のクォート無しで) $commandline を実行することと同じです。

Sysvsem

  • sem_get() 関数の auto_release 引数は、 int ではなく bool の値を受け入れるように変更されました。

Tidy

  • 内部的に使われていなかった use_include_path 引数が、 tidy_repair_string() 関数から削除されました。

  • tidy::repairString(), tidy::repairFile() が、staticメソッドになりました。

Tokenizer

  • T_COMMENT トークンは最後の改行文字を含まなくなりました。 改行文字はその後に続く T_WHITESPACE トークンに含まれるようになります。 注意すべきなのは、 T_COMMENT の後にホワイトスペースが続くとは限らないことです。 T_CLOSE_TAG やファイルの終端が続く場合もありえます。

  • 名前空間の中にある名前は、 T_NAME_QUALIFIED (Foo\Bar), T_NAME_FULLY_QUALIFIED (\Foo\Bar), T_NAME_RELATIVE (namespace\Foo\Bar) トークンを使って表現されるようになりました。 T_NS_SEPARATOR トークンは 単独の名前空間の区切り文字としてだけ使われます。 そして、グループ化されたuse宣言と一緒に使った場合にだけ文法的に合法です。

XMLReader

XMLReader::open(), XMLReader::xml() が staticメソッドになりました。 これらは、まだインスタンスメソッドとして呼び出すことが出来ますが、 クラスを継承し、これらのメソッドをオーバーライドする場合は、 それらは static として宣言する必要があります。

XML-RPC

XML-RPC 拡張モジュールは PECL に移動し、PHPの一部として配布されなくなりました。

Zip

ZipArchive::OPSYS_Z_CPM は削除されました(この名前は typo でした)。 ZipArchive::OPSYS_CPM を代わりに使って下さい。

Zlib

  • gzgetss() 関数が削除されました。

  • zlib.output_compression は、Content-Type: image/* を自動的に無効にすることはなくなりました。

Windows の PHP Test Packs

テストランナーの名前が、run-test.php から run-tests.php に変更されました。 これは、php-src の名前に合わせるためです。

User Contributed Notes

aphpguy at galaxy dot za dot net 06-Jul-2023 12:33
If you have older projects that break with PHP7 to 8 migration due to the loose comparison issue:

i.e. if ($a == 0) different behaviour between PHP 7 and PHP 8
(for case like $a = "" or $a = "123foo" and other cases listed at top)

replace in old code:

if ($a == 0) { .. }

with

if (cmp_eq($a, $b)) { .. }

Tested with a wide range of scenarios, even against arrays, booleans, file handles, pipe handles, objects, scalars and numbers.

So old code still behave like before.
Then both PHP8.x and older PHP up to ver 7.x will give the exact same boolean true or false output for loose comparisons.

function cmp_eq($a, $b) {
// If both $a and $b are of type strings, compare them as strings
if (is_string($a) && is_string($b)) { return $a == $b; } // may not be === because php says '42' equals '042' true yet '42' === '042' is false.

// If both $a and $b are numeric strings, compare them as numbers
if (is_numeric($a) && is_numeric($b)) { return $a == $b; }

// If $a is an empty string and $b is 0, or vice versa, return true
if (($a === '' && $b === 0) || ($a === 0 && $b === '')) { return true; }

// If $a is a non-numeric string and $b is 0, or vice versa, return true
if ((is_string($a) && ($a !== '') && ($b === 0)) || (($a === 0) && is_string($b) && ($b !== ''))) {
return true;
}
// special case '123abc' == 123 .. php 7 casts 123abc to 123, then 123 == 123 results in true. lets mimic that.
if ((is_string($a) && ($a !== '') && (is_numeric($b)) && ((bool)$b))) {
$number = filter_var($a, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); //"-234.56xyz"
return $number == $b;
}
if (is_numeric($a) && ((bool)$a) && is_string($b) && ($b !== '')) {
$number = filter_var($b, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); //"-234.56xyz"
return $a == $number;
}

// If $a is a number and $b is a non-numeric string, cast $a to string and compare
if (is_numeric($a) && is_string($b)) { return strval($a) == $b; }

// If $b is a number and $a is a non-numeric string, cast $b to string and compare
if (is_string($a) && is_numeric($b)) { return $a == strval($b); }

// If $a and $b are both non-numeric strings, compare them directly, we should return true if they are the same
return $a == $b;
} // end func cmp_eq

Note: the better way would be to port code to PHP 8, use strict variable typing and rather make use of the === and !== operators.

But in some cases having lots of old code to quickly patch, this might help.
1035041238 at qq dot com 15-Nov-2022 02:41
In PHP 8, an empty string is less than any number, an English letter is always bigger than any number.

More interesting are the punctuation marks and non-word characters, some bigger than numbers, some smaller than numbers

$string = '`~!@#$%^&*()-_=+[]{};:\'"\\|,.<>/?';

$number = 999999999999;

$str_len = strlen($string);

$bigger = $smaller = $equal = [];
for ( $i = 0; $i < $str_len; ++$i ) {
    if ( $string[$i] > $number ) {
        $bigger[] = $string[$i];
    } elseif ( $string[$i] < $number ) {
        $smaller[] = $string[$i];
    } else {
        $equal[] = $string[$i];
    }
}

var_dump( $bigger ); //['`', '~', '@', '^', '_', '=', '[', ']', '{', '}', ';', ':', '\', '|', '<', '>', '?']
var_dump( $smaller); //['!', '#', '$', '%', '&', '*', '(', ')', '-', '+', ''', '"', ',', '.', '/']
var_dump( $equal); //[]
retry, abort, fail 25-Feb-2022 11:57
The change in string to int comparison mentioned above (e.g. '' == 0 now equates to false) has some other nasty consequences:

$a = '';

// php 8

if ( $a < 0 ) echo 'true'; // echos true
if ( $a < -1) echo 'true'; // echos true
if ( $a < -100 ) echo 'true'; // echos true

// php 7

if ( $a < 0 ) echo 'true'; // no output
if ( $a < -1) echo 'true'; // no output
if ( $a < -100 ) echo 'true'; // no output

So in a situation where you may have a web form input and expected an empty value to equate to 0, watch out not only for == 0, != 0, and <= 0 comparisons, but ALL < or <= comparisons to negative integers.


推奨されなくなる機能

PHP コア

  • デフォルト値を持つ引数の後に、必須の引数が続く場合、デフォルト値は意味をなしません。 こうした書き方は PHP 8.0.0 から推奨されなくなります。 以下のようにしてデフォルト値を削除することで、機能を変更することなく解決できます:

    <?php
    function test($a = [], $b) {} // 変更前
    function test($a, $b) {} // 変更後
    ?>

    このルールの唯一の例外は、Type $param = null と書かれた引数です。 null をデフォルトにすることは、型が暗黙のうちに nullable であることを示しています。 この書き方はまだ許可されていますが、以下のようにして 明示的に nullable 型を使うことを推奨します:

    <?php
    function test(A $a = null, $b) {} // まだ許可されています
    function test(?A $a, $b) {} // 推奨される書き方
    ?>

  • exclude_disabled を明示的に false に指定して get_defined_functions() 関数を呼び出すことは推奨されなくなり、 結果として何も起きなくなりました。 get_defined_functions() 関数は無効な関数を返さなくなっています。

Enchant

  • enchant_broker_set_dict_path() と enchant_broker_get_dict_path() 関数は推奨されません。 これらの機能は libenchant < 1.5 や libenchant-2 では既に利用できないからです。

  • enchant_dict_add_to_personal() は推奨されません。 enchant_dict_add() を代わりに使って下さい。

  • enchant_dict_is_in_session() は推奨されません。 enchant_dict_is_added() を代わりに使って下さい。

  • enchant_broker_free() と enchant_broker_free_dict() は推奨されません。 代わりにオブジェクトを unset して下さい。

  • 定数 ENCHANT_MYSPELL と ENCHANT_ISPELL は推奨されません。

LibXML

libxml_disable_entity_loader() 関数は推奨されなくなりました。 libxml 2.9.0 がビルドに必須になったので、 外部エンティティの読み込みはデフォルトで無効になっていることが保証されています。 よって、(未だ脆弱な) LIBXML_NOENT を使わない限り、 XXE 攻撃を防ぐためにこの関数を使う必要は既になくなっています。 LIBXML_NOENT をまだ使っている場合は、 外部エンティティの読み込みを抑制するように、 libxml_set_external_entity_loader() を使ってコードをリファクタリングすることを推奨します。

PGSQL / PDO PGSQL

  • 定数 PGSQL_LIBPQ_VERSION_STR の値は、 PGSQL_LIBPQ_VERSION と同じになりました。 よって、PGSQL_LIBPQ_VERSION_STR は推奨されません。

  • pgsql 拡張モジュールの関数エイリアスは推奨されなくなりました。 代わりにどの関数を使うべきなのかは、以下の一覧を参照ください:

    • pg_errormessage() → pg_last_error()
    • pg_numrows() → pg_num_rows()
    • pg_numfields() → pg_num_fields()
    • pg_cmdtuples() → pg_affected_rows()
    • pg_fieldname() → pg_field_name()
    • pg_fieldsize() → pg_field_size()
    • pg_fieldtype() → pg_field_type()
    • pg_fieldnum() → pg_field_num()
    • pg_result() → pg_fetch_result()
    • pg_fieldprtlen() → pg_field_prtlen()
    • pg_fieldisnull() → pg_field_is_null()
    • pg_freeresult() → pg_free_result()
    • pg_getlastoid() → pg_last_oid()
    • pg_locreate() → pg_lo_create()
    • pg_lounlink() → pg_lo_unlink()
    • pg_loopen() → pg_lo_open()
    • pg_loclose() → pg_lo_close()
    • pg_loread() → pg_lo_read()
    • pg_lowrite() → pg_lo_write()
    • pg_loreadall() → pg_lo_read_all()
    • pg_loimport() → pg_lo_import()
    • pg_loexport() → pg_lo_export()
    • pg_setclientencoding() → pg_set_client_encoding()
    • pg_clientencoding() -> pg_client_encoding()

標準ライブラリ

  • true または false を返すソートの比較関数は、推奨されない警告を発生させるようになりました。 0より大きいか、0に等しいか、0より小さい整数を返す実装に置き換えるべきです。

    <?php
    // この実装を
    usort($array, fn($a, $b) => $a > $b);
    // 以下のように置き換えて下さい
    usort($array, fn($a, $b) => $a <=> $b);
    ?>

Zip

  • 空のファイルを ZipArchive として使うことは推奨されなくなりました。 Libzip 1.6.0 は空のファイルを正しいzipアーカイブとして受け入れなくなっています。 既に存在する回避策は、次のバージョンで削除される予定です。

  • Zip の手続き型の API は推奨されなくなりました。 ZipArchive クラスを代わりに使って下さい。 ZipArchive::statIndex() と for ループを以下のようにして使えば、 全てのエントリを処理できます:

    <?php
    // 手続き型のAPIを使ってループする
    assert(is_resource($zip));
    while (    $entry = zip_read($zip)) {
    echo     zip_entry_name($entry);
    }

    // オブジェクト指向のAPIを使ってループする
    assert($zip instanceof ZipArchive);
    for (    $i = 0; $entry = $zip->statIndex($i); $i++) {
    echo     $entry['name'];
    }
    ?>

リフレクション

  • ReflectionFunction::isDisabled() は推奨されなくなりました。 無効な関数に対して ReflectionFunction を生成することはできなくなっているためです。 このメソッドは常に false を返すようになっています。

  • ReflectionParameter::getClass(),
ReflectionParameter::isArray(),
ReflectionParameter::isCallable() は推奨されません。
ReflectionParameter::getType() と
ReflectionType API を代わりに使って下さい。

User Contributed Notes

dominique dot vienne at ik dot me 21-Jun-2021 01:23
If you try to get all methods / functions assigning an optional argument before a mandatory one, try this regex (single line)

<?php
function\s+[a-z][a-zA-Z0-9_]*\((?:\$[a-z][a-zA-Z0-9]*\s*,\s*)*
(?:\$[a-z][A-Za-z0-9_]*\s*=[^\$\)]+)+\$[a-z][a-zA-Z0-9_]*\)
?>

for
<?php
public function test($a, $b) {
$a = [];
$b = [$abc => $ss[],
];
}

private function too($c, $a = true, $b) {
}

protected function bar($a = []) {
}

public function foo($a, $b = true) {
}

public function fooBar32($a=true, $b = [], $c) {
}

private function oo_bAr($a = []) {
}
?>
it will match too() and fooBar32()

Have a nice migration! ;)


その他の変更

SAPI モジュールの変更

Apache2Handler

PHP モジュールの名前が php7_module から php_module に変更されました。

変更された関数

リフレクション

ReflectionClass::getConstants() と ReflectionClass::getReflectionConstants() の結果は 新しい引数 filter を経由してフィルタされるように変更されました。 この用途のために、以下の3つの新しい定数が追加されています:

  • ReflectionClassConstant::IS_PUBLIC
  • ReflectionClassConstant::IS_PROTECTED
  • ReflectionClassConstant::IS_PRIVATE

標準ライブラリ

数学関数 abs(), ceil(), floor(), round() は、 strict_types ディレクティブ を適切に尊重するようになりました。 PHP 8.0.0 より前のバージョンでは、 たとえ strict モードであっても、 最初の引数の型を強制的に自動変換していました。

Zip

  • ZipArchive::addGlob() と ZipArchive::addPattern() メソッドは 配列 options の値に、以下の値を追加で受け入れるようになりました:

    • flags
    • comp_method
    • comp_flags
    • env_method
    • enc_password

  • ZipArchive::addEmptyDir(),
ZipArchive::addFile(),
ZipArchive::addFromString() に新しい引数
flags が追加されました。
これによって、名前のエンコーディング
(ZipArchive::FL_ENC_*)
とエントリの置換 (ZipArchive::FL_OVERWRITE) が管理できるようになります。

  • ZipArchive::extractTo() メソッドは、ファイルの変更時間も復元するようになりました。

拡張モジュールに対するその他の変更

CURL

  • CURL 拡張モジュールは、libcurl 7.29.0 以降が必須になりました。

  • 推奨されなくなっていた curl_version() 関数の version 引数が削除されました。

日付と時刻

DatePeriod クラスが、 (Traversable ではなく) IteratorAggregate を実装しました。

DOM

DOMNamedNodeMap と DOMNodeList が、 (Traversable ではなく) IteratorAggregate を実装しました。

国際化関数

IntlBreakIterator と ResourceBundle が、 (Traversable ではなく) IteratorAggregate を実装しました。

Enchant

enchant 拡張モジュールは、利用可能な場合は、デフォルトで libenchant-2 を使うようになりました。 libenchant バージョン1 もまだサポートしていますが、推奨されませんし、将来削除される可能性があります。

GD

  • imagepolygon(), imageopenpolygon(), imagefilledpolygon() 関数の num_points 引数はオプションになりました。 つまり、これらの関数は3つ、または4つの引数で呼び出すことが出来るということです。 この引数が省略された場合、この値は count($points)/2 で計算されます。

  • 現在の補間メソッドを取得するために、imagegetinterpolation() 関数が追加されました。

JSON

JSON 拡張モジュールは無効にできなくなりました。 date 拡張モジュールと同様に、PHP をビルドするために常に必須になっています。

マルチバイト文字列

Unicode データのテーブルが、バージョン 13.0.0 に更新されました。

PDO

PDOStatement は、 (Traversable ではなく) IteratorAggregate を実装しました。

LibXML

libxml の最低バージョンが 2.9.0 になりました。 これにより、外部エンティティの読み込みがデフォルトで無効であることが保証されるようになりました。 よって、XXE攻撃を防ぐために追加の手順を踏む必要はありません。

MySQLi / PDO MySQL

  • mysqlnd を使わない (これはデフォルトであり、推奨されるオプションです) 場合、 サポートされる libmysqlclient の最低バージョンは 5.5 になりました。

  • mysqli_result は、 (Traversable ではなく) IteratorAggregate を実装しました。

PGSQL / PDO PGSQL

PGSQL と PDO PGSQL 拡張モジュールは、libpq 9.1 以降が最低限必要になりました。

Readline

対話的なプロンプトが始まる前に (つまり、 auto_prepend_file を実行中に) readline_completion_function() を呼ぶと、 デフォルトの対話プロンプトの補完関数を上書きするようになりました。 PHP 8.0.0 より前のバージョンでは、 readline_completion_function() 関数は 対話的なプロンプトが始まった後に呼び出したときにだけ動作していました。

SimpleXML

SimpleXMLElement は、 RecursiveIterator を実装し、 SimpleXMLIterator の機能を吸収しました。 SimpleXMLIterator は、 SimpleXMLElement を継承しただけのものです。

INI ファイルの扱いの変更

  • com.dotnet_version は、dotnet オブジェクトで使う、 .NET framework のバージョンを選ぶための新しいINIディレクティブです。

  • zend.exception_string_param_max_len は、文字列化されたスタックトレースの引数中の、 文字列の最大の長さを設定する新しいINIディレクティブです。

EBCDIC

EBCDIC ターゲットはサポートされなくなりました。 しかし、そもそもまだ動いているわけでもなさそうです。

パフォーマンスに関わる変更

  • ジャストインタイム (JIT) コンパイラが opcache 拡張モジュールに追加されました。

  • 隙間がない配列で array_slice() 関数を使う場合、 最初のオフセットを探すために配列全体を走査しなくなりました。 これによって、オフセットが巨大、かつサイズが小さい場合に、 関数の実行時間が著しく改善する可能性があります。

  • LC_CTYPE ロケールが "C" の場合 (これはデフォルトです)、 strtolower() 関数は SIMD 実装を使うようになりました。

User Contributed Notes

barry dot nelson at amobiledevice dot com 16-Jan-2023 12:18
If loading the PHP8 apache module on SuSe Linux, the configuration scripts incorrectly try to load it with automatically generated load statement of:
LoadModule php8_module                     /usr/lib64/apache2/mod_php8.so
This does not work, the patch below fixes the conf file generator...

--- /usr/share/apache2/get_module_list    2023-01-14 22:41:49.586825349 -0500
+++ /usr/share/apache2/get_module_list    2023-01-14 22:42:02.171600410 -0500
@@ -91,4 +91,8 @@
     esac

+    if [ "$module_id" = "php8_module" ]; then
+        module_id="php_module"
+    fi
+
     if [[ -f $module_path ]]; then
         printf "LoadModule %-30s %s\n" $module_id $module_path >&3


PHP 7.3.x から PHP 7.4.x への移行

目次

  • 新機能
  • 新しいクラスとインターフェイス
  • 新しく追加された関数
  • 新しいグローバル定数
  • 下位互換性のない変更点
  • PHP 7.4.x で推奨されなくなる機能
  • 削除された拡張モジュール
  • その他の変更
  • Windows のサポート

このマイナーバージョンアップには数多くの 新機能 があります。また、互換性がない変更 が多少あるので、実運用環境の PHP をこのバージョンにあげる前にはテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.0.x, 7.1.x, 7.2.x, 7.3.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

PHP コア

型付きプロパティ

クラスのプロパティは、新たに型宣言をサポートするようになりました

<?php
class User {
public int $id;
public string $name;
}
?>
上の例は、 $user->id には int の 値だけを、そして $user->name には string の値だけを代入できるように強制します。

アロー関数

アロー関数は、暗黙的な値スコープを持った関数を定義する簡便な文法を提供します。

<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>

戻り値の型を狭めたり、引数の型を広げたりする

次のようなコードが動作するようになります:

<?php
class A {}
class B extends A {}

class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
}
?>
完全な型の変位指定は、オートローディングが使われている場合のみ有効です。単一ファイル内では、型の参照が循環参照していない場合のみ可能です。なぜなら、全てのクラスは参照する前に利用可能でなければならないからです。

Null 合体代入演算子

<?php
$array['key'] ??= computeDefault();
// は、以下にほぼ等しい
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
?>

配列内での値のアンパック

<?php
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>

数値リテラルのセパレータ

数値リテラルは、桁と桁の間にアンダースコアを挿入できるようになりました。

<?php
6.674_083e-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary
?>

弱い参照

弱い参照 により、オブジェクトが破棄されるのを妨げないオブジェクトへの参照を保持することが可能です。

__toString() から例外をスロー可能に

__toString() から例外をスローできるようになりました。以前は、この場合には致命的なエラーが発生していました。この関数内に既に存在する、回復可能な致命的なエラーは Error 例外クラスに変換されます。

CURL

CURLFile は、CURL拡張モジュールが libcurl 7.56.0 より新しいものでビルドされた場合は、通常のファイル名に加えて、ストリームラッパーをサポートするようになります。

Filter

FILTER_VALIDATE_FLOAT フィルタは min_range と max_range オプションをサポートするようになりました。 これは、FILTER_VALIDATE_INT と同じセマンティクスです。

FFI

FFI は、ネイティブ関数を呼び出したり、ネイティブな値にアクセスしたり、Cライブラリで定義されたデータ構造を生成/アクセスする簡単な方法を提供する新しい拡張モジュールです。

GD

画像に scatter フィルタを適用するための IMG_FILTER_SCATTER が追加されました。

Hash

Castagnoli 多項式を使った crc32c ハッシュが追加されました。 CRC32 バリアントは、 iSCSI, SCTP, Btrfs, ext4 のようなストレージシステムで使われています。

マルチバイト文字列

str_split() と同等の機能を提供するものの、バイトではなく、コードポイント単位で動作する mb_str_split() 関数が追加されました。

OPcache

コードを事前ロードする機能 がサポートされました。

正規表現 (Perl互換)

preg_replace_callback() および preg_replace_callback_array() 関数は、追加のフラグを受け入れるようになりました。 PREG_OFFSET_CAPTURE と PREG_UNMATCHED_AS_NULL です。これは、コールバック関数に渡される matches配列のフォーマットに影響します。

PDO

ユーザー名とパスワードが、PDO DSN の一部として指定できるようになりました。対象となるのは、mysql, mssql, sybase, dblib, firebird, oci ドライバです。以前は、この機能は pgsql ドライバでのみサポートされていました。ユーザー名/パスワードがコンストラクタとDSNの両方で指定された場合は、コンストラクタの指定が優先します。

SQLクエリのクエスチョンマークが、パラメータのプレースホルダーとして解釈されるのを防ぐためにエスケープできるようになりました。?? を書くことで、単一のクエスチョンマークをデータベースに送信できるようになります。PostgreSQL のJSONのキーが存在するかを確認する演算子 (?) として使って下さい。

PDO_OCI

PDOStatement::getColumnMeta() が利用できるようになりました。

PDO_SQLite

PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT) は、ステートメントが読み取り専用かどうか、つまりそれがデータベースを変更しないかをチェックできるようになりました。

PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES,
true) 関数によって、PDO::errorInfo() と
PDOStatement::errorInfo() 経由で SQLite3
の拡張結果コードを使えるようになりました。

SQLite3

最新の拡張結果コードを取得するために、 SQLite3::lastExtendedErrorCode() が追加されました。

SQLite3::enableExtendedResultCodes($enable = true) が追加されました。これによって、 SQLite3::lastErrorCode() が拡張結果コードを返すようになります。

標準ライブラリ

strip_tags() をタグ名の配列とともに使う

strip_tags() 関数は、許可するタグの配列も受け入れるようになりました。つまり、strip_tags($str, '<a><p>') の代わりに、 strip_tags($str, ['a', 'p']) と書けるようになったということです。

カスタムオブジェクトのシリアル化

新しいカスタムオブジェクトのシリアル化の機構が追加されました。これは、新しいふたつのマジックメソッド __serialize と __unserialize を使います。

<?php
// オブジェクトに必要な状態を全て保持した配列を返す
public function __serialize(): array;

// 与えられた data 配列から、オブジェクトの状態を復元する
public function __unserialize(array $data): void;
?>
新しいシリアル化の機構は、 Serializable インターフェイス を置き換えるものです。 Serializable インターフェイスは将来非推奨になるでしょう。

引数を渡さずに array_merge 系の関数を使用する

array_merge() および
array_merge_recursive()
関数は、引数なしでも呼び出せるようになりました。この場合、空の配列が返されます。これは、array_merge(...$arrays)
のように、... 演算子と組み合わせて使う時に便利です。

proc_open() 関数

proc_open() 関数は、コマンドの文字列ではなく、配列を受け入れるようになりました。この場合、プロセスは(shellを通さず) 直接オープンされ、PHP が必要な引数のエスケープをすべて行います。

<?php
proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);
?>

proc_open() が、 redirect と null ディスクリプタをサポートしました。

<?php
// シェルにおける 2>&1 のような操作
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);
// シェルにおける 2>/dev/null や 2>null のような操作
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);
?>

libargon なしでの argon2i(d)

PHP が libargon を使わずにビルドされた場合、password_hash() 関数は sodium 拡張モジュールの argon2i と argon2id を使った実装を使うようになります。

User Contributed Notes

wow-apps.pro 26-Feb-2020 08:42
<?php

// How to get property type? For example for testing:

class Foo
{
    private int $num;
    private bool $isPositive;
    private $notes;
}

$reflection = new \ReflectionClass(Foo::class);
$classProperties = $reflection->getProperties(\ReflectionProperty::IS_PRIVATE);
foreach ($classProperties as $classProperty) {
    var_dump((string) $classProperty->getType());
}

/**
 * Result:
 * "int"
 * "bool"
 * ""
 */
Rain 27-Jan-2020 08:44
It should be noted that typed properties internally are never initialized to a default null. Unless of course you initialize them to null yourself. That's why you will always going to encounter this error if you try to access them before initialization.

**Typed property foo::$bar must not be accessed before initialization**

<?php
class User
{
    public $id;
    public string $name; // Typed property (Uninitialized)
    public ?string $age = null; //  Typed property (Initialized)
}

$user = new User;
var_dump(is_null($user->id)); // bool(true)
var_dump(is_null($user->name)); // PHP Fatal error: Typed property User::$name must not be accessed before initialization
var_dump(is_null($user->age));// bool(true)
?>

Another thing worth noting is that it's not possible to initialize a property of type object to anything other than null.  Since the evaluation of properties happens at compile-time and object instantiation happens at runtime. One last thing, callable type is not supported due to its context-dependent behavior.


新しいクラスとインターフェイス

Reflection

  • ReflectionReference

User Contributed Notes

There are no user contributed notes for this page.


新しく追加された関数

PHP コア

  • get_mangled_object_vars()
  • password_algos()
  • sapi_windows_set_ctrl_handler()

GD

  • imagecreatefromtga()

マルチバイト文字列

  • mb_str_split()

OpenSSL

  • openssl_x509_verify()

プロセス制御

  • pcntl_unshare()

SQLite3

  • SQLite3::backup()
  • SQLite3Stmt::getSQL()

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

PHP コア

  • PHP_WINDOWS_EVENT_CTRL_C
  • PHP_WINDOWS_EVENT_CTRL_BREAK

マルチバイト文字列

  • MB_ONIGURUMA_VERSION

Socket

FreeBSD特有の、以下のオプションが追加されました:

  • SO_LABEL
  • SO_PEERLABEL
  • SO_LISTENQLIMIT
  • SO_LISTENQLEN
  • SO_USER_COOKIE

Tidy

  • TIDY_TAG_ARTICLE
  • TIDY_TAG_ASIDE
  • TIDY_TAG_AUDIO
  • TIDY_TAG_BDI
  • TIDY_TAG_CANVAS
  • TIDY_TAG_COMMAND
  • TIDY_TAG_DATALIST
  • TIDY_TAG_DETAILS
  • TIDY_TAG_DIALOG
  • TIDY_TAG_FIGCAPTION
  • TIDY_TAG_FIGURE
  • TIDY_TAG_FOOTER
  • TIDY_TAG_HEADER
  • TIDY_TAG_HGROUP
  • TIDY_TAG_MAIN
  • TIDY_TAG_MARK
  • TIDY_TAG_MENUITEM
  • TIDY_TAG_METER
  • TIDY_TAG_NAV
  • TIDY_TAG_OUTPUT
  • TIDY_TAG_PROGRESS
  • TIDY_TAG_SECTION
  • TIDY_TAG_SOURCE
  • TIDY_TAG_SUMMARY
  • TIDY_TAG_TEMPLATE
  • TIDY_TAG_TIME
  • TIDY_TAG_TRACK
  • TIDY_TAG_VIDEO

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

PHP コア

配列でない値を配列スタイルでアクセスした場合

null, bool, int, float または resource 型を ($null["key"] のように) 配列としてアクセスしようとすると、警告が生成されるようになりました。

get_declared_classes() 関数

get_declared_classes() 関数は、まだインスタンス化されていない無名クラスを返さなくなりました。

fn キーワード

fn は、予約語になりました。特に、関数名やクラス名として使うことはできなくなりました。メソッド名やクラスの定数名の場合は使用できます。

ファイルの最後の <?php タグ

ファイルの最後の (改行が最後に付かない) <?php タグは、PHPタグの開始タグとして解釈されるようになりました。以前は、短い形式の開始タグ <? の後にリテラル php を続けたものとして解釈されるか、(short_open_tag=1 の場合は) 文法エラー になるか、(short_open_tag=0 の場合は) <?php というリテラルとして解釈されていました。

ストリームラッパー

ストリーム上で include/require を使う場合、streamWrapper::stream_set_option() が STREAM_OPTION_READ_BUFFER オプション付きで呼び出されるようになります。カスタムのストリームラッパーの実装は 警告を回避するために streamWrapper::stream_set_option() を実装する必要があるかもしれません (不十分な実装に対しては常に false を返します)

シリアル化

シリアル化フォーマット o は削除されました。 PHP によって生成されなくなるので、手動で組まれた文字列のシリアル化を復元する場合のみ、壊れる場合があります。

パスワードアルゴリズムの定数

パスワードハッシュのアルゴリズムの識別子は、数値型ではなく、nullable な文字列型になりました。

  • PASSWORD_DEFAULT は int型の 1 でしたが、 string の '2y' になりました。 (PHP 7.4.0, 7.4.1, 7.4.2 では null でした)
  • PASSWORD_BCRYPT は int型の 1 でしたが、string の '2y' になりました。
  • PASSWORD_ARGON2I は int型の 2 でしたが、string の 'argon2i' になりました。
  • PASSWORD_ARGON2ID は int型の 3 でしたが、string の 'argon2id' になりました。

PASSWORD_DEFAULT, PASSWORD_BCRYPT, PASSWORD_ARGON2I, および PASSWORD_ARGON2ID 定数を正しく使っているアプリケーションは、正しく動作し続けるはずです。

htmlentities() 関数

htmlentities() 関数は 基本的なエンティティ置換だけをサポートしているエンコーディングで使われた場合、 (E_STRICT ではなく) E_NOTICE を発生させるようになりました。E_NOTICE が発生するのは、htmlspecialchars() の場合と同等です。

fread() および fwrite() 関数

fread() と fwrite() 関数は、操作に失敗した場合に false を返すようになりました。以前は空文字列か 0 を返していました。EAGAIN/EWOULDBLOCK は、失敗と見做されません。

これらの関数は、読み取り専用のリソースに書き込もうとして失敗したような場合に E_NOTICE を発生させるようになりました。

BCMath

BCMath 関数は、"32foo" のような不完全な数値が渡された場合に警告を生成するようになりました。以前はそうした引数は0として解釈されていました。

CURL

CURLFile をシリアル化しようとすると、例外が発生するようになりました。以前は、シリアル化を復元しようとした場合のみ、例外が発生していました。

CURLPIPE_HTTP1 は非推奨になり、cURL 7.62.0 からサポートされなくなりました。

curl_version() 関数の $version 引数は推奨されません。デフォルトの CURLVERSION_NOW 以外の値が渡された場合、警告が生成され、渡された引数は無視されます。

日付と時刻

DateTime や DateTimeImmutable のインスタンスに対して var_dump() 類似の関数を呼び出しても、オブジェクトでアクセス可能なプロパティのみを表示するようになりました。

DateInterval オブジェクトを ( ==, < などを使って) 比較した場合、警告が出て常に false が返されるようになりました。以前は、プロパティがない場合、全ての DateInterval オブジェクトが等しいと見做されていました。

国際化関数

idn_to_ascii() と idn_to_utf8() 関数のデフォルト値は、非推奨の INTL_IDNA_VARIANT_2003 ではなく INTL_IDNA_VARIANT_UTS46 となりました。

MySQLi

組み込みサーバーの機能は削除されました。少なくとも PHP 7.0 以降、この機能は壊れていました。

ドキュメントに書かれていない mysqli::$stat プロパティは削除され、mysqli::stat() に置き換えられました。

OpenSSL

openssl_random_pseudo_bytes() 関数は、エラーが発生した場合に例外をスローするようになりました。random_bytes() 関数も同じです。 特に、リクエストされたバイト数が0以下の場合には、 Error がスローされ、十分なランダム性が得られなかった場合は Exception が生成されます。 $crypto_strong の出力引数は、 例外がスローされなかった場合は常に true であることが保証されるので、明示的なチェックは不要です。

Regular Expressions (Perl互換)

PREG_UNMATCHED_AS_NULL モードが使われた場合、後に続くマッチしなかったキャプチャグループにも null (offset キャプチャが有効になっていた場合は [null, -1] になります) が設定されるようになりました。 これは、$matches のサイズが常に同じになることを意味します。

PDO

PDO や PDOStatement のインスタンスをシリアル化しようとすると、PDOException ではなく Exception が生成されるようになりました。これは、シリアル化をサポートしていない他の内部的なクラスと一貫した挙動です。

ReflectionClassConstant, ReflectionMethod, ReflectionProperty のクラス定数の値が変更されました。

リフレクション

リフレクションオブジェクトをシリアル化しようとすると、例外を生成するようになりました。リフレクションオブジェクトのシリアル化はこれまでサポートされたことはなく、壊れたリフレクションオブジェクトを返していました。このバージョンから、明示的に禁止されました。

Standard PHP Library (SPL)

ArrayObject インスタンスに対して get_object_vars() 関数を呼ぶと、ArrayObject そのもの(またはそのサブクラス) のプロパティを常に返すようになりました。以前は、ArrayObject::STD_PROP_LIST フラグが指定されない限り、ラップされた 配列/オブジェクト の値を返していました。

他に影響を受ける操作として、以下が挙げられます:

  • ReflectionObject::getProperties()
  • reset(), current() など。 Iterator メソッドを代わりに使ってください。
  • オブジェクトのプロパティをリストとして扱うその他の操作も、影響を受ける可能性があります。 たとえば array_walk() 関数が挙げられます。

(array) キャストは影響を受けません。この操作は引き続き、ラップされた配列を返すか、ArrayObject のプロパティを返します。これは、ArrayObject::STD_PROP_LIST フラグが指定されたかどうかによって異なります。

SplPriorityQueue::setExtractFlags() は、0を渡された場合に例外をスローするようになりました。以前は、次の配列を展開する操作の際に回復可能な致命的なエラーを生成していました。

ArrayObject, ArrayIterator, SplDoublyLinkedList および SplObjectStorage は、Serializable に加えて、新たに __serialize() と __unserialize() 機構をサポートしました。 これによって、古いPHPバージョンでシリアル化されたペイロードはまだ復元可能であることを意味しますが、PHP 7.4 で生成された新しいペイロードを、古いバージョンは理解しないことを意味します。

Tokenizer

token_get_all() 関数は、トークンストリームに穴を開けるのではなく、T_BAD_CHARACTER トークンを生成するようになりました。

外部から入力されるCookie

PHP 7.4.11 以降は、セキュリティ上の理由により、 外部から入力される Cookie の 名前 はurlデコードされなくなりました。

User Contributed Notes

happydog at kennel17 24-Jan-2021 11:23
Re: "The o serialization format has been removed. As it is never produced by PHP, this may only break unserialization of manually crafted strings."

This little-o serialisation format was used by PHP3 but was never generated by PH PHP4 or above.  The deserialization code still recognised it, though, for reasons of backwards-compatibility with PHP3.

However, based on a bit of investigation, it looks like this code has been broken for about 15 years, so although this is listed as a deprecation, in practice it wasn't.

See this Stack Overflow question for a really great answer, with a lot more detail about this: https://stackoverflow.com/questions/65289729/what-was-phps-o-serialization-format-for


PHP 7.4.x で推奨されなくなる機能

PHPコア

明示的に括弧で囲わずに三項演算子をネストする

三項演算子をネストする場合、演算の順番を示すために明示的に括弧で囲わなければならなくなりました。以前は、括弧を使わなかった場合、左結合の演算がほとんどの場合期待した動作になりませんでした。

<?php
1 ? 2 : 3 ? 4 : 5; // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok
1 ? 2 : (3 ? 4 : 5); // ok
?>

2番目のオペランドをネストさせる場合は、括弧は必須では ありません。 なぜなら、これについては曖昧さがなく、結合法則に影響がないからです。

1 ? 2 ? 3 : 4 : 5 // ok

波括弧を使った、配列や文字列のオフセットへのアクセス

波括弧を使って配列や文字列のオフセットにアクセスする文法は推奨されません。$var{$idx} でなはく $var[$idx] を使って下さい。

(real) によるキャストと is_real() 関数

(real) によるキャストは推奨されません。 (float) を代わりに使って下さい。

is_real() 関数も同様に推奨されません。 is_float() 関数を使って下さい。

$this が使われている場合に、$this のバインドを解除する

$this を使っている static でないクロージャの $this のバインドを解除することは推奨されません。

親クラスがない場合における parent キーワードの利用

親クラスがないクラス内で parent を使うのは推奨されませんし、将来的にはコンパイル時にエラーが発生することになるでしょう。 現状では、この推奨されないエラーは、実行時に親クラスに対してアクセスされた場合に生成されます。

php.ini における allow_url_include オプション

allow_url_include iniディレクティブは推奨されません。これを有効にすると、起動時に推奨されない警告が生成されます。

基数を変更する関数における不正な文字

base_convert(), bindec(), octdec() および hexdec() 関数に不正な文字を渡すと、推奨されない警告が生成されるようになりました。 あたかも不正な文字が存在しないかのように結果は計算されます。空白文字が前後にあったり、(基数によっては) 0x をプレフィックスとして指定することも可能です。

オブジェクトに対する array_key_exists() 関数の使用

オブジェクトに対する array_key_exists()
関数の使用は、推奨されません。代わりに、isset() または
property_exists() を使って下さい。

マジッククォート関数

get_magic_quotes_gpc() や get_magic_quotes_runtime() 関数は推奨されません。これらの関数は常に false を返します。

hebrevc() 関数

hebrevc() 関数は推奨されません。 nl2br(hebrev($str)) で置き換えられますが、Unicode RTL のサポートを使う方が好ましいです。

convert_cyr_string() 関数

convert_cyr_string() 関数は推奨されません。
mb_convert_string(),
iconv() または UConverter
のいずれかで置き換えることができます。

money_format() 関数

money_format() 関数は推奨されません。 intl の NumberFormatter 機能に置き換えられました。

ezmlm_hash() 関数

ezmlm_hash() 関数の使用は推奨されません。

restore_include_path() 関数

restore_include_path() 関数の使用は推奨されません。 ini_restore('include_path') に置き換えることができます。

Implode 関数の、歴史的なパラメータ順序

implode() 関数に逆の順番でパラメータを渡すのは推奨されなくなりました。implode($parts, $glue) ではなく、 implode($glue, $parts) を使ってください。

COM

大文字小文字を区別せず、定数を登録することで型のライブラリをインポートすることは推奨されません。

Filter

FILTER_SANITIZE_MAGIC_QUOTES は推奨されません。 FILTER_SANITIZE_ADD_SLASHES を代わりに使って下さい。

マルチバイト文字列

mb_ereg_replace() に文字列でないパターンを渡すことは推奨されません。現状は、文字列でないパターンは ASCII コードポイントと解釈されます。PHP 8 では、パターンは文字列として解釈されるようになります。

mb_strrpos() 関数に、3番目のパラメーターとしてエンコーディングを渡すのは推奨されません。代わりに 0から始まるオフセットを渡すか、4番目のパラメーターとしてエンコーディングを渡すようにします。

LDAP

ldap_control_paged_result_response() と
ldap_control_paged_result() 関数は推奨されません。
ページングの制御は、ldap_search()
を代わりに使うことで行なえます。

Reflection

ReflectionType::__toString() を呼び出すと、推奨されない警告が生成されるようになりました。このメソッドは ReflectionNamedType::getName() を使うことが好ましいために、PHP 7.1 から推奨されていませんでしたが、技術的な理由によって、推奨されない警告をこれまで発生させてきませんでした。

Reflection クラスの全ての export() メソッドは推奨されなくなりました。次のようにして、Reflection オブジェクトを生成し、string に変換するようにして下さい:

<?php
// ReflectionClass::export(Foo::class, false) is:
echo new ReflectionClass(Foo::class), "\n";

// $str = ReflectionClass::export(Foo::class, true) is:
$str = (string) new ReflectionClass(Foo::class);
?>

Socket

glibc で推奨されなくなったため、socket_addrinfo_lookup() 関数の AI_IDN_ALLOW_UNASSIGNED と AI_IDN_USE_STD3_ASCII_RULES フラグの使用は推奨されません。

User Contributed Notes

Techlemur 13-Nov-2020 08:58
^((?!\().*)(\?[^php]).*(\:)([\s\v]+)(?!\().*[^\/](\?)([\s\v\h]*).*(\:[^=])
Regex to find deprecated nested ternaries
Ahmad Asjad 03-Jun-2020 10:01
(\?[^php]).*(\:).*(\?).*(\:[^=])
Above regex can help others to find the nested ternary operator


削除された拡張モジュール

以下の拡張モジュールは、PECLに移され、PHPの配布物からは削除されました。これらの拡張モジュールのPECL版は、ユーザーが必要とすれば作られるでしょう。

  • Firebird/Interbase - InterBase と/または Firebird ベースのデータベースへのアクセスは、PDO Firebird ドライバで利用可能です。
  • Recode
  • WDDX

User Contributed Notes

There are no user contributed notes for this page.


その他の変更

パフォーマンスの向上

PHP コア

array_key_exists() 関数で使うための特別な VM opcode が追加されました。これにより、これが静的に解決される場合のパフォーマンスが向上します。名前空間内にあるコードは、 \array_key_exists() を書くか、明示的に関数を import する必要があるかもしれません。

正規表現 (Perl互換)

UTF-8モード("u" 修飾子) が同じ文字列に対して繰り返し呼ばれた(但し異なるオフセットで呼ばれる)場合、UTF-8 として正しいかどうかの確認は一度だけ行われるようになります。

INIファイルのハンドリングに対する変更

zend.exception_ignore_args は、 例外から生成されたスタックトレースに引数を含めたり、除外したりするための新しい INIディレクティブです。

opcache.preload_user は、指定されなければ root として実行されてしまう場合(これはセキュリティ上の理由で禁止されています) に、事前ロードされたコードを実行するユーザーアカウントを指定するための新しいINIディレクティブです。

pkg-config への移行

たくさんの拡張モジュールが、ライブラリへの依存性を検知するために、明示的に pkg-config に移行しました。一般的には、このことは 以前 --with-foo-dir=DIR に似た指定をしていたのが、--with-foo が使うだけで済むようになるということです。 カスタムライブラリのパスは PKG_CONFIG_PATH にディレクトリを追加するか、明示的に FOO_CFLAGS と FOO_LIBS でコンパイルオプションを指定することができます。

以下の拡張モジュールや SAPI が影響を受けます:

  • CURL:
    • --with-curl は、ディレクトリを受け入れません。
  • Enchant:
    • --with-enchant は、ディレクトリを受け入れません。
  • FPM:
    • --with-fpm-systemd オプションは、pkg-config が libsystem をチェックする用途だけに使われるようになりました。libsystemd の最小バージョンは 209 です。
  • GD:
    • --with-gd オプションは --enable-gd (拡張モジュール全部を有効にする場合) と --with-external-gd (バンドルされたものではなく、外部のlibgdを使う場合) になりました。
    • --with-png-dir は削除されました。libpng はビルドに必須です。
    • --with-zlib-dir は削除されました。zlib はビルドに必須です。
    • --with-freetype-dir は、--with-freetype になりました。
    • --with-jpeg-dir は、--with-jpeg になりました。
    • --with-webp-dir は、--with-webp になりました。
    • --with-xpm-dir は、 --with-xpm になりました。
  • IMAP:
    • --with-kerberos-systemd は、ディレクトリを受け入れません。
  • Intl:
    • --with-icu-dir は削除されました。 --enable-intl が渡された場合、libicu が常に必須になります。
  • LDAP:
    • --with-ldap-sasl は、ディレクトリを受け入れません。
  • Libxml:
    • --with-libxml-dir は削除されました。
    • --enable-libxml は、 --with-libxml になりました。
    • --with-libexpat-dir は --with-expat にリネームされ、ディレクトリを受け入れなくなりました。
  • Litespeed:
    • --with-litespeed は、 --enable-litespeed になりました。
  • Mbstring:
    • --with-onig オプションは削除されました。 --disable-mbregex が指定されない限り、libonig が必須です。
  • ODBC:
    • --with-iodbc は、ディレクトリを受け入れません。
    • ディレクトリを指定せずに --with-unixODBC を使うと、pkg-config を利用するようになります(望ましい)。libodbc.pc がない古いバージョンのために、ディレクトリもまだ受け入れ可能です。
  • OpenSSL:
    • --with-openssl は、ディレクトリを受け入れません。
  • PCRE:
    • --with-pcre-regex オプションは削除されました。 代わりに、バンドルされたものではなく、外部のPCREライブラリを使うために --with-external-pcre が提供されます。
  • PDO_SQLite:
    • --with-pdo-sqlite は、ディレクトリを受け入れません。
  • Readline:
    • --with-libedit は、ディレクトリを受け入れません。
  • Sodium:
    • --with-sodium は、ディレクトリを受け入れません。
  • SQLite3:
    • --with-sqlite3 は、ディレクトリを受け入れません。
  • XSL:
    • --with-xsl は、ディレクトリを受け入れません。
  • Zip:
    • --with-libzip は削除されました。
    • --enable-zip は、 --with-zip になりました。

CSV のエスケープ

fputcsv(),
fgetcsv(),
SplFileObject::fputcsv(),
SplFileObject::fgetcsv() および
SplFileObject::setCsvControl()
は、 $escape
パラメータに空文字列を受け入れるようになりました。
空文字列を指定すると、(RFC 4180 に準拠していない) 独自仕様の PHP のエスケープ機構が無効になります。

str_getcsv() 関数の振る舞いが適切に調整されました(正確には、空文字列がデフォルトを使うことに等しくなります)

SplFileObject::getCsvControl() は、3番目の配列要素で空文字列を返すように適切に調整されました。

データのフィルタリング

filter 拡張モジュールは、 Unix でビルドする際に --with-pcre-dir が不要になり、 ./configure コマンドで共有ライブラリとして確実にビルドされるようになりました。

GD

libgd にバンドルされた imagecropauto() 関数の振る舞いが、システムの libgd と同じになりました。

  • IMG_CROP_DEFAULT は、 IMG_CROP_SIDES にフォールバックしなくなりました。
  • Threshold-cropping は、システムの libgd のアルゴリズムを使うようになりました。

imagecropauto() 関数の $mode 引数のデフォルト値が IMG_CROP_DEFAULT に変更されました。つまり、 -1 を渡すことは推奨されなくなりました。

imagescale() 関数が、$new_width に -1 を渡すことによって、 固定の高さのアスペクト比をサポートするようになりました。

HASH メッセージダイジェストフレームワーク

hash 拡張モジュールを無効にすることはできなくなり、PHP ビルドに必須の部分として扱われます。 date 拡張モジュールも同様です。

国際化関数

intl 拡張モジュールは、ICU 50.1 以降が必須になりました。

ResourceBundle は、Countable を新たに実装しました。

LDAP

nsldap と umich_ldap のサポートは削除されました。

Libxml

すべての libxmlベースの拡張モジュールは libxml 2.7.6 以降が必須になりました。

マルチバイト文字列

oniguruma ライブラリは PHP本体にバンドルされなくなりました。代わりに、libonig がシステムで利用可能になっている必要があります。mbregex コンポーネントを無効にするために、--disable-mbregex オプションが代わりに利用できます。

OPcache

--disable-opcache-file と --enable-opcache-file オプションは削除され、opcache.file_cache INIディレクティブに置き換えられました。

パスワードハッシュ

password_hash() と password_needs_rehash() 関数は、 $algo に nullable な string と int を受け入れるようになりました。

PEAR

PEAR (PECL を含む) のインストールは、デフォルトで無効になりました。configure オプション --with-pear を使うことで明示的に有効にできますが、このオプションは推奨されなくなり、将来的に削除される可能性があります。

リフレクション

ReflectionClass, ReflectionFunction, ReflectionMethod, ReflectionObject, ReflectionProperty クラスの修飾子の定数の数値 (IS_ABSTRACT, IS_DEPRECATED, IS_EXPLICIT_ABSTRACT, IS_FINAL, IS_IMPLICIT_ABSTRACT, IS_PRIVATE, IS_PROTECTED, IS_PUBLIC, IS_STATIC) が変更されました。

SimpleXML

SimpleXMLElement クラスが、新たに Countable を実装しました。

SQLite3

バンドルされていた libsqlite は削除されました。 SQLite3 拡張モジュールをビルドするには、libsqlite3 3.7.4 以降が必須になりました。 PDO_SQLite 拡張モジュールをビルドするには、libsqlite3 3.5.0 以降が必須になりました。

SQLite3, SQLite3Stmt および SQLite3Result クラスのシリアル化とその復元は、明示的に禁止されました。 以前は、これらのクラスのシリアル化は可能でしたが、それを 復元すると不安定なオブジェクトを返していました。

@param 記法は SQLクエリパラメータを示すために使えるようになりました。

Zip

バンドルされていた libzip ライブラリは削除されました。 zip 拡張モジュールをビルドするには、libzip >= 0.11 が必要になっています。

User Contributed Notes

santi at mola dot io 31-Jul-2020 07:54
Note for internals/extensions:

Many opcode values changed between PHP 7.3 and 7.4, so most documentation resources are outdated in that regard. You can look the definitions at Zend/zend_vm_opcodes.h in php-src. For example, ZEND_ECHO changes from 40 to 136.

While opcode changes happen in a lot of PHP versions, the change in 7.4 is quite significant.
ohcc at 163 dot com 09-Jun-2020 04:56
As of PHP 7.4, an exception thrown within the user-defined shutdown function can be caught by the user-defined exception handler.

<?php
    set_error_handler(
        function($level, $error, $file, $line){
            if(0 === error_reporting()){
                return false;
            }
            throw new ErrorException($error, -1, $level, $file, $line);
        },
        E_ALL
    );

    register_shutdown_function(function(){
        $error = error_get_last();
        if($error){
            throw new ErrorException($error['message'], -1, $error['type'], $error['file'], $error['line']);
        }
    });

    set_exception_handler(function($exception){
        // ... more code ...
    });

    require 'NotExists.php';
Florent H (Sowapps) 16-Feb-2020 07:37
This version brings an important changes with the directive zend.exception_ignore_args set to On by default.
In all stack traces, the args key is now missing.
All php frameworks have to handle this to report errors & exceptions.


Windows のサポート

configure フラグ

configure コマンドは、CFLAGS や LDFLAGS を環境変数と見なすようになりました。

CTRLキーの扱い

sapi_windows_set_ctrl_handler() 関数でハンドラを設定することで、コンソールにおける CTRL+C や CTRL+BREAK をキャッチできるようになりました。

Windows における proc_open() 関数は、"create_process_group" オプションを新たに渡せるようになりました。これは、子プロセスが CTRLイベントをハンドルする場合に必須です。

OPcache

OPcache は、opcache.cache_id INIディレクティブを設定することで、ユーザー単位で別々のキャッシュを、任意の数だけ持つことをサポートしました。同一のキャッシュIDとユーザーを持つ全てのプロセスは、同一のOPcacheインスタンスを共有します。

stat

stat 関数の実装がリファクタリングされました。

  • inode番号 が取得可能になりました。この値は NTFS のファイルインデックス をベースにしています。
  • デバイス番号は、ボリュームのシリアル番号をベースにするようになりました。

これらの値は、両方システムから取得され、64bitシステムで与えられるそのままの値であることに注意して下さい。32bitのシステムでは、これらの値はオーバーフローする可能性があるため、値は偽物です。

libsqlite3

libsqlite3 は、 php_sqlite3.dll と php_pdo_sqlite.dll に静的にコンパイルされず、libsqlite3.dll として利用できるようになりました。 SQLite3 と PDO_SQLITE のインストール手順をそれぞれ参照ください。

User Contributed Notes

There are no user contributed notes for this page.


PHP 7.2.x から PHP 7.3.x への移行

目次

  • 新機能
  • 新しく追加された関数
  • 新しいグローバル定数
  • 下位互換性のない変更点
  • PHP 7.3.x で推奨されなくなる機能
  • その他の変更
  • Windows のサポート

このマイナーバージョンアップには数多くの 新機能 があります。また、互換性がない変更 が多少あるので、実運用環境の PHP をこのバージョンにあげる前にはテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.0.x, 7.1.x, 7.2.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

PHP コア

ヒアドキュメントと Nowdoc構文 がより柔軟に

文字列を閉じるマーカーの後に、セミコロンや改行文字を続ける必要はなくなりました。 それに加えて、文字列を閉じるマーカーはインデントされていても構いません。 この場合、インデントは文字列の全ての行から取り除かれます。

配列へ分割して代入する操作が、リファレンスへの代入をサポート

配列の要素に分割して代入する操作が、[&$a, [$b, &$c]] = $d という文法を用いて、リファレンスへの代入をサポートしました。 同じ操作は、list() 関数でもサポートされています。

instanceof 演算子が、リテラルを受け入れるように

instanceof 演算子が、最初のオペランドにリテラルを受け入れるようになりました。この場合、結果は常に false を返します。

いくつかのコンパイルエラーが、CompileError 例外に

CompileError 例外が新たに追加されました。これは ParseError クラスを継承しています。 少ない数ですが、いくつかのコンパイルエラーが致命的なエラーを生成せず、CompileError 例外をスローするようになります。 現状は、この変更は TOKEN_PARSE モードで token_get_all() が実行された場合にスローされる可能性があるコンパイルエラーだけに影響しますが、将来より多くのエラーがこの例外に変換される可能性があります。

関数やメソッド呼び出しの後に、カンマを付けられるように

関数やメソッド呼び出しの後に、カンマを付けられるようになりました。

Argon2id のサポート

configure コマンドに --with-password-argon2[=dir] オプションを与えることで、Argon2i と Argon2id ハッシュが password_hash(), password_verify(), password_get_info(), および password_needs_rehash() でサポートされるようになります。 PASSWORD_ARGON2ID を使うことで、パスワードはハッシュ化され、検証されます。 password_*() 関数で Argon2i と Argon2id のサポートを使うには、PHP を libargon2 ? 20161029 とリンクする必要があります。

php-fpm

FPM のロギングをカスタマイズするために、新しいオプションが追加されました。

log_limit
このグローバルオプションは、1024文字以上のログを改行なしにロギングするために、ログの長さの限界を設定するために使います。これにより、様々な改行の問題も修正されます。
log_buffering
このグローバルオプションによって、追加のバッファリングなしに、実験的なロギングを行うことができます。
decorate_workers_output
このプールオプションを使うことで、 catch_workers_output が有効になった場合に、ワーカーの出力をデコレートする機能を無効にできます。

BC Math 関数

bcscale() 関数は、現在使われている基数を取得する getter としても使えるようになりました。

LDAP

LDAPコントロールの完全なサポートが LDAP クエリ関数と ldap_parse_result() 関数に追加されました:

  • コントロールをサーバーに送信するために $controls
パラメータが ldap_add(),
ldap_mod_replace(), ldap_mod_add(),
ldap_mod_del(), ldap_rename(),
ldap_compare(), ldap_delete(),
ldap_modify_batch(),
ldap_search(), ldap_list() および
ldap_read() 関数に追加されました。
  • サーバーからコントロールを取得するために、出力パラメータ $controls が ldap_parse_result() 関数に追加されました。
  • ldap_get_option() と ldap_set_option() 関数の LDAP_OPT_SERVER_CONTROLS と LDAP_OPT_CLIENT_CONTROLS のサポートが修正されました。

マルチバイト文字列関数

完全なケースマッピングとケースフォールディングのサポート

完全なケースマッピングとケースフォールディングのサポートが追加されました。 シンプルな大文字小文字のマッピングと異なり、完全なケースマッピング では、文字列の長さが変わる場合があります。たとえば、以下のようになります:

<?php
mb_strtoupper("Strase");
// Produces STRAsE on PHP 7.2
// Produces STRASSE on PHP 7.3
?>
異なるケースマッピングやケースフォールディング のモードは、mb_convert_case() 関数で利用できます:
  • MB_CASE_LOWER (mb_strtolower() で使われています)
  • MB_CASE_UPPER (mb_strtoupper() で使われています)
  • MB_CASE_TITLE
  • MB_CASE_FOLD
  • MB_CASE_LOWER_SIMPLE
  • MB_CASE_UPPER_SIMPLE
  • MB_CASE_TITLE_SIMPLE
  • MB_CASE_FOLD_SIMPLE (大文字小文字を区別しない操作で使います)
無条件に、言語に中立かつ完全なケースマッピングのみが行われます。

大文字小文字を区別しない文字列操作は、ケースフォールディングを使う

大文字小文字を区別しない文字列操作は、比較の際にケースマッピングではなく、ケースフォールディング を使うようになりました。 これは、より多くの文字が (大文字小文字を区別しないという意味で) 等価と見做されるようになったことを意味します。

MB_CASE_TITLE による Title-Case 変換

mb_convert_case() 関数を MB_CASE_TITLE と使うと、Unicodeプロパティ由来の大文字小文字の区別の有無に基づいて、Title-case 変換を行うようになりました。この変更は特に、クォートやアポストロフィーのハンドリングも改善します。

Unicode 11 のサポート

マルチバイト文字列 のデータテーブルは、Unicode 11 をサポートするように更新されました。

長い文字列のサポート

マルチバイト文字列関数 は 2GB 以上の文字列を正しくサポートするようになりました。

パフォーマンスの向上

マルチバイト文字列 拡張モジュールのパフォーマンスが全体的に大きく向上しました。大文字小文字のケースの変換関数で、一番大きな改善が見られます。

名前付きキャプチャのサポート

mb_ereg_* 関数は、名前付きキャプチャをサポートしました。 mb_ereg() のようなマッチング関数は グループ番号と名前の両方を使って名前付きキャプチャを返します。これは PCRE に似た動作です:

<?php
mb_ereg('(?<word>\w+)', '国', $matches);
// => [0 => "国", 1 => "国", "word" => "国"];
?>
これに加えて、 mb_ereg_replace() 関数は 置換文字列で名前付きキャプチャを参照するために \k<> と \k'' 記法をサポートしました:
<?php
mb_ereg_replace('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>
\k<> and \k'' 記法は、数値参照にも使えます。これは、9以上のグループ番号でも動作します。

Readline

completion_append_character と completion_suppress_append オプションのサポートが readline_info() 関数に追加されました。 これらのオプションは PHP が (libedit ではなく) libreadline とリンクされた場合のみ利用できます。

User Contributed Notes

yoander dot valdes at yahoo dot com 31-May-2019 11:34
"Trailing commas in function and method calls are now allowed" means function parameters, example:

<?php

function my1() {
        echo "xxxxxx\n";
}

function my2() {
        echo "yyyyyy\n";
}

my1(),my2(); // PHP Parse error:  syntax error

my1(,); // PHP Parse error:  syntax error

my1(1,); my2(2,); // OK

?>


新しく追加された関数

PHP コア

  • array_key_first()
  • array_key_last()
  • gc_status()
  • hrtime()
  • is_countable()
  • net_get_interfaces()

FastCGI Process Manager(FPM)

  • fpm_get_status()

日付と時刻

  • DateTime::createFromImmutable()

GNU Multiple Precision(GMP)

  • gmp_binomial()
  • gmp_kronecker()
  • gmp_lcm()
  • gmp_perfect_power()

国際化関数

  • Normalizer::getRawDecomposition()
  • normalizer_get_raw_decomposition()
  • Spoofchecker::setRestrictionLevel()

LDAP

  • ldap_add_ext()
  • ldap_bind_ext()
  • ldap_delete_ext()
  • ldap_exop_refresh()
  • ldap_mod_add_ext()
  • ldap_mod_replace_ext()
  • ldap_mod_del_ext()
  • ldap_rename_ext()

OpenSSL

  • openssl_pkey_derive()

Sockets

  • socket_wsaprotocol_info_export()
  • socket_wsaprotocol_info_import()
  • socket_wsaprotocol_info_release()

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

PHP コア

  • PASSWORD_ARGON2ID

CURL

  • CURLAUTH_BEARER
  • CURLAUTH_GSSAPI
  • CURLE_WEIRD_SERVER_REPLY
  • CURLINFO_APPCONNECT_TIME_T
  • CURLINFO_CONNECT_TIME_T
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
  • CURLINFO_CONTENT_LENGTH_UPLOAD_T
  • CURLINFO_FILETIME_T
  • CURLINFO_HTTP_VERSION
  • CURLINFO_NAMELOOKUP_TIME_T
  • CURLINFO_PRETRANSFER_TIME_T
  • CURLINFO_PROTOCOL
  • CURLINFO_PROXY_SSL_VERIFYRESULT
  • CURLINFO_REDIRECT_TIME_T
  • CURLINFO_SCHEME
  • CURLINFO_SIZE_DOWNLOAD_T
  • CURLINFO_SIZE_UPLOAD_T
  • CURLINFO_SPEED_DOWNLOAD_T
  • CURLINFO_SPEED_UPLOAD_T
  • CURLINFO_STARTTRANSFER_TIME_T
  • CURLINFO_TOTAL_TIME_T
  • CURL_LOCK_DATA_CONNECT
  • CURL_LOCK_DATA_PSL
  • CURL_MAX_READ_SIZE
  • CURLOPT_ABSTRACT_UNIX_SOCKET
  • CURLOPT_DISALLOW_USERNAME_IN_URL
  • CURLOPT_DNS_SHUFFLE_ADDRESSES
  • CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS
  • CURLOPT_HAPROXYPROTOCOL
  • CURLOPT_KEEP_SENDING_ON_ERROR
  • CURLOPT_PRE_PROXY
  • CURLOPT_PROXY_CAINFO
  • CURLOPT_PROXY_CAPATH
  • CURLOPT_PROXY_CRLFILE
  • CURLOPT_PROXY_KEYPASSWD
  • CURLOPT_PROXY_PINNEDPUBLICKEY
  • CURLOPT_PROXY_SSLCERT
  • CURLOPT_PROXY_SSLCERTTYPE
  • CURLOPT_PROXY_SSL_CIPHER_LIST
  • CURLOPT_PROXY_SSLKEY
  • CURLOPT_PROXY_SSLKEYTYPE
  • CURLOPT_PROXY_SSL_OPTIONS
  • CURLOPT_PROXY_SSL_VERIFYHOST
  • CURLOPT_PROXY_SSL_VERIFYPEER
  • CURLOPT_PROXY_SSLVERSION
  • CURLOPT_PROXY_TLS13_CIPHERS
  • CURLOPT_PROXY_TLSAUTH_PASSWORD
  • CURLOPT_PROXY_TLSAUTH_TYPE
  • CURLOPT_PROXY_TLSAUTH_USERNAME
  • CURLOPT_REQUEST_TARGET
  • CURLOPT_SOCKS5_AUTH
  • CURLOPT_SSH_COMPRESSION
  • CURLOPT_SUPPRESS_CONNECT_HEADERS
  • CURLOPT_TIMEVALUE_LARGE
  • CURLOPT_TLS13_CIPHERS
  • CURLPROXY_HTTPS
  • CURLSSH_AUTH_GSSAPI
  • CURL_SSLVERSION_MAX_DEFAULT
  • CURL_SSLVERSION_MAX_NONE
  • CURL_SSLVERSION_MAX_TLSv1_0
  • CURL_SSLVERSION_MAX_TLSv1_1
  • CURL_SSLVERSION_MAX_TLSv1_2
  • CURL_SSLVERSION_MAX_TLSv1_3
  • CURL_SSLVERSION_TLSv1_3
  • CURL_VERSION_ALTSVC (PHP 7.3.6 以降)
  • CURL_VERSION_ASYNCHDNS
  • CURL_VERSION_BROTLI
  • CURL_VERSION_CONV
  • CURL_VERSION_CURLDEBUG (PHP 7.3.6 以降)
  • CURL_VERSION_DEBUG
  • CURL_VERSION_GSSAPI
  • CURL_VERSION_GSSNEGOTIATE
  • CURL_VERSION_HTTPS_PROXY
  • CURL_VERSION_IDN
  • CURL_VERSION_LARGEFILE
  • CURL_VERSION_MULTI_SSL
  • CURL_VERSION_NTLM
  • CURL_VERSION_NTLM_WB
  • CURL_VERSION_PSL (PHP 7.3.6 以降)
  • CURL_VERSION_SPNEGO
  • CURL_VERSION_SSPI
  • CURL_VERSION_TLSAUTH_SRP

データのフィルタリング

  • FILTER_SANITIZE_ADD_SLASHES

JSON

  • JSON_THROW_ON_ERROR

LDAP

  • LDAP_CONTROL_ASSERT
  • LDAP_CONTROL_MANAGEDSAIT
  • LDAP_CONTROL_PROXY_AUTHZ
  • LDAP_CONTROL_SUBENTRIES
  • LDAP_CONTROL_VALUESRETURNFILTER
  • LDAP_CONTROL_PRE_READ
  • LDAP_CONTROL_POST_READ
  • LDAP_CONTROL_SORTREQUEST
  • LDAP_CONTROL_SORTRESPONSE
  • LDAP_CONTROL_PAGEDRESULTS
  • LDAP_CONTROL_AUTHZID_REQUEST
  • LDAP_CONTROL_AUTHZID_RESPONSE
  • LDAP_CONTROL_SYNC
  • LDAP_CONTROL_SYNC_STATE
  • LDAP_CONTROL_SYNC_DONE
  • LDAP_CONTROL_DONTUSECOPY
  • LDAP_CONTROL_PASSWORDPOLICYREQUEST
  • LDAP_CONTROL_PASSWORDPOLICYRESPONSE
  • LDAP_CONTROL_X_INCREMENTAL_VALUES
  • LDAP_CONTROL_X_DOMAIN_SCOPE
  • LDAP_CONTROL_X_PERMISSIVE_MODIFY
  • LDAP_CONTROL_X_SEARCH_OPTIONS
  • LDAP_CONTROL_X_TREE_DELETE
  • LDAP_CONTROL_X_EXTENDED_DN
  • LDAP_CONTROL_VLVREQUEST
  • LDAP_CONTROL_VLVRESPONSE

マルチバイト文字列

  • MB_CASE_FOLD
  • MB_CASE_LOWER_SIMPLE
  • MB_CASE_UPPER_SIMPLE
  • MB_CASE_TITLE_SIMPLE
  • MB_CASE_FOLD_SIMPLE

OpenSSL

  • STREAM_CRYPTO_PROTO_SSLv3
  • STREAM_CRYPTO_PROTO_TLSv1_0
  • STREAM_CRYPTO_PROTO_TLSv1_1
  • STREAM_CRYPTO_PROTO_TLSv1_2

PostgreSQL

  • PGSQL_DIAG_SCHEMA_NAME
  • PGSQL_DIAG_TABLE_NAME
  • PGSQL_DIAG_COLUMN_NAME
  • PGSQL_DIAG_DATATYPE_NAME
  • PGSQL_DIAG_CONSTRAINT_NAME
  • PGSQL_DIAG_SEVERITY_NONLOCALIZED

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

PHP コア

ヒアドキュメント/Nowdoc の終了ラベルの解釈

ヒアドキュメント/Nowdoc の文法が柔軟になった ことにより、本体の内部に終了ラベルが含まれた ドキュメンテーション文字列は、エラーが発生するか、解釈の振る舞いが変わる可能性があります。 たとえば、以下のような場合です:

<?php
$str = <<<FOO
abcdefg
 FOO
FOO;
?>
インデントされた FOO が入ったとしても、以前は特別な意味は何もありませんでした。 ですが、このバージョンからは ヒアドキュメントの終了と解釈され、 後に続く FOO; が syntax error になるでしょう。 この問題は、文字列の内容に決して含まれることのない終了ラベルを選ぶことで常に回避できます。

switch の制御フローを変更する continue 文は警告が出る

switch の制御フローを変更することを狙った continue 文は、警告が出るようになりました。 PHP では、このような continue 文は break と同等で、他のプログラミング言語では continue 2 と同じように振る舞うのとは対照的です。

<?php
while ($foo) {
switch ($bar) {
case "baz":
continue;
// Warning: "continue" targeting switch is equivalent to
// "break". Did you mean to use "continue 2"?
}
}
?>

ArrayAccess を実装したオブジェクトに対する、 数値形式の文字列キーの解釈が厳密に

$obj が ArrayAccess を実装したオブジェクトで、 "123" が数値の文字列リテラルだった場合、 この "123" は暗黙のうちに整数型に変換されなくなりました。 つまり、$obj->offsetGet(123) ではなく、 $obj->offsetGet("123") がコールされるようになります。 これは、リテラルでない値の既存の振る舞いに一致します。 配列の振る舞いには全く影響しません。 配列については、数値の文字列リテラルのキーは、整数型に暗黙のうちに変換され続けます。

static なプロパティが参照の代入によって分裂しなくなった

PHP では、子クラスで明示的にオーバーライドされない限り、static なプロパティが継承関係にあるクラスの間で共有されます。しかし、 実装上の副作用により、参照を代入することによって、static なプロパティが異なる値になる可能性がありました。こうした抜け穴がこのバージョンでは修正されました。

<?php
class Test {
public static $x = 0;
}
class Test2 extends Test { }

Test2::$x = &$x;
$x = 1;

var_dump(Test::$x, Test2::$x);
// Previously: int(0), int(1)
// Now: int(1), int(1)
?>

配列から返される参照とプロパティのアクセスは、即座に分割される

配列から返された参照と、プロパティのアクセスは、 アクセスの一部として別に扱われるようになりました。 これは、配列へのアクセスと、配列の値を使う間に、値を変更できなくなったということです。

<?php
$arr = [1];
$ref =& $arr[0];
var_dump($arr[0] + ($arr[0] = 2));
// Previously: int(4), Now: int(3)
?>
これにより、参照と参照でない値の振る舞いが一貫したものになります。 単一の式の中で値を読んだり書いたりする場合の振る舞いは未定義のままであり、 将来再び動作が変更される可能性があることに注意して下さい。

Traversable への引数のアンパックを整数でないキーで行うことはサポートされない

Traversable への引数のアンパックを整数でないキーで行うコードは動作しなくなりました。 次のようなコードが、 PHP 5.6 から 7.2 の間は偶然動いていました。

<?php
function foo(...$args) {
var_dump($args);
}
function gen() {
yield 1.23 => 123;
}
foo(...gen());
?>

その他雑多な変更

ext_skel ユーティリティは、 新しいオプションで完全に再設計され、いくつかの古いオプションは削除されました。 このユーティリティは、PHP で書かれており、それ以外の外部への依存はありません。

BeOS のサポートが削除されました。

EH_THROW モードの、警告を自動的に例外に変換することで スローされる例外(e.g. いくつかの DateTime 例外) は、error_get_last() 関数の状態を収集しなくなりました。 そうした例外は、手動でスローされる例外と同じように動くようになります。

TypeError は、integer と boolean ではなく、 それぞれ int と bool を誤った型として報告するようになります。

compact() 関数に渡された未定義の値は、NOTICEレベルの警告を発生させるようになります。

getimagesize() 関数と関連する関数は、BMP画像の MIME Type を image/x-ms-bmp ではなく image/bmp と報告するようになりました。 なぜなら、後者は IANA に登録されているから (» RFC 7903 を参照) です。

stream_socket_get_name() 関数は、 ブラケットでラップされた IPv6 アドレスを返すようになります。 たとえば、"::1:1337" ではなく、 "[::1]:1337" を返すようになるでしょう。

BCMath

BCMath 関数 でスローされる全ての例外は、 PHP のエラーハンドリングの機構を使うようになりました。 以前は、いくつかのエラーが stderr に直接出力されていました。

bcmul() および bcpow() 関数は、指定された精度の数値を返すようになりました。 以前は、返される値の後ろが、0埋めされることで省略される可能性がありました。

IMAP, POP3 および NNTP

rsh/ssh ログインはデフォルトで無効になりました。 これらを有効にしたい場合、imap.enable_insecure_rsh を使って下さい。 IMAPライブラリは rsh/ssh コマンドに渡す前にメールボックス名をフィルタしないので、 rsh/ssh を有効にした状態で この関数に信頼できないデータを渡すことは安全ではありません。

マルチバイト文字列

名前付きキャプチャのサポートが追加されたことにより、 mb_ereg_*() におけるパターンに名前付きキャプチャを使うと、これまでと異なる振る舞いをします。 特に、名前付きキャプチャが matches の一部になった場合、 mb_ereg_replace() はこれを追加の文法に従って解釈します。 さらに詳しい情報は、名前付きキャプチャ を参照ください。

MySQL 改良版拡張モジュール

プリペアドステートメント が、カラムに小数の桁数を指定する(e.g. マイクロ秒を使う場合 TIMESTAMP(6) のようにする) ことによって、 DATETIME, TIME および TIMESTAMP 型の秒の小数部を報告するようになりました。 以前のバージョンでは、秒の小数部は戻り値から単に省略されていました。

MySQL関数 (PDO_MYSQL)

プリペアドステートメント が、カラムに小数の桁数を指定する(e.g. マイクロ秒を使う場合 TIMESTAMP(6) のようにする) ことによって、DATETIME, TIME および TIMESTAMP 型の秒の小数部を報告するようになりました。 以前のバージョンでは、秒の小数部は戻り値から単に省略されていました。 この変更は、PDO_MYSQL のプリペアドステートメントをエミュレートする機能を無効にしていた場合 (e.g つまり、MySQLネイティブなプリペアの機能を使っていた場合) にのみ影響があることに注意して下さい。 PDO::ATTR_EMULATE_PREPARES=true (これはデフォルトです) にした接続を使う Statement は影響を受けず、 既に適切な秒の小数部をエンジンから取得していました。

リフレクション

リフレクション を文字列にエクスポートした場合、integer と boolean ではなく、int と bool をそれぞれ使うようになりました。

Standard PHP Library (SPL)

SPL autoloader が例外をスローした場合、後に続く autoloader は実行されなくなりました。以前は、全ての autoloader が実行され、例外がチェインしていました。

SimpleXML

数学的な演算 に SimpleXML オブジェクトが含まれていた場合、テキストが int または float のうち、より適切なものとして扱われるようになりました。 以前は値が意図せず int として扱われた場合がありました。

外部から入力されるCookie

PHP 7.3.23 以降は、セキュリティ上の理由により、 外部から入力される Cookie の 名前 はurlデコードされなくなりました。

User Contributed Notes

chris at ocproducts dot com 01-May-2020 08:17
PCRE has been updated (https://wiki.php.net/rfc/pcre2-migration#backward_incompatible_changes).
The new PCRE version is stricter in some cases.


PHP 7.3.x で推奨されなくなる機能

PHP コア

大文字小文字を区別しない定数

大文字小文字を区別せず、定数を宣言することは推奨されません。 define() 関数の第3引数に true を渡すと、推奨されない警告が生成されるようになりました。宣言された定数と異なるケースで定数を使うことも推奨されません。

名前空間の中で assert() 関数の宣言

名前空間の中で assert() と呼ばれる関数を宣言することは推奨されません。 assert() 関数は PHPエンジンによって特別扱いされることが意図されているため、名前空間の中で同じ関数を宣言されると、一貫しない振る舞いに繋がる可能性があるからです。

文字列でない needle 引数による文字列の探索

文字列でない needle 引数で文字列検索関数を使うことは推奨されません。 将来的には、needle 引数は ASCII コードポイントではなく、文字列として解釈されるようになります。 あなたが意図する振る舞いに応じて、明示的に needle 引数を文字列にキャストするか、 chr() 関数を明示的に呼び出すべきです。 影響を受ける関数は以下のとおりです:

  • strpos()
  • strrpos()
  • stripos()
  • strripos()
  • strstr()
  • strchr()
  • strrchr()
  • stristr()

string.strip_tags ストリームフィルタ

fgetss() 関数と strip_tags ストリームフィルタ は推奨されません。 このことは SplFileObject::fgetss() メソッドと gzgetss() 関数にも影響します。

データのフィルタリング

FILTER_FLAG_SCHEME_REQUIRED や FILTER_FLAG_HOST_REQUIRED を明示的に使うことは推奨されなくなりました。これらは FILTER_VALIDATE_URL に含まれています。

画像処理と GD

image2wbmp() 関数は推奨されなくなりました。

国際化関数

PHP が ICU バージョン56以上とリンクされた状態で Normalizer::NONE を使うと、推奨されない警告が発生するようになりました。

マルチバイト文字列

以下のドキュメントに記されていない mbereg_*() エイリアスは推奨されなくなりました。 対応する mb_ereg_*() 関数を使ってください。

  • mbregex_encoding()
  • mbereg()
  • mberegi()
  • mbereg_replace()
  • mberegi_replace()
  • mbsplit()
  • mbereg_match()
  • mbereg_search()
  • mbereg_search_pos()
  • mbereg_search_regs()
  • mbereg_search_init()
  • mbereg_search_getregs()
  • mbereg_search_getpos()
  • mbereg_search_setpos()

ODBC と DB2 関数 (PDO_ODBC)

ini 設定 pdo_odbc.db2_instance_name は正式に推奨されなくなりました。ドキュメントでは、PHP 5.1.1 以降から推奨されないとされていました。

User Contributed Notes

There are no user contributed notes for this page.


その他の変更

PHP コア

set(raw)cookie 関数は $option 引数を受け入れるように

setcookie() および setrawcookie() 関数は、次のようなシグネチャもサポートするようになりました:

setcookie(string $name, string $value = "", array $options = []): bool
$options は "expires", "path", "domain", "secure", "httponly" および "samesite" をキーとして受け付ける連想配列です。

新しい syslog INI ディレクティブ

error_log が syslog に設定された場合、 ロギングをカスタマイズするため、次の ini ディレクティブが追加されました: syslog:

syslog.facility
どのタイプのプログラムがメッセージをロギングするかを指定します
syslog.filter
ログメッセージをフィルタするために、 サポートされているフィルタタイプを指定します。 サポートされているのは、all, no-ctrl そして ascii です。 PHP 7.3.8 以降では、 それより前のバージョンでの振る舞いを復元する raw も使えます。 このフィルタは、syslog() をコールした際にも影響します。
syslog.ident
メッセージの先頭に付加される ident 文字列を指定します。

ガベージコレクション

cyclic GC が改良されました。かなりのパフォーマンスの向上に繋がる可能性があります。

雑多な変更

var_export() 関数は、 存在しないメソッド stdClass::__setState() を使わず、 オブジェクトにキャストされた配列 ((object) array( ... )) として stdClass を エクスポートするようになりました。

debug_zval_dump() 関数は、再帰的な配列やオブジェクトを表示する方法が、 var_dump() と同じになるように変更されました。 そうした配列やオブジェクトは、もはや二度表示されません。

array_push() および array_unshift() 関数は、単一の引数でも呼び出せるようになりました。これは spread演算子と共に使うと特に便利です。

対話的なPHPデバッガ

使われていなかった定数 PHPDBG_FILE, PHPDBG_METHOD, PHPDBG_LINENO および PHPDBG_FUNC が削除されました。

php-fpm

getallheaders() 関数も利用可能になりました。

CURL

libcurl ? 7.15.5 が必須になりました。

データのフィルタリング

FILTER_VALIDATE_FLOAT 定数が thousand オプションもサポートしました。 これにより、受け入れ可能な千単位のセパレーター文字を指定できます。 デフォルト ("',.") は、以前のPHPのバージョンと完全に互換性があります。

magic_quotes フィルタ (FILTER_SANITIZE_MAGIC_QUOTES) のエイリアスとして FILTER_SANITIZE_ADD_SLASHES が追加されました。 magic_quotes フィルタは、将来のPHPで削除される予定です。

FTP

デフォルトの転送モードが binary になりました。

国際化関数

PHP が ICU 56 以降とリンクされた場合、Normalizer::NONE は推奨されません。

NFKC_Casefold 正規化のために、 Normalizer::normalize() メソッドの引数として normalizer::form_kc_cf が追加されました。 これは、ICU 56 以降で利用可能です。

JSON

新しいフラグ JSON_THROW_ON_ERROR が追加されました。 これは json_decode() や json_encode() 関数で使うことができ、 エラー時に JsonException をスローできるようになります。 これは、グローバルなエラー状態 json_last_error() や json_last_error_msg() を取得する代わりに使えます。 JSON_PARTIAL_OUTPUT_ON_ERROR は、 JSON_THROW_ON_ERROR に優先します。

マルチバイト文字列

configure オプション --with-libmbfl は利用できなくなりました。

ODBC (Unified)

birdstep.max_links ini ディレクティブを含む、 ODBCRouter と Birdstep のサポートが削除されました。

OPcache

opcache.inherited_hack ini ディレクティブは削除されました。 この値は、PHP 5.3.0 から既に無視されていました。

OpenSSL

ssl ストリームオプション min_proto_version および max_proto_version が 指定可能な TLS プロトコルに関連する定数とともに追加されました。

正規表現 (Perl互換)

PCRE拡張 は PCRE2 にアップグレードされました。 これによって振る舞いが少し変更される可能性があります (たとえば、 クラス中の文字の範囲がより厳密に解釈されるなど) し、 既に存在している正規表現の文法が増えるかもしれません。

preg_quote() 関数は '#' もエスケープするようになりました。

Microsoft SQL Server and Sybase Functions (PDO_DBLIB)

空の行セットを自動的にスキップできるようにするために、 PDO::DBLIB_ATTR_SKIP_EMPTY_ROWSETS 属性が追加されました。

TDS バージョンを公開するための属性として、 PDO::DBLIB_ATTR_TDS_VERSION が追加されました。

DATETIME2 型のカラムは、DATETIME型の絡むと同様に扱われるようになりました。

SQLite関数 (PDO_SQLITE)

SQLite3 データベースは、 新しい PDO::SQLITE_ATTR_OPEN_FLAGS 属性を PDO::SQLITE_OPEN_READONLY に設定することにより、 読み取り専用としてオープンできるようになりました。

セッションのハンドリング

session_set_cookie_params() 関数は、以下のシグネチャもサポートしました:

session_set_cookie_params(array $options): bool
$options は、 "lifetime", "path", "domain", "secure", "httponly" および "samesite" を指定可能な連想配列です。 それに応じて、 session_get_cookie_params() 関数の戻り値にも "samesite" が含まれるようになりました。 さらに、Cookie の SameSite ディレクティブのデフォルト値を設定するため、 新しい session.cookie_samesite ini オプションが追加されました。この値のデフォルト値は "" (空文字列) なので、SameSite ディレクティブは設定されません。 この値には、"Lax" または "Strict" が設定でき、それぞれが SameSiteディレクティブに設定されます。

Tidy

» tidyp 抜きでビルドすることが透過的にサポートされました。tidyp はリリース日を取得するAPIを提供していないため、 tidyp 抜きで PHP がビルドされた場合、 tidy_get_release() や tidy::getRelease() は 'unknown' を返します。

XMLパーサ

拡張モジュールが libxml を使ってビルドされた場合には、 xml_set_external_entity_ref_handler() 関数のコールバックの戻り値が無視されることはなくなりました。 このバージョン以前はコールバックの戻り値が無視され、パースが止まりませんでした。

Zip

PHP にバンドルされている libzip を使ってビルドすることは推奨されません。 しかし、--without-libzip を configure オプションに指定することにより、まだバンドルされた libzip を使ってビルド可能です。

Zlib による圧縮

望ましい圧縮レベルの設定を楽にするために、compress.zlib ラッパー の zlib/level コンテキストオプション が追加されました。

User Contributed Notes

There are no user contributed notes for this page.


Windows のサポート

PHP コア

POSIX にさらに準拠したファイルの削除

ファイルディスクリプタは、共有 read/write/delete モードでオープンされるのがデフォルトになりました。 これにより、POSIX のセマンティクスに効率的に対応しつつ、使用中のファイルハンドルを削除することが可能になります。これは POSIX に 100% 準拠したものではありませんが、プラットフォームごとの違いはまだ存在します。ファイルハンドルを削除した後は、オープン済みの全てのファイルハンドルが閉じられるまで、ファイル名のエントリはブロックされます。

User Contributed Notes

There are no user contributed notes for this page.


PHP 7.1.x から PHP 7.2.x への移行

目次

  • 新機能
  • 新しい関数
  • 新しいグローバル定数
  • 下位互換性のない変更点
  • PHP 7.2.x で推奨されなくなる機能
  • その他の変更

このマイナーバージョンアップには数多くの 新機能 があります。 また、 互換性がない変更 が多少あるので、実運用環境の PHP をこのバージョンにあげる前にはテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.0.x, 7.1.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

object 型

object 型が新たに導入されました。 任意のオブジェクトに対する (反変) パラメータの型付けや (共変) 戻り値の型付けで使えます。

<?php

function test(object $obj) : object
{
return new SplQueue();
}

test(new stdClass());

名前指定による拡張モジュールのロード

読み込む共有モジュールを指定する際に、拡張子 (Unix なら .so、Windows なら .dll など) を指定する必要がなくなりました。php.ini ファイルでの指定だけでなく dl() 関数による指定でも同様です。

抽象メソッドのオーバーライド

ある抽象クラスが別の抽象クラスを継承しているときに、 継承元クラスの抽象メソッドをオーバーライドできるようになりました。

<?php

abstract class A
{
abstract function test(string $s);
}
abstract class B extends A
{
// オーバーライドしましたが、パラメータの反変性や戻り値の共変性は維持しています。
abstract function test($s) : int;
}

Sodium がコアモジュールに

モダンな暗号ライブラリである Sodium が PHP コアモジュールに含まれるようになりました。

関数のリファレンスは Sodium を参照ください。

Argon2 によるパスワードハッシュ

パスワードハッシュ API に Argon2 が追加されました。次の定数が公開されています。

  • PASSWORD_ARGON2I
  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST
  • PASSWORD_ARGON2_DEFAULT_TIME_COST
  • PASSWORD_ARGON2_DEFAULT_THREADS

PDO の拡張文字列型

PDO の文字列型が拡張され、 プリペアをエミュレートする際に NCHAR 型をサポートするようになりました。 以下の定数が追加されています。

  • PDO::PARAM_STR_NATL
  • PDO::PARAM_STR_CHAR
  • PDO::ATTR_DEFAULT_STR_PARAM

これらの定数を使うには、 PDO::PARAM_STR とビット OR で連結します。

<?php

$db->quote('uber', PDO::PARAM_STR | PDO::PARAM_STR_NATL);

PDO のデバッグ情報にプリペアのエミュレートの内容を追加

PDOStatement::debugDumpParams() メソッドが改良されて、 データベースに送信される SQL を表示できるようになりました。 これは、プレースホルダの内容をバインド変数の値で置き換えた後の生のクエリです。 この機能は、プリペア機能のエミュレートをデバッグしやすくするために用意されました (そのため、プリペア機能のエミュレートが有効になっているときしか使えません)。

LDAP における拡張オペレーションのサポート

LDAP 拡張モジュールが EXOP をサポートするようになりました。 以下の関数や定数が追加されています。

  • ldap_parse_exop()
  • ldap_exop()
  • ldap_exop_passwd()
  • ldap_exop_whoami()
  • LDAP_EXOP_START_TLS
  • LDAP_EXOP_MODIFY_PASSWD
  • LDAP_EXOP_REFRESH
  • LDAP_EXOP_WHO_AM_I
  • LDAP_EXOP_TURN

ソケット 拡張モジュールでのアドレス情報の対応

ソケット拡張モジュールが、アドレス情報のルックアップや 接続、バインド、explainに対応するようになりました。 新しく追加されたのは、以下の四つの関数です。

  • socket_addrinfo_lookup()
  • socket_addrinfo_connect()
  • socket_addrinfo_bind()
  • socket_addrinfo_explain()

パラメータの型の拡大変換

メソッドをオーバーライドしたりインターフェイスを実装したりする際に、 元のパラメータの型指定を省略できるようになりました。 それでもリスコフの置換原則には違反していません。 パラメータの型は反変だからです。

<?php

interface A
{
public function Test(array $input);
}

class B implements A
{
public function Test($input){} // $input の型指定を省略
}

名前空間のグループ指定における最後のカンマの許可

PHP 7.0 で導入されたグループ指定構文で、最後にカンマを付けられるようになりました。

<?php

use Foo\Bar\{
Foo,
Bar,
Baz,
};

Windows での proc_nice() のサポート

proc_nice() 関数が Windows でも使えるようになりました。

pack() と unpack() でのエンディアンのサポート

pack() と unpack() が、 リトルエンディアンとビッグエンディアンの両方の float や double に対応するようになりました。

EXIF 拡張モジュールの機能追加

EXIF 拡張モジュールがより多くのフォーマットに対応するようになりました。 exif_read_data() 関数で画像をパースするときに、 今までよりも多くの独自タグが適切に変換されるようになります。 新たにサポートするようになったフォーマットは以下のとおりです。

  • Samsung
  • DJI
  • Panasonic
  • Sony
  • Pentax
  • Minolta
  • Sigma/Foveon
  • AGFA
  • Kyocera
  • Ricoh
  • Epson

また、exif_read_data() と exif_thumbnail() の第一引数にストリームを渡せるようになりました。

PCRE の新機能

  • J 修飾子で PCRE_DUPNAMES を設定できるようになりました。

SQLite3 での BLOB の書き込み

SQLite3::openBlob() が、BLOB フィールドを書き込みモードでオープンできるようになりました。 これまでは読み込みモードにしか対応していませんでした。

Oracle OCI8 Transparent Application Failover コールバック

Oracle Database Transparent Application Failover (TAF) コールバック のサポートが追加されました。 TAF を使うと、データベースとの接続が切れたときに、 提議済みのデータベースに自動的に再接続できます。 TAF コールバックを使うと、 フェイルオーバー時の再接続を PHP アプリケーションから監視したり制御したりできるようになります。

ZIP 拡張モジュールの機能追加

暗号化されたアーカイブの読み書きができるようになりました (libzip 1.2.0 以降が必要です)。

ZipArchive クラスが Countable インターフェイスを実装するようになりました。

zip:// ストリームのコンテキストオプションに 'password' を使えるようになりました。

User Contributed Notes

antonfedonyuk at gmail dot com 21-Apr-2021 12:27
Note: "omitted" = "removed":
<?php
declare(strict_types=1);

interface ITest
{
    public function run(array $input);
}

class Test implements ITest
{
    public function run($input) {
       return $input;
   }
}

echo (new Test())->run('foo'); // display foo, no error
?>
info at ensostudio dot ru 11-Sep-2020 07:28
Note: you cant change parameter type for abstract method defined in interface.
<?php
abstract class AbstractAssocArray imlements ArrayAccess
{
    abstract public function offsetSet($offset, $value): void;
    ...
}
abstract class AbstractAssocArray2 extends AbstractAssocArray
{
    abstract public function offsetSet(string $offset, $value): void;
}
class AssocArray extends AbstractAssocArray2
{
    public function offsetSet(string $offset, $value): void
    {
         $this->{$offset} = $value;
    }
}
?>
It's throw fatal error: Declaration of AbstractAssocArray::offsetSet(string $offset, $value): void must be compatible with AbstractAssocArrayAccess::offsetSet($offset, $value).


新しい関数

PHP コア

  • stream_isatty()
  • sapi_windows_vt100_support()

SPL

  • spl_object_id()

DOM

  • DomNodeList::count()
  • DOMNamedNodeMap::count()

FTP

  • ftp_append()

GD

  • imagesetclip()
  • imagegetclip()
  • imageopenpolygon()
  • imageresolution()
  • imagecreatefrombmp()
  • imagebmp()

Hash

  • hash_hmac_algos()

LDAP

  • ldap_parse_exop()
  • ldap_exop()
  • ldap_exop_passwd()
  • ldap_exop_whoami()

マルチバイト文字列

  • mb_chr()
  • mb_ord()
  • mb_scrub()

Oracle OCI8

  • oci_register_taf_callback()
  • oci_unregister_taf_callback()

Sockets

  • socket_addrinfo_lookup()
  • socket_addrinfo_connect()
  • socket_addrinfo_bind()
  • socket_addrinfo_explain()

Sodium

  • sodium_add()
  • sodium_bin2hex()
  • sodium_compare()
  • sodium_crypto_aead_aes256gcm_decrypt()
  • sodium_crypto_aead_aes256gcm_encrypt()
  • sodium_crypto_aead_aes256gcm_is_available()
  • sodium_crypto_aead_aes256gcm_keygen()
  • sodium_crypto_aead_chacha20poly1305_decrypt()
  • sodium_crypto_aead_chacha20poly1305_encrypt()
  • sodium_crypto_aead_chacha20poly1305_ietf_decrypt()
  • sodium_crypto_aead_chacha20poly1305_ietf_encrypt()
  • sodium_crypto_aead_chacha20poly1305_ietf_keygen()
  • sodium_crypto_aead_chacha20poly1305_keygen()
  • sodium_crypto_auth_keygen()
  • sodium_crypto_auth_verify()
  • sodium_crypto_auth()
  • sodium_crypto_box_keypair_from_secretkey_and_publickey()
  • sodium_crypto_box_keypair()
  • sodium_crypto_box_open()
  • sodium_crypto_box_publickey_from_secretkey()
  • sodium_crypto_box_publickey()
  • sodium_crypto_box_seal_open()
  • sodium_crypto_box_seal()
  • sodium_crypto_box_secretkey()
  • sodium_crypto_box_seed_keypair()
  • sodium_crypto_box()
  • sodium_crypto_generichash_final()
  • sodium_crypto_generichash_init()
  • sodium_crypto_generichash_keygen()
  • sodium_crypto_generichash_update()
  • sodium_crypto_generichash()
  • sodium_crypto_kdf_derive_from_key()
  • sodium_crypto_kdf_keygen()
  • sodium_crypto_kx_client_session_keys()
  • sodium_crypto_kx_keypair()
  • sodium_crypto_kx_publickey()
  • sodium_crypto_kx_secretkey()
  • sodium_crypto_kx_seed_keypair()
  • sodium_crypto_kx_server_session_keys()
  • sodium_crypto_pwhash_scryptsalsa208sha256_str_verify()
  • sodium_crypto_pwhash_scryptsalsa208sha256_str()
  • sodium_crypto_pwhash_scryptsalsa208sha256()
  • sodium_crypto_pwhash_str_verify()
  • sodium_crypto_pwhash_str()
  • sodium_crypto_pwhash()
  • sodium_crypto_scalarmult_base()
  • sodium_crypto_scalarmult()
  • sodium_crypto_secretbox_keygen()
  • sodium_crypto_secretbox_open()
  • sodium_crypto_secretbox()
  • sodium_crypto_shorthash_keygen()
  • sodium_crypto_shorthash()
  • sodium_crypto_sign_detached()
  • sodium_crypto_sign_ed25519_pk_to_curve25519()
  • sodium_crypto_sign_ed25519_sk_to_curve25519()
  • sodium_crypto_sign_keypair_from_secretkey_and_publickey()
  • sodium_crypto_sign_keypair()
  • sodium_crypto_sign_open()
  • sodium_crypto_sign_publickey_from_secretkey()
  • sodium_crypto_sign_publickey()
  • sodium_crypto_sign_secretkey()
  • sodium_crypto_sign_seed_keypair()
  • sodium_crypto_sign_verify_detached()
  • sodium_crypto_sign()
  • sodium_crypto_stream_keygen()
  • sodium_crypto_stream_xor()
  • sodium_crypto_stream()
  • sodium_hex2bin()
  • sodium_increment()
  • sodium_memcmp()
  • sodium_memzero()
  • sodium_pad()
  • sodium_unpad()

ZIP

  • ZipArchive::count()
  • ZipArchive::setEncryptionName()
  • ZipArchive::setEncryptionIndex()

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

PHP コア

  • PHP_FLOAT_DIG
  • PHP_FLOAT_EPSILON
  • PHP_FLOAT_MIN
  • PHP_FLOAT_MAX
  • PHP_OS_FAMILY

ファイル情報

  • FILEINFO_EXTENSION

JSON

  • JSON_INVALID_UTF8_IGNORE
  • JSON_INVALID_UTF8_SUBSTITUTE

GD

  • IMG_EFFECT_MULTIPLY
  • IMG_BMP

LDAP

  • LDAP_EXOP_START_TLS
  • LDAP_EXOP_MODIFY_PASSWD
  • LDAP_EXOP_REFRESH
  • LDAP_EXOP_WHO_AM_I
  • LDAP_EXOP_TURN

パスワードのハッシュ

  • PASSWORD_ARGON2I
  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST
  • PASSWORD_ARGON2_DEFAULT_TIME_COST
  • PASSWORD_ARGON2_DEFAULT_THREADS

PCRE

  • PREG_UNMATCHED_AS_NULL

PDO

  • PDO::PARAM_STR_NATL
  • PDO::PARAM_STR_CHAR
  • PDO::ATTR_DEFAULT_STR_PARAM

Sodium

  • SODIUM_LIBRARY_VERSION
  • SODIUM_LIBRARY_MAJOR_VERSION
  • SODIUM_LIBRARY_MINOR_VERSION
  • SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES
  • SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES
  • SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES
  • SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES
  • SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES
  • SODIUM_CRYPTO_AUTH_BYTES
  • SODIUM_CRYPTO_AUTH_KEYBYTES
  • SODIUM_CRYPTO_BOX_SEALBYTES
  • SODIUM_CRYPTO_BOX_SECRETKEYBYTES
  • SODIUM_CRYPTO_BOX_PUBLICKEYBYTES
  • SODIUM_CRYPTO_BOX_KEYPAIRBYTES
  • SODIUM_CRYPTO_BOX_MACBYTES
  • SODIUM_CRYPTO_BOX_NONCEBYTES
  • SODIUM_CRYPTO_BOX_SEEDBYTES
  • SODIUM_CRYPTO_KDF_BYTES_MIN
  • SODIUM_CRYPTO_KDF_BYTES_MAX
  • SODIUM_CRYPTO_KDF_CONTEXTBYTES
  • SODIUM_CRYPTO_KDF_KEYBYTES
  • SODIUM_CRYPTO_KX_SEEDBYTES
  • SODIUM_CRYPTO_KX_SESSIONKEYBYTES
  • SODIUM_CRYPTO_KX_PUBLICKEYBYTES
  • SODIUM_CRYPTO_KX_SECRETKEYBYTES
  • SODIUM_CRYPTO_KX_KEYPAIRBYTES
  • SODIUM_CRYPTO_GENERICHASH_BYTES
  • SODIUM_CRYPTO_GENERICHASH_BYTES_MIN
  • SODIUM_CRYPTO_GENERICHASH_BYTES_MAX
  • SODIUM_CRYPTO_GENERICHASH_KEYBYTES
  • SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN
  • SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX
  • SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13
  • SODIUM_CRYPTO_PWHASH_ALG_DEFAULT
  • SODIUM_CRYPTO_PWHASH_SALTBYTES
  • SODIUM_CRYPTO_PWHASH_STRPREFIX
  • SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE
  • SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
  • SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE
  • SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE
  • SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE
  • SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE
  • SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES
  • SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX
  • SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE
  • SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE
  • SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE
  • SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE
  • SODIUM_CRYPTO_SCALARMULT_BYTES
  • SODIUM_CRYPTO_SCALARMULT_SCALARBYTES
  • SODIUM_CRYPTO_SHORTHASH_BYTES
  • SODIUM_CRYPTO_SHORTHASH_KEYBYTES
  • SODIUM_CRYPTO_SECRETBOX_KEYBYTES
  • SODIUM_CRYPTO_SECRETBOX_MACBYTES
  • SODIUM_CRYPTO_SECRETBOX_NONCEBYTES
  • SODIUM_CRYPTO_SIGN_BYTES
  • SODIUM_CRYPTO_SIGN_SEEDBYTES
  • SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES
  • SODIUM_CRYPTO_SIGN_SECRETKEYBYTES
  • SODIUM_CRYPTO_SIGN_KEYPAIRBYTES
  • SODIUM_CRYPTO_STREAM_NONCEBYTES
  • SODIUM_CRYPTO_STREAM_KEYBYTES

Zip

  • ZipArchive::EM_NONE
  • ZipArchive::EM_AES_128
  • ZipArchive::EM_AES_192
  • ZipArchive::EM_AES_256

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

number_format() は負のゼロを返さない

以前のバージョンでは、number_format() 関数が -0 を返せました。 これは IEEE 754 浮動小数点標準規格に沿ったまったく問題のない値ですが、 人間が読みやすい形式に数値をフォーマットするという意味では少し不自然でした。

<?php

var_dump(number_format(-0.01)); // string(2) "-0" ではなく string(1) "0" となります

オブジェクトと配列の型変換における数値キーの扱い

配列からオブジェクトへのキャストやその逆のキャストにおける、数値キーの扱いが改善されました。 明示的なキャストだけではなく settype() を使った場合も同様です。

数値キーの配列をオブジェクトにキャストしたときに、その要素にアクセスできるようになったのです。

<?php

// 配列からオブジェクトへの変換
$arr = [0 => 1];
$obj = (object)$arr;
var_dump(
$obj,
$obj->{'0'}, // アクセスできるようになりました
$obj->{0} // アクセスできるようになりました
);

上の例の出力は以下となります。

object(stdClass)#1 (1) {
  ["0"]=>    // 数値キーではなく、文字列のキーになりました
  int(1)
}
int(1)
int(1)

また、オブジェクトに数値のキーが含まれる場合に、 配列にキャストしてもその要素にアクセスできるようになりました。

<?php

// オブジェクトから配列への変換
$obj = new class {
public function __construct()
{
$this->{0} = 1;
}
};
$arr = (array)$obj;
var_dump(
$arr,
$arr[0], // アクセスできるようになりました
$arr['0'] // アクセスできるようになりました
);

上の例の出力は以下となります。

array(1) {
  [0]=>    // 文字列のキーではなく、整数のキーになります
  int(1)
}
int(1)
int(1)

get_class() に null を渡せない

以前のバージョンでは、get_class() に null を渡すと、そのコンテキストの外側のクラスを返していました。 この機能は削除され、null を渡すと E_WARNING が発生するようになりました。 以前と同様の挙動を実現したい場合は、null を渡すのではなく単にパラメータを省略するようにしましょう。

countable ではない型をカウントしたときの警告

countable ではない型に対して count() (およびそのエイリアスである sizeof()) を使ったときに E_WARNING が発生するようになりました。

<?php

var_dump(
count(null), // NULL はカウントできません
count(1), // integer はカウントできません
count('abc'), // string はカウントできません
count(new stdClass), // Countable インターフェイスを実装していないオブジェクトはカウントできません
count([1,2]) // array はカウントできます
);

上の例の出力は以下となります。

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
int(0)
int(1)
int(1)
int(1)
int(2)

ext/hash がリソースからオブジェクトへ

長期にわたるリソースからオブジェクトへの移行作業の一環として、 Hash 拡張モジュールがリソースではなくオブジェクトを使うようになりました。 開発者側から見て特に変わるところはありませんが、もし is_resource() を使ったチェックを行っているのなら、 それを is_object() に書き換える必要があります。

SSL/TLS のデフォルトの改善

デフォルト設定が以下のように変わりました。

  • tls:// が、TLSv1.0 や TLSv1.1 や TLSv1.2 のデフォルトになりました。
  • ssl:// は tls:// のエイリアスになりました。
  • STREAM_CRYPTO_METHOD_TLS_* 定数のデフォルトが、 TLSv1.0 だけではなく TLSv1.0 または TLSv1.1 + TLSv1.2 となりました。

gettype() にクローズ済みのリソースを渡した際の戻り値

以前のバージョンでは、 gettype() にクローズ済みのリソースを渡すと、"unknown type" という文字列を返していました。 これからは、 "resource (closed)" という文字列が返されます。

is_object() と __PHP_Incomplete_Class

以前のバージョンでは、 __PHP_Incomplete_Class クラスに対して、 is_object() を使うと false が返されていました。 これからは true が返されます。

定義されていない定数のエラーレベル変更

定義されていない定数への参照を行った場合、 E_WARNING を生成するようになりました。 (今までは E_NOTICEを生成していました。) 次のPHPメジャーバージョンでは、Error 例外を生成するように変更される予定です。

Windows サポート

現在、公式にサポートしている最低バージョンは Windows 7/Server 2008 R2です。

trait のプロパティの値チェック

trait のプロパティの値に対して互換性があるかどうかをチェックするときは、値のキャストを行わなくなりました。

object をクラス名に使う

object という名前は、PHP 7.0 では緩く予約されていました。 PHP 7.2 からは制約が強くなり、クラスや trait、インターフェイスの名前として使うことが禁止されます。

NetWare サポート

NetWareのサポートが削除されました。

array_unique() 関数を SORT_STRING と使う場合

array_unique() 関数を SORT_STRING と使う場合、以前は配列をコピーし、重複した要素を削除 (配列を後にパックせずに) していましたが、このバージョンからは 新しい配列作られ、ユニークな要素を追加するようになりました。 これにより、以前のバージョンとは異なった数値のインデックスが生成されます。

bcmod() の小数点に対する挙動変更

bcmod() 関数が小数点切り捨てをしないようになりました。
これからは、挙動は % 演算子ではなく、 fmod()に準拠します。
たとえば、 bcmod('4', '3.5') はいままでの1ではなく、 0.5 を返します。

ハッシュ関数と非暗号化ハッシュ

hash_hmac()、 hash_hmac_file()、 hash_pbkdf2()、 および hash_init() ( HASH_HMAC) は非暗号化ハッシュを受け入れないように変更されました。

json_decode() 関数のオプション

json_decode() 関数のオプション、 JSON_OBJECT_AS_ARRAY は、2番めのパラメータ (assoc) が null の場合に使用されるようになりました。 JSON_OBJECT_AS_ARRAY はこれまで無視されていました。

rand() と mt_rand() の出力

特定のシードで rand() と mt_rand() で生成されたシーケンスは、64-bit マシンで動作しているPHP 7.1と値が異なる場合があります。 (モジュロバイアスのバグ修正が実装されました。).

sql.safe_mode のini設定削除

sql.safe_mode のini設定が削除されました。

date_parse() と date_parse_from_format() 関数への変更

date_parse() 関数 と date_parse_from_format() 関数 が返す zone 要素は、 分ではなくて秒を表現するようになり、符号も逆になりました。 たとえば -120 分は 7200 秒を意味するようになりました。

外部から入力されるCookie

PHP 7.2.34 以降は、セキュリティ上の理由により、 外部から入力される Cookie の 名前 はurlデコードされなくなりました。

User Contributed Notes

There are no user contributed notes for this page.


PHP 7.2.x で推奨されなくなる機能

クオートしない文字列

クオートしない文字列は、その名前のグローバル定数が定義されていない場合は単なる文字列という扱いになります。 このとき、いままでは E_NOTICE が発生していました。 PHP 7.2.x 以降は、E_WARNING が発生するようになります。 次のメジャーバージョンアップ後は Error 例外が発生するようになります。

<?php

var_dump(NONEXISTENT);

/* 出力:
Warning: Use of undefined constant NONEXISTENT - assumed 'NONEXISTENT' (this will throw an Error in a future version of PHP) in %s on line %d
string(11) "NONEXISTENT"
*/

png2wbmp() および jpeg2wbmp()

GD 拡張モジュールの png2wbmp() および jpeg2wbmp() 関数は非推奨となり、次のPHPのメジャーバージョンアップで削除される予定です。

INTL_IDNA_VARIANT_2003 バリアント

Intl 拡張モジュール では、INTL_IDNA_VARIANT_2003 バリアントは非推奨になりました。 これは idn_to_ascii() および idn_to_utf8() 関数の デフォルト値として現在使われています。PHP 7.4 ではこのデフォルト値が INTL_IDNA_VARIANT_UTS46 に変更される予定ですし、 PHP の次のメジャーバージョンアップでは、 INTL_IDNA_VARIANT_2003 が削除される予定です。

__autoload() メソッド

__autoload()メソッドは非推奨になりました。なぜなら、この関数は (autoloader をチェインできない点で) spl_autoload_register() に劣っていますし、これら2つの autoload のやり方には互換性がないからです。

php.ini の track_errors および $php_errormsg 変数

php.ini で track_errors の設定が有効になると、 致命的でないエラーが起きた場合に、$php_errormsg 変数がローカルスコープに生成されます。 このようなエラー情報を収集するのに望ましい方法は、error_get_last() 関数を使うことなので この機能は非推奨になりました。

create_function() 関数

(eval() 関数のラッパーなので) この関数にはセキュリティ上の問題があるため、非推奨になりました。 好ましい代替は 無名関数 です。

php.ini の mbstring.func_overload

この設定が有効になった環境で使われる、文字列ベースの関数の相互運用上の問題により、この設定は非推奨になりました。

(unset) キャスト

あらゆる値を (unset) キャストすると null になりますが、この余分な機能は非推奨になりました。

第二引数を指定しないで parse_str() 関数を使う

2番目の引数を指定しないで parse_str() 関数を使うと、 これが使われた関数内部のシンボルテーブルを収集してしまいます。 これはセキュリティ上の問題があるため、2番目の引数を指定しないで parse_str() を使うのは非推奨になりました。この関数の2番目の引数は、クエリストリングを配列に設定してくれる ので、常に設定すべきです。

gmp_random() 関数

この関数は、外部に公開されていない、プラットフォーム依存のlimbサイズの範囲に基づいて ランダムな数を生成しています。このため、この関数は非推奨になりました。GMP 拡張モジュールを使って ランダムな数値を生成する望ましいやり方は、 gmp_random_bits() および gmp_random_range() を使うことです。

each()関数

この関数は、通常の foreachよりもループが遅く、PHPそのものの変更に伴って 実装上の問題を引き起こしたことから、非推奨になりました。

assert()関数に文字列を渡す

assert() で eval() させるには、この関数に文字列を渡す必要がありました。 リモートからコードを実行される可能性があるので、この関数に文字列を渡すのは非推奨になりました。boolean 値を渡すのが お勧めです。

エラーハンドラの $errcontext 引数

$errcontext 引数には、エラーが起きた場所の全てのローカル変数 が含まれています。これは使われることが少ないことと、PHP の内部的な最適化に問題を 引き起こすため、非推奨になりました。エラーが起きた場所のローカル変数の情報を取得 するには、デバッガを使うべきです。

read_exif_data() 関数

read_exif_data() 関数は非推奨になりました。 代わりに exif_read_data() 関数を使ってください。

User Contributed Notes

Anonymous 26-Jul-2018 05:09
An empty <?php?> Codeblock in PHP 7.2.0 will put out an "Unquoted strings" warning. To prevent that, add at least one empty space into the codeblock.

Example:
<?php

<?php/*
echo "This was some useful code.\n";
*/?>

?>
Gives: PHP Warning:  Use of undefined constant php - assumed 'php' (this will throw an Error in a future version of PHP)

Fix via:
<?php

<?php   /*
echo "This was some useful code.\";
*/?>

?>

Don't know if that is an intentional behaviour or a side effect.
webmaster at thedigitalorchard dot ca 01-Feb-2018 05:14
Instead of __autoload(), you can use spl_autoload_register() very easily, as per the documentation:

spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

And this lets you have multiple autoloaders instead of one global one.


その他の変更

utf8_encode() および utf8_decode() 関数の移動

utf8_encode() および utf8_decode() 関数は、文字列関数の標準拡張モジュールに移動しました。以前は、この関数を使うには、 XML 拡張モジュールが必須でした。

mail() および mb_send_mail() への変更

mail() および mb_send_mail() の $additional_headers パラメータは、string の代わりに array も受け付けるようになりました。

LMDB のサポート

DBA 拡張モジュールは、新たに LMDB をサポートしました。

PHP ビルドシステムへの変更

  • Unix: Autoconf 2.64 以上が PHP をビルドするのに必須になりました。
  • Unix: --with-pdo-oci configure 引数に対して、Oracle Instant Client のバージョン指定は不要になりました。
  • Unix: --enable-gd-native-ttf configure 引数は削除されました。これは PHP 5.5.0 以降では使われていませんでした。
  • Windows: --with-config-profile configure 引数が追加されました。 この引数は、 config.nice.bat ファイルのような形で、特定の configure引数を保存するのに使えます。

GD 関数の変更

  • システムの libgd ライブラリを使って PHP がコンパイルされた場合に imageantialias() 関数が使えるようになりました。
  • imagegd() 関数は、truecolor 画像を truecolor 画像として保存するようになりました。 以前は、パレットに変換していました。

MCrypt 拡張モジュールが PECL に移動

MCrypt 拡張モジュールは、PHPコアから PECL に移動しました。 mcrypt ライブラリは 2007年から更新されていませんし、それ自体使うことが全く推奨できないからです。 代わりに OpenSSL もしくは Sodium 拡張モジュール を使ってください。

session_module_name()

session_module_name() に "user" を渡すと、 レベル E_RECOVERABLE_ERROR のエラーが発生します。 以前は、通知せずに無視されていました。

User Contributed Notes

There are no user contributed notes for this page.


PHP 7.0.x から PHP 7.1.x への移行

目次

  • 新機能
  • 新しい関数
  • 新しいグローバル定数
  • 下位互換性のない変更点
  • PHP 7.1.x で推奨されなくなる機能
  • 変更された関数
  • その他の変更
  • Windows のサポート

このマイナーバージョンアップには数多くの 新機能 があります。 また、 互換性がない変更 が多少あるので、実運用環境の PHP をこのバージョンにあげる前にはテストすべきです。

これらのバージョンへの移行ガイドも参照ください。 7.0.x.

User Contributed Notes

There are no user contributed notes for this page.


新機能

nullable な型

パラメータや戻り値の型宣言で nullable 指定ができるようになりました。 型の前にクエスチョンマークをつけると、nullable であることを指定できます。 nullable 指定をすると、指定した型だけでなく null も渡せるようになります。

<?php

function testReturn(): ?string
{
return 'elePHPant';
}

var_dump(testReturn());

function testReturn(): ?string
{
return null;
}

var_dump(testReturn());

function test(?string $name)
{
var_dump($name);
}

test('elePHPant');
test(null);
test();

上の例の出力は以下となります。

string(10) "elePHPant"
NULL
string(10) "elePHPant"
NULL
Uncaught Error: Too few arguments to function test(), 0 passed in...

void 関数

戻り値の型として void が導入されました。戻り値の型を void と宣言した関数は、関数内での return 文を省略するか、あるいは空の return を使う必要があります。 void 関数から null を返すことはできません。

<?php
function swap(&$left, &$right): void
{
if ($left === $right) {
return;
}

$tmp = $left;
$left = $right;
$right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

上の例の出力は以下となります。

null
int(2)
int(1)

void 関数の戻り値を使おうとした場合はその値は null と評価されます。 警告は発生しません。警告を発生させると、一般的な高階関数の利用にも影響するからです。

対称的な配列の分解

配列の短縮構文 ([]) を使って、 代入用に配列の値を取り出せるようになりました (foreach でも使えます)。 これは、list() の代替として使えます (list() もまだ使えます)。

<?php
$data = [
[1, 'Tom'],
[2, 'Fred'],
];

// list() 形式
list($id1, $name1) = $data[0];

// [] 形式
[$id1, $name1] = $data[0];

// list() 形式
foreach ($data as list($id, $name)) {
// $id と $name を使う処理をここに書きます
}

// [] 形式
foreach ($data as [$id, $name]) {
// $id と $name を使う処理をここに書きます
}

クラス定数のアクセス範囲指定

クラス定数のアクセス範囲を指定できるようになりました。

<?php
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}

iterable 擬似型

新しい擬似型 (callable と同じような型) である iterable が導入されました。 パラメータおよび戻り値の型指定で使うことができます。 配列か、あるいは Traversable インターフェイスを実装したオブジェクトを受け付けるようになります。 派生型に貸しては、子クラスのパラメータの型が、 親クラスの array や Traversable を拡張して iterable に広げることができます。 戻り値の型に関しては、親クラスの iterable 型指定を子クラスで 配列あるいはオブジェクト (Traversable を実装したもの) に絞り込むことができます。

<?php
function iterator(iterable $iter)
{
foreach ($iter as $val) {
//
}
}

例外処理における複数の例外の catch

ひとつの catch ブロックで複数の例外を扱えるようになりました。 パイプ文字 (|) を使って指定します。 これは、異なるクラス階層に由来する異なる例外を同じように処理したい場合に有用です。

<?php
try {
// 何かのコード
} catch (FirstException | SecondException $e) {
// FirstException と SecondException をこのブロックで処理します
}

list() におけるキーのサポート

list() (あるいはその短縮版である [] 構文) の内部でキーを指定できるようになりました。 つまり、キーが整数でなかったりシーケンシャルでなかったりした場合でも、 配列の値を取り出せるようになったということです。

<?php
$data = [
["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];

// list() 形式
list("id" => $id1, "name" => $name1) = $data[0];

// [] 形式
["id" => $id1, "name" => $name1] = $data[0];

// list() 形式
foreach ($data as list("id" => $id, "name" => $name)) {
// $id と $name を使う処理をここに書きます
}

// [] 形式
foreach ($data as ["id" => $id, "name" => $name]) {
// $id と $name を使う処理をここに書きます
}

負の文字列オフセットのサポート

文字列操作関数 のうちオフセット指定のできるものすべてについて、負のオフセットを指定できるようになりました。 [] や {} による 文字列への文字単位のアクセス についても同様です。 負のオフセットは、文字列の末尾からのオフセットと解釈されます。

<?php
var_dump("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));

上の例の出力は以下となります。

string (1) "e"
int(3)

文字列や配列に対する負のオフセットが、文字列内での単純な変数パース構文においても使えるようになりました。

<?php
$string = 'bar';
echo "The last character of '$string' is '$string[-1]'.\n";
?>

上の例の出力は以下となります。

The last character of 'bar' is 'r'.

ext/openssl における AEAD のサポート

openssl_encrypt() および openssl_decrypt() の追加のパラメータで、 AEAD (GCM モードおよび CCM モード) をサポートするようになりました。

Closure::fromCallable() による callables から Closure への変換

Closure クラスに新しいstaticメソッドが追加されました。 callable を、簡単に Closure オブジェクトに変換できるようにするものです。

<?php
class Test
{
public function exposeFunction()
{
return Closure::fromCallable([$this, 'privateFunction']);
}

private function privateFunction($param)
{
var_dump($param);
}
}

$privFunc = (new Test)->exposeFunction();
$privFunc('some value');

上の例の出力は以下となります。

string(10) "some value"

非同期シグナルハンドリング

新しい関数 pcntl_async_signals() が追加されました。これは、tick を使わない非同期シグナルハンドリングを有効にするものです (tick は相当大きなオーバーヘッドになります)。

<?php
pcntl_async_signals(true); // 非同期シグナルを有効にします

pcntl_signal(SIGHUP, function($sig) {
echo "SIGHUP\n";
});

posix_kill(posix_getpid(), SIGHUP);

上の例の出力は以下となります。

SIGHUP

ext/curl における HTTP/2 サーバープッシュのサポート

CURL 拡張モジュールがサーバープッシュに対応するようになりました (curl バージョン 7.46 以降が必要です)。 curl_multi_setopt() 関数に新しい定数 CURLMOPT_PUSHFUNCTION を指定すれば、この機能を使えます。 また、定数 CURL_PUSH_OK と CURL_PUSH_DENY も新たに追加されました。 これらは、サーバープッシュコールバックの実行を許可したり拒否したりするものです。

ストリームコンテキストオプション

tcp_nodelay ストリームコンテキストオプションが追加されました。

User Contributed Notes

DYM 09-Apr-2018 10:36
<?php
function swap( &$a, &$b ): void
  { [ $a, $b ] = [ $b, $a ]; }
?>
unti1x 06-Apr-2018 11:20
Note that declaring nullable return type does not mean that you can skip return statement at all. For example:

php > function a(): ?string { }
php > a();
PHP Warning:  Uncaught TypeError: Return value of a() must be of the type string or null, none returned in php shell code:2

php > function b(): ?string { return; }
PHP Fatal error:  A function with return type must return a value (did you mean "return null;" instead of "return;"?) in php shell code on line 2


新しい関数

PHP コア

  • sapi_windows_cp_get()
  • sapi_windows_cp_set()
  • sapi_windows_cp_conv()
  • sapi_windows_cp_is_utf8()

Closure

  • Closure::fromCallable()

CURL

  • curl_multi_errno()
  • curl_share_errno()
  • curl_share_strerror()

OpenSSL

  • openssl_get_curve_names()

Session

  • session_create_id()
  • session_gc()

SPL

  • is_iterable()

PCNTL

  • pcntl_async_signals()
  • pcntl_signal_get_handler()

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

コアで定義済みの定数

  • PHP_FD_SETSIZE

CURL

  • CURLMOPT_PUSHFUNCTION
  • CURL_PUSH_OK
  • CURL_PUSH_DENY

データのフィルタリング

  • FILTER_FLAG_EMAIL_UNICODE

Image Processing and GD

  • IMAGETYPE_WEBP

JSON

  • JSON_UNESCAPED_LINE_TERMINATORS

LDAP

  • LDAP_OPT_X_SASL_NOCANON
  • LDAP_OPT_X_SASL_USERNAME
  • LDAP_OPT_X_TLS_CACERTDIR
  • LDAP_OPT_X_TLS_CACERTFILE
  • LDAP_OPT_X_TLS_CERTFILE
  • LDAP_OPT_X_TLS_CIPHER_SUITE
  • LDAP_OPT_X_TLS_KEYFILE
  • LDAP_OPT_X_TLS_RANDOM_FILE
  • LDAP_OPT_X_TLS_CRLCHECK
  • LDAP_OPT_X_TLS_CRL_NONE
  • LDAP_OPT_X_TLS_CRL_PEER
  • LDAP_OPT_X_TLS_CRL_ALL
  • LDAP_OPT_X_TLS_DHFILE
  • LDAP_OPT_X_TLS_CRLFILE
  • LDAP_OPT_X_TLS_PROTOCOL_MIN
  • LDAP_OPT_X_TLS_PROTOCOL_SSL2
  • LDAP_OPT_X_TLS_PROTOCOL_SSL3
  • LDAP_OPT_X_TLS_PROTOCOL_TLS1_0
  • LDAP_OPT_X_TLS_PROTOCOL_TLS1_1
  • LDAP_OPT_X_TLS_PROTOCOL_TLS1_2
  • LDAP_OPT_X_TLS_PACKAGE
  • LDAP_OPT_X_KEEPALIVE_IDLE
  • LDAP_OPT_X_KEEPALIVE_PROBES
  • LDAP_OPT_X_KEEPALIVE_INTERVAL

PostgreSQL

  • PGSQL_NOTICE_LAST
  • PGSQL_NOTICE_ALL
  • PGSQL_NOTICE_CLEAR

SPL

  • MT_RAND_PHP

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

関数に渡す引数が少ない場合の挙動

これまでのバージョンでは、ユーザー定義の関数に渡す引数が足りない場合は warning が発生していました。PHP 7.1 以降では、warning ではなく Error 例外が発生するようになります。 この変更はユーザー定義の関数に対してだけのもので、 内部関数には影響を及ぼしません。

<?php
function test($param){}
test();

上の例の出力は、 たとえば以下のようになります。

Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in %s on line %d and exactly 1 expected in %s:%d

スコープを調べる関数の動的呼び出しの禁止

ある種の関数について、動的な呼び出し ($func() や array_map('extract', ...) のような形式) が使えなくなりました。対象になるのは、別のスコープを調べたり変更したり、 あいまいな挙動になってしまったりするような関数です。 この変更の影響を受ける関数は、以下のとおりです。

  • assert() - 最初の引数に文字列を渡した場合
  • compact()
  • extract()
  • func_get_args()
  • func_get_arg()
  • func_num_args()
  • get_defined_vars()
  • mb_parse_str() - 引数が一つだけの場合
  • parse_str() - 引数が一つだけの場合
<?php
(function () {
$func = 'func_num_args';
$func();
})();

上の例の出力は以下となります。

Warning: Cannot call func_num_args() dynamically in %s on line %d

クラス、インターフェイス、トレイトに使えない名前

これらのキーワードが、クラスやインターフェイスやトレイトの名前として使えなくなりました。

  • void
  • iterable

数値形式文字列の変換が科学記法に対応

数値形式の文字列の演算や型変換が、科学記法に対応するようになりました。
(int) によるキャストや、
intval() (基数が10の場合)、
settype()、decbin()、
decoct()、dechex() といった関数もその対象です。

mt_rand() のアルゴリズムの修正

mt_rand() のデフォルトが、修正版のメルセンヌ・ツイスタ
アルゴリズムを使うようになりました。mt_rand()
の結果に依存するコードを書いていた場合は、mt_srand()
のオプションの第二引数に MT_RAND_PHP
を指定すると、これまでの挙動 (間違った実装) を維持できます。

rand() と srand() が、 それぞれ mt_rand() と mt_srand() のエイリアスとなる

rand() と srand() は、それぞれ mt_rand() と mt_srand() のエイリアスになりました。つまり、 rand()、shuffle()、 str_shuffle()、array_rand() の出力がこれまでのバージョンとは変わるということです。

ASCII 制御文字 delete は識別子として使えない

ASCII 制御文字 delete (0x7F) は、 クォートしない限りは識別子として使えなくなりました。

error_log に syslog を指定した場合の変更

INI 項目 error_log の設定値を syslog にした場合に、PHP のエラーレベルが syslog のエラーレベルにマッピングされるようになりました。 これまでのバージョンではすべてのエラーが notice レベルで記録されていましたが、 この変更によって、今までよりも細やかな区別ができるようになります。

未完成のオブジェクトのデストラクタは呼び出されない

オブジェクトのコンストラクタの実行中に例外がスローされた場合に、 そのオブジェクトのデストラクタが呼ばれることはなくなりました。 以前のバージョンでは、場合によっては (例: そのオブジェクトが例外バックトレースなどで外部から参照される場合) デストラクタが呼ばれることもありました。

参照渡しの引数の call_user_func() での扱い

引数を参照渡しで受け取る関数を call_user_func() から呼んだときに、例外が発生するようになりました。 以前のバージョンでは、完全修飾形式の呼び出しであるか否かによってこの場合の挙動が異なっていました。

さらにこの場合、call_user_func() や call_user_func_array() は関数呼び出しを中断しなくなりました。 "expected reference" という警告は出すものの、処理自体はそのまま続行します。

文字列における空のインデックス演算子はサポートしない

文字列に空のインデックス演算子を適用する (例: $str[] = $x) と、fatal エラーが発生します。これまでのバージョンではエラーにならず、 ただ配列に変換されるだけでした。

空文字列に対して、文字列インデックス経由で値を設定する操作

空文字列に対して、一文字単位で変更する操作が、 空でない文字列と同じように機能するようになりました。 つまり、範囲外のオフセットに対する書き込みがスペースで埋められ、 整数型でない値は整数に変換され、最初の文字だけが採用されるというものです。 これより前のバージョンでは、黙って空の配列として扱われていました。

<?php
$a = '';
$a[10] = 'foo';
var_dump($a);
?>

上の例の PHP 7.0 での出力は、このようになります。

array(1) {
  [10]=>
  string(3) "foo"
}

上の例の PHP 7.1 での出力は、このようになります。

string(11) "          f"

削除された INI 項目

以下の INI 項目は、削除されました。

  • session.entropy_file
  • session.entropy_length
  • session.hash_function
  • session.hash_bits_per_character

参照による代入で自動的に作られる配列の要素の並び順の変更

参照による代入で配列の要素が自動的に作られる場合に、その並び順が変更されました。

<?php
$array = [];
$array["a"] =& $array["b"];
$array["b"] = 1;
var_dump($array);
?>

上の例の PHP 7.0 での出力は、このようになります。

array(2) {
  ["a"]=>
  &int(1)
  ["b"]=>
  &int(1)
}

上の例の PHP 7.1 での出力は、このようになります。

array(2) {
  ["b"]=>
  &int(1)
  ["a"]=>
  &int(1)
}

同値な要素の並び順

内部的なソートアルゴリズムが改良されたことに伴って、 比較したときに等しいとみなされる要素の並び順が以前とは変わるかもしれません。

注意:

同値な要素の並び順に依存するコードは書かないようにしましょう。 その並び順がいつまでも同じであるとは限りません。

E_RECOVERABLE エラーのエラーメッセージ

E_RECOVERABLE エラーのエラーメッセージが、 "Catchable fatal error" から "Recoverable fatal error" に変更されました。

unserialize() 関数の $options パラメータ

unserialize() 関数の $options パラメータの allowed_classes 要素が、 型を厳密に解釈するようになりました。 つまり、array または bool 以外のあらゆる値が与えられても、 unserialize() は false を返し、 E_WARNING レベルの警告が発生します。

DateTime クラスのコンストラクタに、マイクロ秒も組み込まれる

DateTime と DateTimeImmutable は、現在時刻、明示的な時刻、 または相対時刻を示す文字列 (例: "first day of next month") から構築されると、 マイクロ秒を適切に含めるようになりました。 これは、新しく生成されたふたつのインスタンスが、true ではなくて false を返しやすくなったということです。

<?php
new DateTime() == new DateTime();
?>

致命的なエラーが Error 例外に変換される

Date 拡張モジュールでは、 DateTime または DatePeriod クラス のシリアライズデータが不正だったり、 シリアライズしたデータからタイムゾーンを初期化するのに失敗した場合、 致命的なエラーにならず、 __wakeup() や __set_state() メソッドから Error 例外をスローするようになりました。

DBA 拡張モジュールでは、 (dba_insert() のように) データを変更する関数は、キーが正確にふたつの要素を含んでいない場合に キャッチ可能な fatal error ではなく、 Error 例外をスローするようになりました。

DOM 拡張モジュールでは、 不正なスキーマ や RelaxNG検証コンテキスト は 致命的なエラーにならず、 Error 例外をスローするようになりました。 同じように、適切な基底クラスを継承しないノードクラスを登録しようとしたり、 不正なプロパティを読み出そうとしたり、 読み込み専用のプロパティに書き込もうとしたりしても、 同様に Error 例外をスローようになりました。

IMAP 拡張モジュールでは、 16385 バイト以上の email アドレスは、 致命的なエラーにならず、 Error 例外をスローするようになりました。

Intl 拡張モジュールでは、 Collator クラスを継承したクラスで、 親メソッドを呼ぶ前に親のコンストラクタを呼ぶのに失敗すると、 回復可能な fatal error にはならず、 Error 例外をスローするようになりました。 同様に、Transliterator を clone すると、 内部の transliterator の複製に失敗した時に 致命的なエラーにならず、 Error 例外をスローするようになりました。

LDAP 拡張モジュールでは、 ldap_batch_modify() 関数に不明な変更タイプを渡すと、 致命的なエラーにならず、 Error 例外をスローするようになりました。

mbstring 拡張モジュールでは、 mb_ereg() 関数と mb_eregi() 関数が、 'e' オプションを使い、かつ 不正な PHP の式が渡された場合に ParseError 例外をスローするようになりました。

Mcrypt 拡張モジュールでは、 mcrypt_encrypt() と mcrypt_decrypt() 関数が mcrypt を初期化できなかった場合に 致命的なエラーにならず、 Error 例外をスローするようになりました。

mysqli 拡張モジュールでは、 不正なプロパティを読み出そうとしたり、 読み取り専用のプロパティに書き込もうとしたりすると、 致命的なエラーにならず、 Error 例外をスローするようになりました。

Reflection 拡張モジュールでは、 リフレクションオブジェクトを取得できなかったり、 オブジェクトのプロパティを取得できなかったりすると、 致命的なエラーにならず、 Error 例外をスローするようになりました。

Session 拡張モジュールでは、 セッションIDに文字列を返さないカスタムのセッションハンドラは、 セッションIDを生成しなければならない関数を呼んだ際に 致命的なエラーにならず、 Error 例外をスローするようになりました。

SimpleXML 拡張モジュールでは、 名前が付いていない、または 重複した属性を作ろうとすると、 致命的なエラーにならず、 Error 例外をスローするようになりました。

SPL 拡張モジュールでは、 SplDirectory オブジェクトを clone しようとすると、 致命的なエラーにならず、 Error 例外をスローするようになりました。 同じように、オブジェクトを繰り返している時に ArrayIterator::append() を呼び出すと、 Error 例外をスローするようになりました。

standard 拡張モジュールでは、 assert()関数 の 最初のパラメーターに string 型の引数が与えられた場合、 かつ PHP のコードが不正だった場合に キャッチ可能な致命的なエラーではなく、 ParseError 例外をスローするようになりました。 同じように、 クラススコープの外側から forward_static_call() を呼び出すと、 Error 例外をスローするようになりました。

Tidy 拡張モジュールでは、 tidyNode を手動で作ろうとすると、 致命的なエラーにならず、 Error 例外をスローするようになりました。

WDDX 拡張モジュールでは、 シリアライズする時に循環参照が存在すると、 致命的なエラーにならず、 Error 例外をスローするようになりました。

XML-RPC 拡張モジュールでは、 シリアライズする時に循環参照が存在すると、 致命的なエラーにならず、 Error 例外をスローするようになりました。

Zip 拡張モジュールでは、 glob サポートが利用できない場合、 ZipArchive::addGlob() メソッドは 致命的なエラーにならず、 Error 例外をスローするようになりました。

字句的に束縛される変数は、名前を再利用できない

use 経由で クロージャ に束縛された変数名には、スーパーグローバル や $this またはあらゆるパラメータ と同じ名前が使えなくなりました。 たとえば、次のような関数定義はすべて致命的なエラーが発生します。

<?php
$f = function () use ($_SERVER) {};
$f = function () use ($this) {};
$f = function ($param) use ($param) {};

long2ip() のパラメータタイプの変更

long2ip() 関数は、 引数に string ではなく int を期待するようになりました。

JSON のエンコードとデコード

serialize_precision ini 設定が、 float 型の値をエンコードするときに、 シリアル化の精度を制御するようになりました。

空のキーをデコードすると、 プロパティ名が _empty_ ではなく、空のプロパティ名になります。

<?php
var_dump(json_decode(json_encode(['' => 1])));

上の例の出力は、 たとえば以下のようになります。

object(stdClass)#1 (1) {
  [""]=>
  int(1)
}

json_encode() 関数に JSON_UNESCAPED_UNICODE フラグを渡すと、 U+2028 および U+2029 がエスケープされるようになりました。

mb_ereg() および mb_eregi() 関数の引数のセマンティクスの変更

mb_ereg() 関数 と mb_eregi() 関数 の第3引数 (regs) は、 マッチするものがなかった場合、空の配列が設定されるようになりました。 これより前のバージョンでは、このパラメータは変更されませんでした。

sslv2 ストリームのサポートの削除

sslv2 ストリーム が OpenSSL から削除されました。

戻り値の型が決まっている関数で "return;" と書いてもコンパイルエラーになる

戻り値の型を宣言している関数内で、引数がないreturn文を使うと、 (戻り値の型を void と宣言していない場合) E_COMPILE_ERROR が発生するようになりました。 これは、そのreturn文に到達しない場合であっても同じです。

User Contributed Notes

david at artefactual dot com 04-Apr-2019 05:29
Regarding the ArgumentCountError, PHP 7.1+ does still support user functions with a variable number of arguments, using the "func(...$args) {}" syntax, see: https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
mikem at gmail dot com 21-Nov-2017 12:09
ArgumentCountError - this modification is the main reason to avoid this version on older projects.
kees at twekaers dot net 21-Mar-2017 11:49
The backwards incompatible change 'The empty index operator is not supported for strings anymore' has a lot more implications than just a fatal error on the following code

<?php
$a = "";
$a[] = "hello world";
var_dump($a);
?>

This will give a fatal error in 7.1 but will work as expected in 7.0 or below and give you: (no notice, no warning)

array(1) {
  [0]=>
  string(11) "hello world"
}

However, the following is also changed:

<?php
$a = "";
$a[0] = "hello world";
var_dump($a);
// 7.1: string(1) "h"
// pre-7.1: array(1) {  [0]=>  string(11) "hello world" }

$a = "";
$a[5] = "hello world";
var_dump($a);
// 7.1: string(6) "     h"
// pre-7.1: array(1) {  [0]=>  string(11) "hello world" }

?>
m dot r dot sopacua at gmail dot com 30-Dec-2016 03:49
"OMFG! Why was session.hash_function removed?!? Dude!"

https://wiki.php.net/rfc/session-id-without-hashing

There. Saved ya a search.
love at sickpeople dot se 24-Nov-2016 07:59
For anyone migrating from 5.x to 7.1:

About "Array ordering when elements are automatically created during by reference assignments has changed" on this page

(http://php.net/manual/en/migration71.incompatible.php#migration71.incompatible.array-order)

The behaviour of 7.1 is THE SAME as of PHP 5. It is only 7.0 that differs.

See https://3v4l.org/frbUc

<?php

$array = [];
$array["a"] =& $array["b"];
$array["b"] = 1;
var_dump($array);


PHP 7.1.x で推奨されなくなる機能

ext/mcrypt

mcrypt 拡張モジュールは十年近くにわたって放置されており、極めて使いづらいものです。 そこで、この拡張モジュールを非推奨にしました。かわりに OpenSSL を使いましょう。 mcryptは PHP 7.2 でコアから削除されて、PECL に移る予定です。

mb_ereg_replace() と mb_eregi_replace() の eval オプション

mb_ereg_replace() と mb_eregi_replace() で、 パターン修飾子 e が非推奨となりました。

User Contributed Notes

There are no user contributed notes for this page.


変更された関数

PHP コア

  • getopt() に、オプションの第三引数が追加されました。 これは参照渡しの引数で、処理対象の引数リストの次の要素のインデックスが格納されます。
  • getenv() の引数が必須ではなくなりました。 省略した場合は、現在の環境変数の内容を連想配列で返します。
  • get_headers() に新たなパラメータが追加されました。 カスタムストリームコンテキストを渡すことができます。
  • output_reset_rewrite_vars() は、セッションURLリライト変数をリセットしなくなりました。
  • parse_url() がより厳格になり、RFC3986 をサポートするようになりました。
  • unpack() にオプションの第三引数が追加されました。 アンパックの開始位置を指定することができます。

ファイルシステム

  • file_get_contents() 関数は、ストリームがシーク可能な場合、 負のシークオフセットを受け入れるようになりました。
  • tempnam() がシステムの temp ディレクトリを返す場合に、notice を発行するようになりました。

JSON

  • json_encode() に新しいオプション JSON_UNESCAPED_LINE_TERMINATORS が追加されました。 JSON_UNESCAPED_UNICODE を指定している場合に、 U+2028 と U+2029 のエスケープを無効にします。

マルチバイト文字列

  • mb_ereg() が無効なバイト列を拒否するようになりました。
  • mb_ereg_replace() が無効なバイト列を拒否するようになりました。

PDO

  • PostgreSQL 用の PDO::lastInsertId() は、 現在のセッション (postgres コネクション) で nextval がまだ呼ばれていない場合にエラーが発生するようになりました。

PostgreSQL

  • pg_last_notice() で、オプションのパラメータを使って操作を指定できるようになりました。 新しい定数 PGSQL_NOTICE_LAST、 PGSQL_NOTICE_ALL、 PGSQL_NOTICE_CLEAR のいずれかを指定します。
  • pg_fetch_all() にオプションの第二引数が追加されました。戻される結果の型を指定できます (pg_fetch_array() の第三引数と同じです)。
  • pg_select() にオプションの第四引数が追加されました。戻される結果の型を指定できます (pg_fetch_array() の第三引数と同じです)。

Session

  • session_start() 関数は、 セッションを開始できなかった場合、false を返し、 $_SESSION を初期化することはなくなりました。

User Contributed Notes

There are no user contributed notes for this page.


その他の変更

無効な文字列による算術演算の通知

数値形式ではない文字列を使って、数値を期待する演算 (+ - * / ** % << >> | & ^ や、これらを用いた代入演算) を行おうとしたときに、 E_WARNING あるいは E_NOTICE レベルのエラーが発生するようになりました。 E_NOTICE が発生するのは、文字列が数値で始まっていながら非数値で終わる場合で、 E_WARNING が発生するのは文字列中に数値が含まれない場合です。

<?php
'1b' + 'something';

上の例の出力は以下となります。

Notice: A non well formed numeric value encountered in %s on line %d
Warning: A non-numeric value encountered in %s on line %d

八進表記のオーバーフロー時の警告

これまでのバージョンでは、八進表記のエスケープシーケンスがオーバーフローを起こしても、 警告は発生しませんでした。 PHP 7.1 以降では、この場合に E_WARNING が発生するようになりました (オーバーフローを起こした場合の振る舞いは、これまでのバージョンと変わりません)。

<?php
var_dump("\500");

上の例の出力は以下となります。

Warning: Octal escape sequence overflow \500 is greater than \377 in %s on line %d
string(1) "@"

$this の矛盾の修正

PHP において $this は特別な変数という扱いですが、 これが他の場所で変数名として使われていたり再代入されていたりしないことを、 きちんとチェックできていませんでした。 これを修正してきちんとチェックするようになったので、 $this をユーザー定義の変数名として使ったり他の値を再代入したり、 グローバル変数にしたりすることはできなくなりました。

ハッシュなしでのセッション ID の生成

セッション ID の生成時にハッシュされないようになりました。 この変更に伴い、以下の INI 項目が削除されました。

  • session.entropy_file
  • session.entropy_length
  • session.hash_function
  • session.hash_bits_per_character

また、以下のふたつの INI 項目が新たに追加されました。

  • session.sid_length - セッション ID の長さを指定します。デフォルトは 32 文字で、 これは過去のバージョンとの互換性を考慮したものです。
  • session.sid_bits_per_character - 一文字あたりに格納するビット数を指定します (つまり、これを増やすとセッション ID に使える文字の範囲が拡大します)。 デフォルトは 4 で、これは過去のバージョンとの互換性を考慮したものです。

INI ファイルの扱いに関する変更

precision

この値を -1 に設定すると、dtoa モードの 0 が使われます。 デフォルト値は 14 のままです。

serialize_precision

この値を -1 に設定すると、dtoa モードの 0 が使われます。 デフォルト値は -1 になりました。

gd.jpeg_ignore_warning

この php.ini 設定のデフォルト値は 1 になりました。 よって、デフォルトでは libjpeg の警告は無視されます。

opcache.enable_cli

この php.ini 設定のデフォルト値は、PHP 7.1.2 で 1 (有効) に変更され、 PHP 7.1.7 で 0 (無効) に戻されました。

セッションIDの生成は、CSPRNGのみから行われる

セッションID は、CSPRNG のみから生成されるようになりました。

null が許可されていた場合の TypeError メッセージがよりわかりやすく

arg_info 型をチェックする際の TypeError 例外 が、よりわかりやすいエラーメッセージを出力するようになりました。 引数の型や戻り値の型が null を許可していた場合 (デフォルト値が null だった場合や、nullable 型だった場合)、 エラーメッセージはそのことを "must be ... or null" や "must ... or be null." といった形で示すようになりました。

User Contributed Notes

Ta7To7 27-Feb-2018 05:47
Note that using Incrementing/Decrementing operators on string is legal
<?php
$str = "";
echo ++$str; // output: 1
?>


Windows のサポート

長いpath と UTF-8のpath のサポート

Webアプリケーションが UTF-8 に対応しているなら、追加の作業は必要ありません。 UTF-8 でないpathへの I/O に依存したアプリケーションについては、 明示的に INIディレクティブを設定する必要があります。 エンコーディングのINI設定のチェックは、コアの順番に依存します:

  • internal_encoding
  • default_charset
  • zend.multibyte

コードページを扱う関数がいくつか追加されました:

  • sapi_windows_cp_set() は、デフォルトのコードページを設定します
  • sapi_windows_cp_get() は、現在のコードページを取得します
  • sapi_windows_cp_is_utf8()
  • sapi_windows_cp_conv() は、iconv() 互換のシグネチャで、コードページ間の変換を行います。

これらの関数はスレッドセーフです。

コンソール出力のコードページは、 PHP の内部で使用されるエンコーディングに基づいて調整されます。 具体的な システム OEM のコードページによっては、 目に見える出力は正しいかもしれませんし、正しくないかもしれません。 たとえば、OEM コードページ 437 のシステム上での デフォルトの cmd.exe は、1251, 1252, 1253 や、 他のいくつかのコードページを出力しますが、 これらは UTF-8 で表示すれば正しく表示できます。 同じシステム上で、20932 のようなコードページ上の文字は、 正しく表示できません。 これは、コードページにまつわる特定のシステムのルールや、 フォントの互換性、そして特定のコンソールプログラムが関係しています。 PHP は、php.ini から読み取ったエンコーディングのルールに沿って、 コンソールのコードページを自動的に設定します。 cmd.exe 以外のコンソールを使う場合、 ケースによってはより良い体験が得られるかもしれません。

それでもなお知っておくべきなのは、 リクエストの処理が始まったあとの実行時にコードページを変更すると、 CLI 上では予測できない副作用をもたらす可能性があることです。 好ましいやり方は、Unicode をサポートしていない PHP CLI がコンソールのエミュレータとして使われている場合、必須ではないものの、 php.ini を使うことでコンソールのコードページを変更することを避けることです。 これを達成する最良のやり方は、デフォルト、 または内部エンコーディングの設定を ANSI コードページにすることです。 別のやり方として、INI ディレクティブの output_encoding と input_encoding を必要なコードページに設定することがあります。しかしこの場合、 内部のコードページと I/O のコードページが異なることが原因で、 文字化けを引き起こしがちです。レアケースではありますが、 PHP が偶然綺麗にクラッシュしたとしても、 オリジナルのコンソールのコードページがリストアされない可能性もあります。 この場合、手動でリストアする方法として、chcp コマンドが使えます。

DBCS システムについては、特別に知っておくべきことがあります。 実行時に ini_set() を使ってコードページを変更すると、 表示上の問題を引き起こす可能性があることです。 DBCS でないシステムとの違いは、 コンソールのセルふたつ分を表示に要求する拡張文字を表示する場合です。 場合によっては、フォントのグリフセットへの文字のマッピングが発生するのに、 実際のフォントは変わらないといったことが起こります。 これは DBCS システムの性質によって起こります。 この手の表示の問題を避けるもっとも簡単な方法は、 コードページの変更に ini_set() を使わないことです。

ストリームで UTF-8 がサポートされたことによって、 PHP スクリプトは ASCII や ANSI のファイル名にもはや縛られなくなりました。 これは CLI の枠を越えたサポートです。他の SAPI については、 対応するサーバーのドキュメントを見ると有益でしょう。

長いパス名のサポートは透過的です。 260バイトより長いパス名には、 自動的に \\?\ という prefix が付きます。 パス名の最大の長さは、2048バイトに制限されています。 パスセグメントの長さの制限 (basepath の長さ) はまだ続いていることも知っておいてください。

移植性を最大にするために、ファイル名や I/O 、 そして他の関連するトピックを UTF-8 で扱うことを強くお勧めします。 それに加えて、コンソールアプリケーションについては、 TrueType フォントを使うことが好ましいです。 また、コードページの変更に ini_set() を使うことは推奨されません。

readline

readline 拡張モジュール が » WinEditLine ライブラリ を通じてサポートされました。 これにより、インタラクティブな CLI シェルもサポートされました (php.exe -a)。

PHP_FCGI_CHILDREN

環境変数 PHP_FCGI_CHILDREN が尊重されるようになりました。 この環境変数が定義されていた場合、最初の php-cgi.exe プロセスが指定された数の子プロセスを実行します。 これらは同じTCPソケットを共有します。

ftok()

ftok() 関数のサポートが追加されました。

User Contributed Notes

There are no user contributed notes for this page.


PHP 5.6.x から PHP 7.0.x への移行

目次

  • 下位互換性のない変更点
  • 新機能
  • PHP 7.0.x で推奨されなくなる機能
  • 変更された関数
  • 新しい関数
  • 新しいクラスおよびインターフェイス
  • 新しいグローバル定数
  • SAPI モジュールの変更
  • 削除された拡張モジュールおよび SAPI
  • その他の変更

PHP 7.0 は新しいメジャーバージョンではありますが、 過去のバージョンからの移行をできるだけスムーズに行えるよう心がけています。 このリリースで主に注力したのは、これまでのバージョンで廃止予定とされていた機能の削除や、 言語としての一貫性の向上です。

互換性がない変更 が多少あり、また、考慮すべき 新機能 があります。よって、 実運用環境の PHP をこのバージョンにあげる前に、あらゆるコードをテストすべきです。

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

エラーや例外の取り扱いの変更

fatal error や recoverable fatal error の多くが、PHP 7 では例外に変換されるようになりました。 これらの例外は Error クラスを継承したもので、 このクラスは Throwable インターフェイスを実装しています。 この新しいインターフェイスを、すべての例外が実装しています。

エラーではなく例外がスローされるようになるということは、自作のエラーハンドラは呼び出されなくなるということです (Error 例外をキャッチしなかった場合は、fatal エラーが発生します)。

PHP 7 におけるエラーハンドリングの詳細な説明は PHP 7 のエラー を参照ください。 この移行ガイドでは、下位互換性のない変更点を列挙するだけにとどめます。

set_exception_handler() が常に Exception オブジェクトを受け取るとは限らない

set_exception_handler() で登録した例外ハンドラの実装で Exception 型を宣言している場合は、 Error オブジェクトがスローされると fatal エラーが発生します。

PHP 5 と PHP 7 の両方で動くハンドラを書く場合は、ハンドラで型宣言をしてはいけません。 PHP 5 で動いていたコードを移行する際に、そのコードが PHP 7 でだけ動けばいいのなら、 Exception 型で宣言している部分を単純に Throwable 型に置換するだけでかまいません。

<?php
// PHP 5 でのこの実装は、そのままでは PHP 7 では動きません
function handler(Exception $e) { ... }
set_exception_handler('handler');

// PHP 5 と 7 の両方で動きます
function handler($e) { ... }

// PHP 7 でだけ動きます
function handler(Throwable $e) { ... }
?>

内部のコンストラクタは、失敗したときに常に例外をスローする

これまでは、コンストラクタの処理が失敗した際に、 null を返したり使用不能なオブジェクトを返したりする内部クラスがありました。 PHP 7 では、同様の場合に Exception をスローするようになりました。 ユーザー定義のクラスでは以前からそうすべきだとされていたことです。

パースエラーが発生すると ParseError をスローする

パースエラーが発生すると ParseError オブジェクトをスローするようになりました。 eval() のエラーハンドリングをする際には、catch ブロックを用意してこのエラーを処理しなければいけません。

E_STRICT 通知の深刻度の変更

すべての E_STRICT 通知が、改めて別のレベルに移動しました。 定数 E_STRICT はそのまま残っているので、 error_reporting(E_ALL|E_STRICT) のような呼び出しがエラーになることはありません。

E_STRICT 通知の深刻度の変更
状況 | 新しいレベル / 挙動
Indexing by a resource | E_NOTICE
Abstract static methods | 通知は削除され、エラーにはならない
"Redefining" a constructor | 通知は削除され、エラーにはならない
Signature mismatch during inheritance | E_WARNING
Same (compatible) property in two used traits | 通知は削除され、エラーにはならない
Accessing static property non-statically | E_NOTICE
Only variables should be assigned by reference | E_NOTICE
Only variables should be passed by reference | E_NOTICE
Calling non-static methods statically | E_DEPRECATED

変数の取り扱いの変更

PHP 7 では、抽象構文木を使ってソースファイルをパースするようになりました。 そのおかげで言語としてのさまざまな改良ができるようになりました。 これまでの PHP が使っていたパーサーでは不可能だったこともできるようになったからです。 しかしその結果、一貫性を保つために一部の機能を削除することになりました。 これは、下位互換性を損ねるものです。 このセクションでは、それらについて説明します。

変数やプロパティ、メソッドへの間接的なアクセスの扱いの変更

変数やプロパティそしてメソッドへの間接的なアクセスを、厳密に左から右の順で評価するようになりました。 以前のバージョンでは、場合によって評価の順が逆転することもありました。 評価順の変更を、以下の表にまとめます。

間接的なアクセスの評価順の変更
式 | PHP 5 での解釈 | PHP 7 での解釈
$$foo['bar']['baz'] | ${$foo['bar']['baz']} | ($$foo)['bar']['baz']
$foo->$bar['baz'] | $foo->{$bar['baz']} | ($foo->$bar)['baz']
$foo->$bar['baz']() | $foo->{$bar['baz']}() | ($foo->$bar)['baz']()
Foo::$bar['baz']() | Foo::{$bar['baz']}() | (Foo::$bar)['baz']()

今までのバージョンにおける右から左の評価を想定しているコードは、 波括弧を使って評価順を明示するように (表の中央列のように) 書き直す必要があります。 そうすれば、PHP 7.x との互換性を保ちつつ、PHP 5.x との下位互換性も維持できます。

これは、global キーワードにも影響します。 必要であれば、波括弧構文を使えばこれまでのバージョンでの挙動を再現できます。

<?php
function f() {
// PHP 5 でしか使えません
global $$foo->bar;

// PHP 5 と PHP 7 の両方で使えます
global ${$foo->bar};
}
?>

list() の取り扱いの変更

list() での変数の代入が、逆順ではなくなる

list() における変数への代入が定義された順番どおりに行われるようになりました。 今までのように逆順にはなりません。 この変更の影響を受けるのは、list() を [] 演算子と組み合わせて使うときくらいでしょう。その例を示します。

<?php
list($a[], $a[], $a[]) = [1, 2, 3];
var_dump($a);
?>

上の例の PHP 5 での出力は、このようになります。

array(3) {
  [0]=>
  int(3)
  [1]=>
  int(2)
  [2]=>
  int(1)
}

上の例の PHP 7 での出力は、このようになります。

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

一般論として、 list() での代入がどの順で行われるかに依存するコードは書かないことを推奨します。 代入の順番は、実装の都合によって今後も変わる可能性があるからです。

空の list() の廃止

空の list() を作ることはできなくなりました。 次のようなコードは PHP 7 では使えません。

<?php
list() = $a;
list(,,) = $a;
list($x, list(), $y) = $a;
?>
list() は文字列を展開しない

list() は文字列変数を展開できなくなりました。 かわりに str_split() を使いましょう。

参照による代入で自動的に作成した配列要素の並び順の変更

参照による代入で配列の要素を自動的に作成した場合の、 要素の並び順が変更されました。 以下に例を示します。

<?php
$array = [];
$array["a"] =& $array["b"];
$array["b"] = 1;
var_dump($array);
?>

上の例の PHP 5 での出力は、このようになります。

array(2) {
  ["b"]=>
  &int(1)
  ["a"]=>
  &int(1)
}

上の例の PHP 7 での出力は、このようになります。

array(2) {
  ["a"]=>
  &int(1)
  ["b"]=>
  &int(1)
}

関数のパラメータを括弧で囲んでもその振る舞いは変わらない

PHP 5 では、関数のパラメータを冗長な括弧で囲んでおくと、 関数のパラメータを参照渡しにした場合の警告を抑止することができました。 PHP 7 では、たとえ括弧で囲んでも警告が常に発生します。

<?php
function getArray() {
return [1, 2, 3];
}

function squareArray(array &$a) {
foreach ($a as &$v) {
$v **= 2;
}
}

// PHP 7 では警告が発生します
squareArray((getArray()));
?>

上の例の出力は以下となります。

Notice: Only variables should be passed by reference in /tmp/test.php on line 13

foreach の変更

foreach の振る舞いが多少変わりました。 主に、内部の配列ポインタの扱いや、反復処理中の配列の変更に関する部分です。

foreach は内部の配列ポインタを変更しない

PHP 7 より前のバージョンでは、foreach で配列を反復処理する際に、内部の配列ポインタを変更していました。 PHP 7 ではそのようにはならず、以下の例のようになります。

<?php
$array = [0, 1, 2];
foreach ($array as &$val) {
var_dump(current($array));
}
?>

上の例の PHP 5 での出力は、このようになります。

int(1)
int(2)
bool(false)

上の例の PHP 7 での出力は、このようになります。

int(0)
int(0)
int(0)

値渡しの foreach は、配列のコピーを使って操作を進める

デフォルトの値渡しモードの場合の foreach は、 配列そのものではなくそのコピーを使って反復処理を進めるようになりました。 つまり、処理中に配列を書き換えた場合でも、反復処理の対象となる値には影響が及びません。

参照渡しの foreach の、反復処理の振る舞いを改良

参照渡しでの foreach における、 処理中の配列への変更の追跡が改良されました。 たとえば、処理中の配列に新たな要素を追加した場合に、 追加した新たな要素も反復処理の対象に含まれるようになります。

<?php
$array = [0];
foreach ($array as &$val) {
var_dump($val);
$array[1] = 1;
}
?>

上の例の PHP 5 での出力は、このようになります。

int(0)

上の例の PHP 7 での出力は、このようになります。

int(0)
int(1)

Traversable でないオブジェクトの反復処理

Traversable ではないオブジェクトの反復処理の挙動が、 配列を参照渡しで反復処理したときと同じようになりました。 反復処理中の配列を変更したときの挙動の改良 も適用され、処理中のオブジェクトにプロパティを追加したり削除したりした場合に、 それが反復処理に反映されます。

int の取り扱いの変更

無効な形式の八進リテラル

以前のバージョンでは、無効な数値が八進リテラルに含まれている場合は、 単純にそれを無視していました (たとえば 0128 は 012 として扱っていました)。 PHP 7 では、このような場合にパースエラーが発生します。

負のビットシフト

ビットシフトに負の数を指定すると、 ArithmeticError をスローするようになりました。

<?php
var_dump(1 >> -1);
?>

上の例の PHP 5 での出力は、このようになります。

int(0)

上の例の PHP 7 での出力は、このようになります。

Fatal error: Uncaught ArithmeticError: Bit shift by negative number in /tmp/test.php:2
Stack trace:
#0 {main}
  thrown in /tmp/test.php on line 2

範囲外のビットシフト

int のビット幅を超えるビットシフト (左右問わず) を行うと、結果は常に 0 となります。 以前のバージョンでは、このときの振る舞いはアーキテクチャに依存していました。

ゼロ除算の挙動の変更

以前のバージョンでは、除算演算子 (/) や剰余演算子 (%) の除数に 0 を使うと、E_WARNING が発生して結果は false となっていました。 PHP 7 では、除算演算子の返す結果は float で、 +INF、-INF あるいは NAN のいずれかとなります。 これは、IEEE 754 で指定された挙動です。 剰余演算子については E_WARNING が発生しなくなり、 DivisionByZeroError 例外をスローするようになりました。

<?php
var_dump(3/0);
var_dump(0/0);
var_dump(0%0);
?>

上の例の PHP 5 での出力は、このようになります。

Warning: Division by zero in %s on line %d
bool(false)

Warning: Division by zero in %s on line %d
bool(false)

Warning: Division by zero in %s on line %d
bool(false)

上の例の PHP 7 での出力は、このようになります。

Warning: Division by zero in %s on line %d
float(INF)

Warning: Division by zero in %s on line %d
float(NAN)

PHP Fatal error:  Uncaught DivisionByZeroError: Modulo by zero in %s line %d

文字列の取り扱いの変更

十六進数値形式の文字列は数値とはみなさない

十六進形式の数値を含む文字列は数値とはみなされなくなりました。 以下に例を示します。

<?php
var_dump("0x123" == "291");
var_dump(is_numeric("0x123"));
var_dump("0xe" + "0x1");
var_dump(substr("foo", "0x1"));
?>

上の例の PHP 5 での出力は、このようになります。

bool(true)
bool(true)
int(15)
string(2) "oo"

上の例の PHP 7 での出力は、このようになります。

bool(false)
bool(false)
int(0)

Notice: A non well formed numeric value encountered in /tmp/test.php on line 5
string(3) "foo"

filter_var() を使えば、 文字列が十六進数値形式であるかどうかをチェックでき、 その文字列を int に変換することもできます。

<?php
$str = "0xffff";
$int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
if (false === $int) {
throw new Exception("Invalid integer!");
}
var_dump($int); // int(65535)
?>

\u{ がエラーの原因になることがある

Unicode コードポイントのエスケープ構文 が導入されたことにより、\u{ のあとに無効なシーケンスが続く文字列が fatal error となる可能性があります。 これを回避するには、先頭のバックスラッシュをエスケープする必要があります。

削除された関数

call_user_method() および call_user_method_array()

これらの関数は PHP 4.1.0 で非推奨となり、 call_user_func() および call_user_func_array() を使うことが推奨されていました。 あるいは 可変関数 や ... 演算子を使うことを検討しましょう。

ereg* 系のすべての関数

ereg 関数はすべて削除されました。かわりに PCRE を使うことを推奨します。

mcrypt のエイリアス

非推奨の mcrypt_generic_end() 関数が削除されました。 かわりに mcrypt_generic_deinit() を使いましょう。

さらに、非推奨の mcrypt_ecb()、
mcrypt_cbc()、mcrypt_cfb()、
mcrypt_ofb() も削除されました。
mcrypt_decrypt() に、適切な
MCRYPT_MODE_* 定数を組み合わせて使いましょう。

すべての ext/mysql 関数

ext/mysql のすべての関数が削除されました。 その他の MySQL API の選択肢については MySQL API の選択 を参照ください。

すべての ext/mssql 関数

ext/mssql のすべての関数が削除されました。 代替となる選択肢については、以下を参照ください。

  • PDO_SQLSRV
  • PDO_ODBC
  • SQLSRV
  • Unified ODBC API

intl のエイリアス

非推奨のエイリアス datefmt_set_timezone_id() および
IntlDateFormatter::setTimeZoneID() が削除されました。
かわりに datefmt_set_timezone() および
IntlDateFormatter::setTimeZone() を使いましょう。

set_magic_quotes_runtime()

set_magic_quotes_runtime() およびそのエイリアスである magic_quotes_runtime() が削除されました。 これらは PHP 5.3.0 で非推奨となり、 PHP 5.4.0 でマジッククォートが廃止された時点で事実上無意味になっていました。

set_socket_blocking()

非推奨のエイリアス set_socket_blocking() が削除されました。 かわりに stream_set_blocking() を使いましょう。

PHP-FPM における dl()

dl() が PHP-FPM で使えなくなりました。 CLI や embed SAPI では今でも使えます。

GD Type1 関数群

GD 拡張モジュールから、PostScript Type1 フォントのサポートが削除されました。 その結果として、以下の関数群が削除されました。

  • imagepsbbox()
  • imagepsencodefont()
  • imagepsextendfont()
  • imagepsfreefont()
  • imagepsloadfont()
  • imagepsslantfont()
  • imagepstext()

かわりに、TrueType フォントやそれに関連する関数群を使いましょう。

削除された INI 項目

削除された機能

以下の INI 項目は、関連する機能の削除に伴って削除されました。

  • always_populate_raw_post_data
  • asp_tags

xsl.security_prefs

xsl.security_prefs が削除されました。 かわりに XsltProcessor::setSecurityPrefs() メソッドを用いて、プロセッサ単位のセキュリティ設定を制御しましょう。

下位互換性のないその他の変更

新しいオブジェクトを参照渡しで代入できない

new 文の結果を参照渡しで変数に代入することができなくなりました。 by reference:

<?php
class C {}
$c =& new C;
?>

上の例の PHP 5 での出力は、このようになります。

Deprecated: Assigning the return value of new by reference is deprecated in /tmp/test.php on line 3

上の例の PHP 7 での出力は、このようになります。

Parse error: syntax error, unexpected 'new' (T_NEW) in /tmp/test.php on line 3

無効なクラス名、インターフェイス名、トレイト名

以下の名前は、クラスやインターフェイスそしてトレイトの名前としては使えなくなりました。

  • bool
  • int
  • float
  • string
  • null
  • true
  • false

さらに、以下に挙げる名前も使うべきではありません。 PHP 7.0 の時点ではまだエラーにはなりませんが、 これらの名前は将来のバージョン用に予約されており、いずれ使えなくなると考えるべきです。

  • resource
  • object
  • mixed
  • numeric

ASP タグと script タグの廃止

ASP 形式のタグや script タグを使って PHP コードを囲むことはできなくなりました。 この影響を受けるのは、以下のタグです。

削除された ASP タグおよび script タグ
開始タグ | 終了タグ
<% | %>
<%= | %>
<script language="php"> | </script>

非互換のコンテキストからの呼び出しの削除

既に PHP 5.6 で非推奨になっていますが、 static ではないメソッドに対して非互換のコンテキストで static 呼び出しを行うと、 呼ばれた側のメソッドが未定義の $this 変数を持つことになって警告が発生します。

<?php
class A {
public function test() { var_dump($this); }
}

// クラスAを継承して「いない」ことに注目
class B {
public function callNonStaticMethodOfA() { A::test(); }
}

(new B)->callNonStaticMethodOfA();
?>

上の例の PHP 5.6 での出力は、このようになります。

Deprecated: Non-static method A::test() should not be called statically, assuming $this from incompatible context in /tmp/test.php on line 8
object(B)#1 (0) {
}

上の例の PHP 7 での出力は、このようになります。

Deprecated: Non-static method A::test() should not be called statically in /tmp/test.php on line 8

Notice: Undefined variable: this in /tmp/test.php on line 3
NULL

yield が右代入演算子に

yield で括弧が必須ではなくなり、右代入演算子に変わりました。 優先順位は print と => の間になります。 これによって、以下のように振る舞いが変わります。

<?php
echo yield -1;
// 以前はこのように解釈されました
echo (yield) - 1;
// PHP 7 ではこのように解釈されます
echo yield (-1);

yield $foo or die;
// 以前はこのように解釈されました
yield ($foo or die);
// PHP 7 ではこのように解釈されます
(yield $foo) or die;
?>

括弧を使えば、曖昧さを排除できます。

同じ名前のパラメータをひとつの関数に複数定義できない

関数内の複数のパラメータを同じ名前にすることができなくなりました。 たとえば次のようなメソッドは E_COMPILE_ERROR となります。

<?php
function foo($a, $b, $unused, $unused) {
//
}
?>

引数を調べる関数は、パラメータの その時点での 値を報告する

func_get_arg(), func_get_args(), debug_backtrace() といった関数や例外時のバックトレースで得られる値が、 パラメータとして渡されたときの値ではなくなりました。 その時点での値が得られるようになります (つまり、パラメータとして渡された値から変更されている可能性があります)。

<?php
function foo($x) {
$x++;
var_dump(func_get_arg(0));
}
foo(1);?>

上の例の PHP 5 での出力は、このようになります。

1

上の例の PHP 7 での出力は、このようになります。

2

Switch 文に複数の default ブロックを書けない

ひとつの switch 文の中に、複数の default ブロックを定義することができなくなりました。 たとえば次の switch 文は E_COMPILE_ERROR になります。

<?php
switch (1) {
default:
break;
default:
break;
}
?>

$HTTP_RAW_POST_DATA の削除

$HTTP_RAW_POST_DATA が使えなくなりました。かわりに php://input ストリームを使いましょう。

INI ファイルにおける # 形式のコメントの削除

INI ファイルにおいて # で始まる行をコメントとする機能が削除されました。 かわりに ; を使いましょう。 この変更は、php.ini だけではなく、 parse_ini_file() や parse_ini_string() が扱うファイルにもあてはまります。

JSON 拡張モジュールが JSOND に置き換わる

JSON 拡張モジュールが JSOND に置き換わりました。 下位互換性を損ねるちょっとした変更が二点あります。 まず、数値の最後を小数点で終えることができなくなりました (つまり、 34. とすることはできず、34.0 あるいは 34 としなければいけません)。 次に、科学記法を使う際に、指数記号 e を小数点の直後に置くことができなくなりました (つまり、3.e3 とすることはできず、 3.0e3 あるいは 3e3 としなければいけません)。 最後に、空の文字列は妥当な JSON だとみなされなくなりました。

内部関数がオーバーフローしたときの挙動

これまでのバージョンでは、浮動小数点数値が大きすぎて整数として表せない場合に、 float から integer に変換した結果を黙って切り詰めていました。 PHP 7 では E_WARNING が発生し、null を返します。

カスタムセッションハンドラの戻り値の修正

カスタムセッションハンドラとして実装した関数が false あるいは -1 を返すとき、fatal error が発生します。 この関数が boolean 値か -1, あるいは 0 以外を返す場合は、その関数は失敗して E_WARNING が発生します。

同値な要素の並び順

内部的なソートアルゴリズムが改良されたことに伴って、 比較したときに等しいとみなされる要素の並び順が以前とは変わるかもしれません。

注意:

同値な要素の並び順に依存するコードは書かないようにしましょう。 その並び順がいつまでも同じであるとは限りません。

break 文と continue 文の位置の間違い

ループまたは switch 制御構造の外の break および continue 文は、 以前のように実行時ではなくコンパイル時に検出され、 E_COMPILE_ERROR を起こします。

Mhash はもう拡張モジュールではありません

Mhash 拡張は Hash 拡張に完全に統合されました。
したがって、extension_loaded() で Mhash サポートを検出できなくなりました。
代わりに function_exists() を使用してください。
さらに、Mhash は get_loaded_extensions() および関連機能により報告されなくなりました。

declare(ticks)

declare(ticks) ディレクティブは、異なるコンパイル単位にリークしなくなりました。

User Contributed Notes

There are no user contributed notes for this page.


新機能

スカラー型宣言

スカラー 型宣言 には二つの方式があります。デフォルトの自動変換(coercive) モードと、 厳密に判断する strict モードです。 パラメータとして、 文字列 (string)、整数 (int)、浮動小数点数 (float)、boolean (bool) といった型をいずれかの方式で強制できるようになりました。 これらは、PHP 5 で導入された型宣言 (クラス名やインターフェイス、配列そして callable) を強化するものです。

<?php
// デフォルトのモード
function sumOfInts(int ...$ints)
{
return array_sum($ints);
}

var_dump(sumOfInts(2, '3', 4.1));

上の例の出力は以下となります。

int(9)

strict モードを有効にするには、ファイルの先頭に declare ディレクティブを置く必要があります。 つまり、スカラー型を厳密に扱うかどうかは、ファイル単位で定めるということです。 このディレクティブは、パラメータの型宣言だけでなく、関数の戻り値の型 (戻り値の型宣言を参照ください) や PHP の標準関数、そして拡張モジュールの関数にも影響を及ぼします。

スカラー型宣言に関するドキュメントやサンプルについては、 型宣言 を参照ください。

戻り値の型宣言

PHP 7 では、 戻り値の型宣言 もできるようになりました。 引数の型宣言 と同様に、戻り値の型宣言では、関数が戻す値がどの型になるかを宣言します。 戻り値の型宣言で使える 型 は、引数の型宣言で使えるものと同じです。

<?php

function arraysSum(array ...$arrays): array
{
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

上の例の出力は以下となります。

Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)

詳細なドキュメントやサンプルについては、 戻り値の型宣言. を参照ください。

Null 合体演算子

null 合体演算子 (??) がシンタックスシュガーとして追加されました。 三項演算子と isset() を組み合わせる よくありがちなパターンを、より簡単に書くためのものです。 この演算子は、もし第一オペランドが非 null の値であればそれを返し、 そうでない場合は第二オペランドを返します。

<?php
// $_GET['user'] を取得します。もし存在しない場合は
// 'nobody' を用います。
$username = $_GET['user'] ?? 'nobody';
// 上のコードは、次のコードと同じ意味です。
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// 合体演算子を連結することもできます。次のように書くと、
// $_GET['user']、$_POST['user'] そして 'nobody'
// の順に調べて、非 &null; が定義されている最初の値を返します。
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

宇宙船演算子

宇宙船演算子は、二つの式を比較するために使うものです。 $a が $b より大きい場合は 1、 $a と $b が等しい場合は 0、 $a が $b より小さい場合は -1 をそれぞれ返します。 比較の際には、 PHP 型の比較表 のルールを用います。

<?php
// 整数値
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// 浮動小数点数値
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// 文字列
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>

define() を用いた配列定数の定義

define() で配列の定数を定義できるようになりました。 PHP 5.6 までのバージョンでは、配列の定数は const でしか定義できませんでした。

<?php
define('ANIMALS', [
'dog',
'cat',
'bird'
]);

echo ANIMALS[1]; // "cat" と出力します
?>

無名クラス

無名クラスをサポートするようになりました。new class を使って利用します。 その場限りの使い捨てのオブジェクトなどで、完全なクラス定義のかわりとして使えます。

<?php
interface Logger {
public function log(string $msg);
}

class Application {
private $logger;

public function getLogger(): Logger {
return $this->logger;
}

public function setLogger(Logger $logger) {
$this->logger = $logger;
}
}

$app = new Application;
$app->setLogger(new class implements Logger {
public function log(string $msg) {
echo $msg;
}
});

var_dump($app->getLogger());
?>

上の例の出力は以下となります。

object(class@anonymous)#2 (0) {
}

詳細なドキュメントは 無名クラス を参照ください。

Unicode コードポイントエスケープ構文

Unicode のコードポイントを十六進形式で受け取って、 それを UTF-8 で (ダブルクォートで囲まれた文字列あるいはヒアドキュメントとして) 出力します。 妥当な形式のコードポイントならあらゆるものが使えます。先頭のゼロは省略してもかまいません。

<?php

echo "\u{aa}", PHP_EOL;
echo "\u{0000aa}", PHP_EOL;

echo "\u{9999}", PHP_EOL;

echo <<<EOT
\u{01f418}
EOT;

?>

上の例の出力は以下となります。

a
a (先頭のゼロを省略せずに書いても、前の行と同じ結果になります)
香

Closure::call()

Closure::call() は、オブジェクトのスコープをクロージャに一時的に束縛して実行するための、 より高性能で簡潔な方法です。

<?php
class A {private $x = 1;}

// 以前のバージョンのコード
$getX = function() {return $this->x;};
$getXCB = $getX->bindTo(new A, 'A'); // 中間クロージャが必要
echo $getXCB();

// PHP 7 以降でのコード
$getX = function() {return $this->x;};
echo $getX->call(new A);

上の例の出力は以下となります。

1
1

unserialize() のフィルタリング

この仕組みは、信頼できないデータからオブジェクトを復元する際に、 よりセキュリティを高められるようにするために用意されたものです。 アンシリアライズ可能なクラスの一覧をホワイトリストとして定義することで、 コードインジェクション攻撃を防ぎます。

<?php

// オブジェクトはすべて、__PHP_Incomplete_Class のオブジェクトに変換します
$data = unserialize($foo, ["allowed_classes" => false]);

// MyClassとMyClass2以外のすべてのオブジェクトを、__PHP_Incomplete_Class のオブジェクトに変換します
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]]);

// デフォルト (第二引数を省略した場合) の挙動は以下のようになり、すべてのオブジェクトをそのまま復元します
$data = unserialize($foo, ["allowed_classes" => true]);

IntlChar

ICU のさらなる機能を利用するために、新しく IntlChar クラスが追加されました。このクラスには数々の static メソッドと定数が定義されており、 これらを使って Unicode の文字を操作できます。

<?php

printf('%x', IntlChar::CODEPOINT_MAX);
echo IntlChar::charName('@');
var_dump(IntlChar::ispunct('!'));

上の例の出力は以下となります。

10ffff
COMMERCIAL AT
bool(true)

このクラスを使うには、Intl 拡張モジュールをインストールしなければいけません。

Expectation

Expectations は、かつての assert() 関数を、下位互換性を保ったまま拡張したものです。 これを用いると、コストをかけずに実運用コードの中にアサーションを組み込めます。 そして、アサーションが失敗した際に自作の例外をスローできるようになります。

これまでの API も下位互換性を保つために維持されていますが、 assert() は言語構造となりました。 最初のパラメータには、単に評価対象の文字列や bool 値を指定するだけではなく、式を渡せます。

<?php
ini_set('assert.exception', 1);

class CustomError extends AssertionError {}

assert(false, new CustomError('Some error message'));
?>

上の例の出力は以下となります。

Fatal error: Uncaught CustomError: Some error message

開発環境および運用環境での設定方法などの詳細については、 言語構造 assert() のマニュアルを参照ください。

use 宣言のグループ化

複数のクラスや関数そして定数を同じ namespace からインポートする際に、 単一の use 文にまとめられるようになりました。

<?php
// 以前のバージョンのコード
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// PHP 7 以降のコード
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
?>

ジェネレータでの return

PHP 5.5 で導入されたジェネレータの機能拡張です。 ジェネレータの内部で return 文が使えるようになりました。 これを使えば、ジェネレータが最終的に返す式を指定できます (参照を返すことはできません)。 この値を取得するには、新しいメソッド Generator::getReturn() を用います。 このメソッドを使うのは、ジェネレータが値の生成を終えた後の一度だけになるでしょう。

<?php

$gen = (function() {
yield 1;
yield 2;

return 3;
})();

foreach ($gen as $val) {
echo $val, PHP_EOL;
}

echo $gen->getReturn(), PHP_EOL;

上の例の出力は以下となります。

1
2
3

ジェネレータの最終値を明示的に返せる機能は、あれば便利なものです。 ジェネレータを実行したクライアント側のコードが、 ジェネレータが最後に返す値 (何らかのコルーチンの計算結果) を特別扱いできるようになるからです。 「取得した値が最後の値かどうかをまず調べて、最後であれば特別扱いする」 という処理をクライアント側で書くよりは、ずっとシンプルになります。

ジェネレータの委譲

ジェネレータを、別のジェネレータや Traversable オブジェクトそして配列に委譲できるようになりました。 外側のジェネレータに決まり文句を書いたりする必要はなく、単に yield from 構文を使うだけです。

<?php
function gen()
{
yield 1;
yield 2;
yield from gen2();
}

function gen2()
{
yield 3;
yield 4;
}

foreach (gen() as $val)
{
echo $val, PHP_EOL;
}
?>

上の例の出力は以下となります。

1
2
3
4

intdiv() による整数の除算

新しい intdiv() 関数は、 オペランドに対して整数の除算を行い、その結果を返します。

<?php
var_dump(intdiv(10, 3));
?>

上の例の出力は以下となります。

int(3)

セッションのオプション

session_start() にオプションの配列を渡せるようになりました。 これは、php.ini などで設定した session 設定ディレクティブ を上書きします。

新たな設定オプション session.lazy_write をサポートするようになりました。これはデフォルトで有効になっており、 セッションのデータが書き換えられたときにだけセッションファイルを上書きします。 また、read_and_close も追加されました。 このオプションは session_start() だけに渡せるもので、 セッションデータを読み込んだら何も変更せずその場でクローズするよう指示します。

たとえば、 session.cache_limiter を private にして、読み込んだセッションをすぐにクローズさせるには次のようにします。

<?php
session_start([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
?>

preg_replace_callback_array()

新しい preg_replace_callback_array() 関数は、 preg_replace_callback() 関数を使ったコードをよりすっきりと書けるようにするものです。 これまでのバージョンの PHP では、正規表現ごとにコールバックを実行したければ、 コールバック関数が分岐だらけになってしまっていました。

PHP 7 以降では、個々の正規表現に対するコールバックを連想配列で登録できるようになりました。 連想配列のキーが正規表現で、その値がコールバックとなります。

CSPRNG 関数

暗号学的にセキュアな整数値および文字列を生成する、 プラットフォームに依存しない二つの新しい関数が追加されました。 random_bytes() と random_int() です。

list() が常に、 ArrayAccess を実装したオブジェクトをアンパックできるように

これまでのバージョンでは、ArrayAccess を実装したオブジェクトに対して list() が正常に機能しないことがありました。 PHP 7 ではこの問題が修正されました。

その他の機能

  • クローンしたクラスのメンバーにアクセスできるようになりました。 (clone $foo)->bar() のようにできるということです。

User Contributed Notes

Julian Sawicki 12-Sep-2020 01:52
In php 7.0 it's possible to curry functions in a way that's similar to JavaScript.

<?php

// A curried function
function add($a) {
  return function($b) use ($a) {
    return $a + $b;
  };
}

// Invoking curried function in PHP 7
$result = add(10)(15);

var_dump($result); // int 25

?>

Currying in this way is not possible in php 5.6.
Adrian Wiik 16-Jan-2020 01:52
A good rule of thumb for remembering what the spaceship operator expression returns is to replace the spaceship operator with a minus sign (-). If the result is negative, 0 or positive, the expression will return -1, 0 or 1 respectively.

Example:
<?php
echo 5 <=> 8; // 5 - 8 = -3, prints -1
echo 2 <=> 2; // 2 - 2 = 0, prints 0
echo 4 <=> 2; // 4 - 2 = 2, prints 1


PHP 7.0.x で推奨されなくなる機能

PHP 4 形式のコンストラクタ

PHP 4 形式のコンストラクタ (クラス名と同じ名前のメソッドを定義するもの) が非推奨となりました。将来的に削除される見込みです。 PHP 7 では、クラス内でこの形式のコンストラクタしか定義されていない場合に E_DEPRECATED が発生します。 __construct() メソッドを実装していれば、この警告は発生しません。

<?php
class foo {
function foo() {
echo 'I am the constructor';
}
}
?>

上の例の出力は以下となります。

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; foo has a deprecated constructor in example.php on line 3

非 static メソッドに対する static 呼び出し

static 宣言されていないメソッドに対する static 呼び出しが非推奨となりました。 将来的には削除される見込みです。

<?php
class foo {
function bar() {
echo 'I am not static!';
}
}

foo::bar();
?>

上の例の出力は以下となります。

Deprecated: Non-static method foo::bar() should not be called statically in - on line 8
I am not static!

password_hash() の salt オプション

password_hash() 関数の salt オプションが非推奨となりました。 これは、開発者が自前で (たいていは安全でない) salt を作ってしまうことを避けるためです。 開発者が salt を指定しない場合は、この関数自身が暗号学的にセキュアな salt を生成します。 したがって、もはや自前で salt を作る必要はありません。

capture_session_meta SSL コンテキストオプション

SSL コンテキストオプション capture_session_meta が非推奨となりました。 SSL メタデータは stream_get_meta_data() 関数で利用できるようになります。

LDAP

以下の関数が非推奨になりました。

  • ldap_sort()

User Contributed Notes

There are no user contributed notes for this page.


変更された関数

PHP コア

  • debug_zval_dump() の出力が、"long" ではなく "int" に、 そして "double" ではなく "float" になりました。
  • dirname() が、オプションの第二パラメータ depth を受け付けるようになりました。これは、 カレントディレクトリから depth 段階さかのぼったディレクトリ名を取得します。
  • getrusage() が Windows 上でも使えるようになりました。
  • mktime() 関数と gmmktime() 関数が、 is_dst パラメータを受け付けなくなりました。
  • preg_replace() 関数が "\e" (PREG_REPLACE_EVAL) をサポートしなくなりました。 かわりに preg_replace_callback() を使いましょう。
  • setlocale() 関数で、category を文字列で渡すことができなくなりました。定数 LC_* を指定する必要があります。
  • exec() 関数、system() 関数および passthru() 関数が、NULL バイト攻撃に対応しました。
  • shmop_open() は int ではなくリソースを返すようになりました。
これを、shmop_size() や
shmop_write()、shmop_read()、
shmop_close()、shmop_delete()
に渡す必要があります。
  • substr() および iconv_substr()は、 文字列の長さが開始位置と等しい場合に空文字列を返すようになりました。
  • パーサーリソースがオブジェクトを参照し、このオブジェクトがそのパーサーリソースを参照する場合、 xml_parser_free() は、パーサーリソースを解放するのに十分ではなくなりました。 この場合、さらに $parser を unset する必要があります。

User Contributed Notes

There are no user contributed notes for this page.


新しい関数

Closure

  • Closure::call()

CSPRNG

  • random_bytes()
  • random_int()

エラー処理およびログ記録

  • error_clear_last()

Generator

  • Generator::getReturn()

GNU Multiple Precision

  • gmp_random_seed()

数学関数

  • intdiv()

PCRE

  • preg_replace_callback_array()

PHP オプションと情報

  • gc_mem_caches()
  • get_resources()

POSIX

  • posix_setrlimit()

リフレクション

  • ReflectionParameter::getType()
  • ReflectionParameter::hasType()
  • ReflectionFunctionAbstract::getReturnType()
  • ReflectionFunctionAbstract::hasReturnType()

Zip

  • ZipArchive::setCompressionIndex()
  • ZipArchive::setCompressionName()

Zlib 圧縮

  • inflate_add()
  • deflate_add()
  • inflate_init()
  • deflate_init()

User Contributed Notes

There are no user contributed notes for this page.


新しいクラスおよびインターフェイス

Intl

  • IntlChar

リフレクション

  • ReflectionGenerator
  • ReflectionType

セッション処理

  • SessionUpdateTimestampHandlerInterface

例外の階層

  • Throwable
  • Error
  • TypeError
  • ParseError
  • AssertionError
  • ArithmeticError
  • DivisionByZeroError

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

コアで定義済みの定数

  • PHP_INT_MIN

GD

  • IMG_WEBP (PHP 7.0.10 以降)

JSON

  • JSON_ERROR_INVALID_PROPERTY_NAME
  • JSON_ERROR_UTF16

LibXML

  • LIBXML_BIGLINES

PCRE

  • PREG_JIT_STACKLIMIT_ERROR

POSIX

  • POSIX_RLIMIT_AS
  • POSIX_RLIMIT_CORE
  • POSIX_RLIMIT_CPU
  • POSIX_RLIMIT_DATA
  • POSIX_RLIMIT_FSIZE
  • POSIX_RLIMIT_LOCKS
  • POSIX_RLIMIT_MEMLOCK
  • POSIX_RLIMIT_MSGQUEUE
  • POSIX_RLIMIT_NICE
  • POSIX_RLIMIT_NOFILE
  • POSIX_RLIMIT_NPROC
  • POSIX_RLIMIT_RSS
  • POSIX_RLIMIT_RTPRIO
  • POSIX_RLIMIT_RTTIME
  • POSIX_RLIMIT_SIGPENDING
  • POSIX_RLIMIT_STACK
  • POSIX_RLIMIT_INFINITY

Zlib

  • ZLIB_ENCODING_RAW
  • ZLIB_ENCODING_DEFLATE
  • ZLIB_ENCODING_GZIP
  • ZLIB_FILTERED
  • ZLIB_HUFFMAN_ONLY
  • ZLIB_FIXED
  • ZLIB_RLE
  • ZLIB_DEFAULT_STRATEGY
  • ZLIB_BLOCK
  • ZLIB_FINISH
  • ZLIB_FULL_FLUSH
  • ZLIB_NO_FLUSH
  • ZLIB_PARTIAL_FLUSH
  • ZLIB_SYNC_FLUSH

User Contributed Notes

There are no user contributed notes for this page.


SAPI モジュールの変更

FPM

制限のない listen ポートは、 IPv4 と IPv6 の両方をリスンするようになりました。

PHP 5 では、listen ディレクティブにポート番号だけを指定した場合は、 すべてのインターフェイス上で IPv4 だけをリスンしていました。PHP 7 では、 IPv4 と IPv6 の両方のリクエストを受け付けるようになります。

特定の IP アドレスを指定しているディレクティブには何も影響を及ぼしません。 IP アドレスを指定している場合は、そのアドレスとプロトコルだけを受け付けます。

User Contributed Notes

There are no user contributed notes for this page.


削除された拡張モジュールおよび SAPI

削除された拡張モジュール

  • ereg
  • mssql
  • mysql
  • sybase_ct

削除された SAPI

  • aolserver
  • apache
  • apache_hooks
  • apache2filter
  • caudium
  • continuity
  • isapi
  • milter
  • nsapi
  • phttpd
  • pi3web
  • roxen
  • thttpd
  • tux
  • webjames

User Contributed Notes

There are no user contributed notes for this page.


その他の変更

予約語の制約の緩和

クラスやインターフェイスそしてトレイトの内部で、 プロパティや定数そしてメソッドの名前にグローバルな予約語を使えるようになりました。 これで、今後新たなキーワードが導入された場合でも下位互換性を維持しやすくなります。 そして、API の命名の制約も軽減できるでしょう。

これは、流れるようなインターフェイスを用いた内部 DSL を作る際などに便利です。

<?php
// 'new', 'private', 'for' は、これまでなら使うことができませんでした
Project::new('Project Name')->private()->for('purpose here')->with('username here');
?>

唯一の例外は class キーワードで、このキーワードを定数名として使うことはできません。 これを許してしまうと、クラス名の解決に使う構文 (ClassName::class) と衝突してしまうからです。

date.timezone に関する警告の削除

これまでのバージョンでは、INI 項目 date.timezone を設定せずに日付・時刻関連の関数を使おうとすると、警告が発生していました。 PHP 7 では、この警告は発生しなくなりました (date.timezone のデフォルトは、これまでどおり UTC です)。

User Contributed Notes

There are no user contributed notes for this page.


PHP 5.5.x から PHP 5.6.x への移行

目次

  • 下位互換性のない変更点
  • 新機能
  • PHP 5.6.x で推奨されなくなる機能
  • 変更された関数
  • 新しい関数
  • PHP 5.6.x における OpenSSL 関連の変更
  • その他の拡張モジュールに対する変更
  • 新しいグローバル定数

PHP 5.5.x で改良された点のほどんどは、既存のコードに影響を及ぼしません。ただ、 互換性がない変更 や 考慮すべき 新機能 があります。よって、 実運用環境の PHP をこのバージョンにあげる前に、あらゆるコードをテストすべきです。

User Contributed Notes

There are no user contributed notes for this page.


下位互換性のない変更点

既存の PHP 5 のコードのほとんどは変更なしで動作するはずですが、 以下の下位互換性のない変更点については注意しましょう。

配列リテラルを用いてクラスのプロパティに配列を設定した場合、配列のキーが上書きされない

以前のバージョンでは、クラスのプロパティとして宣言されている配列で明示的なキーと暗黙のキーが混在している場合に、 明示的に指定したキーと暗黙の数値キーが重複すると、黙って上書きされていました。以下に、例を示します。

<?php
class C {
const ONE = 1;
public $array = [
self::ONE => 'foo',
'bar',
'quux',
];
}

var_dump((new C)->array);
?>

上の例の PHP 5.5 での出力は、このようになります。

array(2) {
  [0]=>
  string(3) "bar"
  [1]=>
  string(4) "quux"
}

上の例の PHP 5.6 での出力は、このようになります。

array(3) {
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(4) "quux"
}

json_decode() が、より厳格に

json_decode() は、JSON リテラル true、false および null について、すべて小文字のものしか受け付けなくなりました。 これは、JSON の仕様に基づくものです。小文字以外の場合は、json_last_error() にエラーが設定されます。 以前のバージョンの json_decode() は、大文字が混ざっているものでも受け付けていました。

この変更の影響を受けるのは、無効な形式の JSON を json_decode() に渡していた場合だけです。 妥当な形式の JSON は、この変更の影響を受けず、通常通りに処理されます。

ストリームラッパーが、SSL/TLS を使っている場合のピア証明書とホスト名の検証にデフォルトで対応

暗号化されたすべてのクライアントストリームで、ピア検証がデフォルトで有効になりました。 デフォルトでは、OpenSSL のデフォルト CA バンドルを使ってピア証明書を検証します。 たいていの場合は、正しい SSL 証明書を持つサーバーと通信するならこれを変更する必要はありません。 OpenSSL が、よく知られた CA バンドルを使うように設定されているからです。

デフォルトの CA バンドルを上書きすることもできます。 openssl.cafile あるいは openssl.capath を設定すればグローバルに変更でき、コンテキストオプション cafile あるいは capath を使えばリクエスト単位で変更できます。

一般的にはおすすめできませんが、 コンテキストオプション verify_peer を false にしてリクエストでのピア証明書の検証を無効化することもできます。 また同じく、ピア名の検証も、コンテキストオプション verify_peer_name を false にすれば無効化できます。

GMP リソースがオブジェクトに

GMP リソースがオブジェクトになりました。 GMP 拡張モジュールに実装されている API に変更はなく、コードに手を加えなくてもそのまま動作します。 しかし、is_resource() などでリソースかどうかを明示的に調べている場合は注意が必要です。

Mcrypt 関数は、有効なキーと IV を要求する

mcrypt_encrypt()、mcrypt_decrypt()、
mcrypt_cbc()、mcrypt_cfb()、
mcrypt_ecb()、mcrypt_generic() および
mcrypt_ofb() は、無効なサイズのキーや IV を受け付けなくなりました。
IV が必要なブロック暗号化モードで IV が指定されていない場合にも、処理が失敗するようになりました。

cURL でのファイルアップロード

@file 構文によるファイルアップロードを行う際には、CURLOPT_SAFE_UPLOAD を false に設定しなければいけなくなりました。 この機能を使うのではなく、CURLFile を使うべきです。

User Contributed Notes

There are no user contributed notes for this page.


新機能

定数式

数値や文字列リテラルと定数を、これまでのバージョンでは静的な値が想定されていた場面 (定数やプロパティの宣言、関数のデフォルト引数など) で、スカラー式として扱えるようになりました。

<?php
const ONE = 1;
const TWO = ONE * 2;

class C {
const THREE = TWO + 1;
const ONE_THIRD = ONE / self::THREE;
const SENTENCE = 'THREE の値は '.self::THREE;

public function f($a = ONE + self::THREE) {
return $a;
}
}

echo (new C)->f()."\n";
echo C::SENTENCE;
?>

上の例の出力は以下となります。

4
THREE の値は 3

配列も、 const キーワードで定数として定義できるようになりました。

<?php
const ARR = ['a', 'b'];

echo ARR[0];
?>

上の例の出力は以下となります。

a

... による可変個引数関数

可変個引数の関数 の実装に ... 演算子が使えるようになり、 func_get_args() を使わずに済むようになりました。

<?php
function f($req, $opt = null, ...$params) {
// $params は配列で、残りのすべての引数が含まれます
printf('$req: %d; $opt: %d; パラメータ数: %d'."\n",
$req, $opt, count($params));
}

f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
?>

上の例の出力は以下となります。

$req: 1; $opt: 0; パラメータ数: 0
$req: 1; $opt: 2; パラメータ数: 0
$req: 1; $opt: 2; パラメータ数: 1
$req: 1; $opt: 2; パラメータ数: 2
$req: 1; $opt: 2; パラメータ数: 3

... による引数のアンパック

配列 や Traversable オブジェクトを引数リストにアンパックするために、 関数の呼び出し時に ... 演算子が使えるようになりました。 これは、Ruby などの他の言語では splat 演算子と呼ばれることもあります。

<?php
function add($a, $b, $c) {
return $a + $b + $c;
}

$operators = [2, 3];
echo add(1, ...$operators);
?>

上の例の出力は以下となります。

6

累乗演算子 **

右から評価する ** 演算子が追加されました。 これは累乗をサポートするものです。さらに、短縮代入演算子 **= も追加されました。

<?php
printf("2 ** 3 == %d\n", 2 ** 3);
printf("2 ** 3 ** 2 == %d\n", 2 ** 3 ** 2);

$a = 2;
$a **= 3;
printf("a == %d\n", $a);
?>

上の例の出力は以下となります。

2 ** 3 ==      8
2 ** 3 ** 2 == 512
a ==           8

use function および use const

The use 演算子を拡張し、クラスだけではなく関数や定数もインポートできるようになりました。 それぞれ、言語構造 use function および use const を用います。

<?php
namespace Name\Space {
const FOO = 42;
function f() { echo __FUNCTION__."\n"; }
}

namespace {
use const Name\Space\FOO;
use function Name\Space\f;

echo FOO."\n";
f();
}
?>

上の例の出力は以下となります。

42
Name\Space\f

phpdbg

PHP は、今や SAPI モジュールとして実装された phpdbg という対話型デバッガーを含みます。 詳細な情報は » phpdbg のドキュメント を参照ください。

デフォルトの文字エンコーディング

エンコーディングに依存する関数 htmlentities() や html_entity_decode() そして htmlspecialchars() におけるデフォルトの文字セットとして、 default_charset を利用するようになりました。 iconv (非推奨) や mbstring でのエンコードが設定されている場合は、 default_charset よりもそちらのほうが優先されます。

この設定のデフォルト値は UTF-8 です。

php://input が再利用可能に

php://input が再オープンできるようになり、必要に応じて何度でも読めるようになりました。 その結果として、POST されたデータを読むときに必要となるメモリの量が大幅に削減されました。

巨大なファイルのアップロード

2 ギガバイトより大きいサイズのファイルもアップロードできるようになりました。

GMP での演算子オーバーロードのサポート

GMP オブジェクトが、 演算子のオーバーロードやスカラー型へのキャストに対応するようになりました。 GMP を使って、よりわかりやすいコードが書けるようになります。

<?php
$a = gmp_init(42);
$b = gmp_init(17);

if (version_compare(PHP_VERSION, '5.6', '<')) {
echo gmp_intval(gmp_add($a, $b)), PHP_EOL;
echo gmp_intval(gmp_add($a, 17)), PHP_EOL;
echo gmp_intval(gmp_add(42, $b)), PHP_EOL;
} else {
echo $a + $b, PHP_EOL;
echo $a + 17, PHP_EOL;
echo 42 + $b, PHP_EOL;
}
?>

上の例の出力は以下となります。

59
59
59

hash_equals() による、タイミング攻撃に対応した文字列比較

hash_equals() 関数が追加されました。 この関数は、二つの文字列の比較を一定の時間で行います。 タイミング攻撃を防ぐために、文字列の比較にはこの関数を使うべきです。 たとえば crypt() のパスワードハッシュをチェックしたりするときに使えます (password_hash() や password_verify() が使えない場合を想定。 これらの関数は、タイミング攻撃の影響を受けません)。

<?php
$expected = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('1234', '$2a$07$usesomesillystringforsalt$');

var_dump(hash_equals($expected, $correct));
var_dump(hash_equals($expected, $incorrect));
?>

上の例の出力は以下となります。

bool(true)
bool(false)

__debugInfo()

マジックメソッド __debugInfo() が追加されました。 var_dump() でオブジェクトの情報を出力する際の、 プロパティやその値の表示方法を変更できます。

<?php
class C {
private $prop;

public function __construct($val) {
$this->prop = $val;
}

public function __debugInfo() {
return [
'propSquared' => $this->prop ** 2,
];
}
}

var_dump(new C(42));
?>

上の例の出力は以下となります。

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}

gost-crypto ハッシュアルゴリズム

ハッシュアルゴリズム gost-crypto が追加されました。 これは GOST ハッシュ関数を実装したもので、 » RFC 4357, section 11.2 に記載されている CryptoPro S-box テーブルを使っています。

SSL/TLS の改良

PHP 5.6 では、SSL/TLS のサポートに幅広い改良が加わりました。 ピア検証にデフォルトで対応したり、 証明書のフィンガープリントのマッチングに対応したり、 TLS 再ネゴシエーションアタックの対策をしたり、多数の SSL コンテキストオプションを新たに導入したりしました。 これらによって、暗号化されたストリームに関するよりきめ細やかな制御ができるようになりました。

変更内容の詳細を、 PHP 5.6.x における OpenSSL 関連の変更 にまとめました。

pgsql の非同期サポート

pgsql 拡張モジュールが、 非同期の接続や問い合わせに対応しました。 PostgreSQL データベースとのやりとりで、ノンブロッキング処理ができるようになります。 非同期接続を確立するには、定数 PGSQL_CONNECT_ASYNC を利用します。そして、新しい関数 pg_connect_poll()、pg_socket()、 pg_consume_input()、pg_flush() を使って、非同期接続や問い合わせを処理します。

User Contributed Notes

There are no user contributed notes for this page.


PHP 5.6.x で推奨されなくなる機能

非互換のコンテキストからの呼び出し

非互換のコンテキストからのメソッド呼び出しが非推奨となり、 E_STRICT ではなく E_DEPRECATED が発生するようになりました。 この機能は、将来のバージョンの PHP で削除される予定です。

具体例を示します。

<?php
class A {
function f() { echo get_class($this); }
}

class B {
function f() { A::f(); }
}

(new B)->f();
?>

上の例の出力は以下となります。

Deprecated: Non-static method A::f() should not be called statically, assuming $this from incompatible context in - on line 7
B

$HTTP_RAW_POST_DATA および always_populate_raw_post_data

always_populate_raw_post_data を使うと、$HTTP_RAW_POST_DATA に値が入っている場合に E_DEPRECATED が発生するようになりました。 新しいコードでは、$HTTP_RAW_POST_DATA ではなく php://input を使うようにしましょう。$HTTP_RAW_POST_DATA は、将来のバージョンで削除される予定です。 この新しい振る舞い ($HTTP_RAW_POST_DATA が定義されておらず、E_DEPRECATED が発生しない状態) を試すには、 always_populate_raw_post_data に -1 を設定します。

iconv および mbstring のエンコーディング設定

iconv および mbstring の、エンコーディングに関するオプションが非推奨となりました。 代わりに default_charset を使いましょう。 非推奨になったオプションは、以下のとおりです。

  • iconv.input_encoding
  • iconv.output_encoding
  • iconv.internal_encoding
  • mbstring.http_input
  • mbstring.http_output
  • mbstring.internal_encoding

User Contributed Notes

There are no user contributed notes for this page.


変更された関数

PHP コア

  • crypt() で、salt パラメータを省略したときに E_NOTICE が発生するようになりました。
  • substr_compare() が、 length パラメータに 0 を受け付けるようになりました。
  • unserialize() に渡したシリアライズ済みデータが、 自身のコンストラクタを呼ばないようなオブジェクトに改変されている場合に、 処理が失敗するようになりました。

cURL

  • @file 構文を使ったアップロードは、 CURLOPT_SAFE_UPLOAD オプションを false にしたときだけサポートするようになりました。 かわりに CURLFile を使うようにしましょう。

Mcrypt

  • mcrypt_create_iv() の source パラメータのデフォルトが、 MCRYPT_DEV_RANDOM から MCRYPT_DEV_URANDOM に変わりました。

OpenSSL

  • stream_socket_enable_crypto() で、 crypto_type パラメータをオプションにすることができるようになりました。 ストリームの SSL コンテキストに、新しいオプション crypto_type を指定します。

PostgreSQL

  • pg_insert()、pg_select()、 pg_update()、pg_delete() が、実験的な関数ではなくなりました。
  • pg_send_execute()、
pg_send_prepare()、pg_send_query()、
pg_send_query_params() が、
データベース接続に使っているソケットストリームがノンブロッキングモードの場合は、
クエリの書き込み完了まで待つようなブロックをしなくなりました。

Reflection

  • ReflectionClass::newInstanceWithoutConstructor() で、final ではない内部関数をインスタンス化できるようになりました。

XMLReader

  • XMLReader::getAttributeNs() と XMLReader::getAttributeNo() が、 属性が見つからない場合に null を返すようになりました。これは XMLReader::getAttribute() と同じ挙動です。

User Contributed Notes

There are no user contributed notes for this page.


新しい関数

日付・時刻

  • DateTimeImmutable::createFromMutable()

GMP

  • gmp_root()
  • gmp_rootrem()

Hash

  • hash_equals()

LDAP

  • ldap_escape()
  • ldap_modify_batch()

MySQLi

  • mysqli_get_links_stats()

OCI8

  • oci_get_implicit_resultset()

OpenSSL

  • openssl_get_cert_locations()
  • openssl_x509_fingerprint()
  • openssl_spki_new()
  • openssl_spki_verify()
  • openssl_spki_export_challenge()
  • openssl_spki_export()

PostgreSQL

  • pg_connect_poll()
  • pg_consume_input()
  • pg_flush()
  • pg_socket()

PDO_PGSQL

  • PDO::pgsqlGetNotify()
  • PDO::pgsqlGetPid()

Session

  • session_abort()
  • session_reset()

Zip

  • ZipArchive::setPassword()

User Contributed Notes

There are no user contributed notes for this page.


PHP 5.6.x における OpenSSL 関連の変更

ストリームラッパーが、SSL/TLS を使っている場合のピア証明書とホスト名の検証にデフォルトで対応

暗号化されたすべてのクライアントストリームで、ピア検証がデフォルトで有効になりました。 デフォルトでは、OpenSSL のデフォルト CA バンドルを使ってピア証明書を検証します。 たいていの場合は、正しい SSL 証明書を持つサーバーと通信するならこれを変更する必要はありません。 OpenSSL が、よく知られた CA バンドルを使うように設定されているからです。

デフォルトの CA バンドルを上書きすることもできます。 openssl.cafile あるいは openssl.capath を設定すればグローバルに変更でき、コンテキストオプション cafile あるいは capath を使えばリクエスト単位で変更できます。

一般的にはおすすめできませんが、 コンテキストオプション verify_peer を false にしてリクエストでのピア証明書の検証を無効化することもできます。 また同じく、ピア名の検証も、コンテキストオプション verify_peer_name を false にすれば無効化できます。

証明書のフィンガープリント

証明書のフィンガープリントの抽出と、その検証に対応しました。 新たに追加された openssl_x509_fingerprint() 関数が、 X.509 証明書からフィンガープリントを抽出します。また、 SSL ストリームコンテキスト に二つのオプションが追加されました。 capture_peer_cert はピアの X.509 証明書を取り込み、 peer_fingerprint はピアの証明書が指定したフィンガープリントにマッチすることを確かめます。

デフォルトの暗号の更新

PHP がデフォルトで使う暗号が更新され、 » Mozilla cipher recommendations に基づいた、よりセキュアなリストになりました。 リストにない例外は、anonymous Diffie-Hellman ciphers と RC4 です。

新しい定数 OPENSSL_DEFAULT_STREAM_CIPHERS で、この一覧にアクセスできます。 また、(過去のバージョンの PHP のように) 上書きもできます。上書きをするには、コンテキストオプション ciphers を設定します。

デフォルトでの圧縮の無効化

SSL/TLS の圧縮が、デフォルトで無効になりました。これは、CRIME 攻撃への対応です。 PHP 5.4.13 で新たにコンテキストオプション disable_compression が加わり、圧縮を無効にできるようになりました。そのデフォルト値が true （つまり圧縮が無効になっている) に変わったのです。

サーバーの暗号の優先が可能に

SSL コンテキストオプション honor_cipher_order が追加されました。これによって、暗号化されたストリームサーバーでの BEAST 脆弱性を除去するために、サーバーの暗号をクライアントよりも優先させられるようになります。

ネゴシエート済みのプロトコルと暗号へのアクセス

暗号化ストリームでネゴシエート済みのプロトコルと暗号へのアクセスが、 stream_get_meta_data() あるいは stream_context_get_options() でできるようになりました。 これは、SSL コンテキストオプション capture_session_meta が true になっている場合に有効です。

<?php
$ctx = stream_context_create(['ssl' => [
'capture_session_meta' => TRUE
]]);

$html = file_get_contents('https://google.com/', FALSE, $ctx);
$meta = stream_context_get_options($ctx)['ssl']['session_meta'];
var_dump($meta);
?>

上の例の出力は以下となります。

array(4) {
  ["protocol"]=>
  string(5) "TLSv1"
  ["cipher_name"]=>
  string(20) "ECDHE-RSA-AES128-SHA"
  ["cipher_bits"]=>
  int(128)
  ["cipher_version"]=>
  string(11) "TLSv1/SSLv3"
}

暗号化ストリームサーバーでの前方秘匿性に関する新たなオプション

暗号化クライアントストリームはすでに前方秘匿性に対応しています。 というのも、一般に前方秘匿性は、サーバーが制御するものだからです。 PHP の暗号化サーバーストリームが使っている証明書は前方秘匿性に対応しており、 何もしなくても有効になっています。 しかし、前方秘匿性に関してより決め細やかな制御をしたり、 互換性に関する問題に対応したりするために、 新たな SSL コンテキストオプションがいくつか追加されました。

ecdh_curve

このオプションで、ECDH 暗号で使う曲線を選択できるようになります。 省略した場合は prime256v1 を使います。

dh_param

Diffie-Hellman 鍵交換用のパラメータを含むファイルへのパス。 このファイルは、たとえば以下のようなコマンドで生成したものです。

openssl dhparam -out /path/to/my/certs/dh-2048.pem 2048
single_dh_use

true にすると、Diffie-Hellman パラメータを使うときに、 新たな鍵ペアを作成します。これにより、前方秘匿性が向上します。

single_ecdh_use

true にすると、ECDH 暗号スイートでのネゴシエート時に 新たな鍵ペアを作成します。これにより、前方秘匿性が向上します。

SSL/TLS のバージョンの選択

SSL や TLS の、特定のバージョンを指定できるようになりました。SSL コンテキストオプション crypto_method を利用するか、 あるいはストリームラッパーの作成時に (stream_socket_client() あるいは stream_socket_server() を呼んで) トランスポートを指定します。

SSL コンテキストオプション crypto_method には、 stream_socket_enable_crypto() 関数の crypto_type と同様に、 許可するプロトコルをビットマスクで指定します。

プロトコルのバージョンと、対応するオプション
プロトコル | クライアントのフラグ | サーバーのフラグ | トランスポート
任意のバージョンの TLS あるいは SSL | STREAM_CRYPTO_METHOD_ANY_CLIENT | STREAM_CRYPTO_METHOD_ANY_SERVER | ssl://
任意のバージョンの TLS | STREAM_CRYPTO_METHOD_TLS_CLIENT | STREAM_CRYPTO_METHOD_TLS_SERVER | tls://
TLS 1.0 | STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_0_SERVER | tlsv1.0://
TLS 1.1 | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_SERVER | tlsv1.1://
TLS 1.2 | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_SERVER | tlsv1.2://
SSL 3 | STREAM_CRYPTO_METHOD_SSLv3_CLIENT | STREAM_CRYPTO_METHOD_SSLv3_SERVER | sslv3://
<?php

// file_get_contents() を使うには TLS 1.0 以降が必要です
$ctx = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT,
],
]);
$html = file_get_contents('https://google.com/', false, $ctx);

// TLS 1.1 あるいは 1.2 が必要です
$ctx = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
],
]);
$html = file_get_contents('https://google.com/', false, $ctx);

// 接続時に tlsv1.2:// ストリームソケットトランスポートを利用します
$sock = stream_socket_client('tlsv1.2://google.com:443/');

?>

openssl_get_cert_locations() の追加

openssl_get_cert_locations() 関数が追加されました。 この関数は、PHP が CA バンドルを探す際のデフォルトの場所を返します。

<?php
var_dump(openssl_get_cert_locations());
?>

上の例の出力は以下となります。

array(8) {
  ["default_cert_file"]=>
  string(21) "/etc/pki/tls/cert.pem"
  ["default_cert_file_env"]=>
  string(13) "SSL_CERT_FILE"
  ["default_cert_dir"]=>
  string(18) "/etc/pki/tls/certs"
  ["default_cert_dir_env"]=>
  string(12) "SSL_CERT_DIR"
  ["default_private_dir"]=>
  string(20) "/etc/pki/tls/private"
  ["default_default_cert_area"]=>
  string(12) "/etc/pki/tls"
  ["ini_cafile"]=>
  string(0) ""
  ["ini_capath"]=>
  string(0) ""
}

SPKI のサポート

署名された公開鍵およびチャレンジ (SPKAC) の生成や抽出、そして検証のサポートが追加されました。 新たに追加された関数 openssl_spki_new()、 openssl_spki_verify()、 openssl_spki_export_challenge() そして openssl_spki_export() で、 SPKAC が HTML5 の KeyGen 要素から生成した PEM 公開鍵とチャレンジの作成、検証、エクスポートを行います。

openssl_spki_new

秘密鍵とチャレンジ文字列、そしてハッシュアルゴリズムを指定して、 新しい SPKAC を生成します。

<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');

$spkac = openssl_spki_new($pkey, 'challenge string');
?>

上の例の出力は以下となります。

SPKAC=MIIBXjCByDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3L0IfUijj7+A8CPC8EmhcdNoe5fUAog7OrBdhn7EkxFButUp40P7+LiYiygYG1TmoI/a5EgsLU3s9twEz3hmgY9mYIqb/rb+SF8qlD/K6KVyUORC7Wlz1Df4L8O3DuRGzx6/+3jIW6cPBpfgH1sVuYS1vDBsP/gMMIxwTsKJ4P0CAwEAARYkYjViMzYxMTktNjY5YS00ZDljLWEyYzctMGZjNGFhMjVlMmE2MA0GCSqGSIb3DQEBAwUAA4GBAF7hu0ifzmjonhAak2FhhBRsKFDzXdKIkrWxVNe8e0bZzMrWOxFM/rqBgeH3/gtOUDRS5Fnzyq425UsTYbjfiKzxGeCYCQJb1KJ2V5Ij/mIJHZr53WYEXHQTNMGR8RPm7IxwVXVSHIgAfXsXZ9IXNbFbcaLRiSTr9/N4U+MXUWL7
openssl_spki_verify

指定した SPKAC を検証します。

<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');

$spkac = openssl_spki_new($pkey, 'challenge string');
var_dump(openssl_spki_verify($spkac));
?>
openssl_spki_export_challenge

指定した SPKAC から、関連付けられたチャレンジをエクスポートします。

<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');

$spkac = openssl_spki_new($pkey, 'challenge string');
$challenge = openssl_spki_export_challenge($spkac);
echo $challenge;
?>

上の例の出力は以下となります。

challenge string
openssl_spki_export

PEM フォーマットされた RSA 公開鍵を、SPKAC からエクスポートします。

<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');

$spkac = openssl_spki_new($pkey, 'challenge string');
echo openssl_spki_export($spkac);
?>

上の例の出力は以下となります。

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcvQh9SKOPv4DwI8LwSaFx02h7
l9QCiDs6sF2GfsSTEUG61SnjQ/v4uJiLKBgbVOagj9rkSCwtTez23ATPeGaBj2Zg
ipv+tv5IXyqUP8ropXJQ5ELtbXPUN/gvw7cO5EbPHr/7eMhbpw8Gl+AfWxW5hLW8
MGw/+AwwjHBOwong/QIDAQAB
-----END PUBLIC KEY-----

User Contributed Notes

There are no user contributed notes for this page.


その他の拡張モジュールに対する変更

cURL

cURL ライブラリで非推奨とされてきた以下の定数が、削除されました。

  • CURLOPT_CLOSEPOLICY
  • CURLCLOSEPOLICY_CALLBACK
  • CURLCLOSEPOLICY_LEAST_RECENTLY_USED
  • CURLCLOSEPOLICY_LEAST_TRAFFIC
  • CURLCLOSEPOLICY_OLDEST
  • CURLCLOSEPOLICY_SLOWEST

OCI8

  • Oracle Database 12c の暗黙の結果セットをサポートするようになりました。 新しい関数 oci_get_implicit_resultset() を利用します。
  • SELECT に対して oci_execute($s, OCI_NO_AUTO_COMMIT) を使った場合に、接続を閉じるときに、不要な内部 ROLLBACK を起動することがなくなりました。
  • DTrace プローブが追加されました。 --enable-dtrace オプションで制御します。
  • oci_internal_debug() は、何もしない関数になりました。
  • phpinfo() における OCI8 の出力フォーマットが変わりました。

Zip

設定オプション --with-libzip が追加されました。 これを指定すると、システムにインストールされている libzip を利用します。 libzip バージョン 0.11 が必須です。0.11.2 以降を推奨します。

MySQLi

新しいオプション mysqli.rollback_on_cached_plink が追加されました。持続的接続のロールバック動作を制御します。

User Contributed Notes

There are no user contributed notes for this page.


新しいグローバル定数

GD

  • IMG_WEBP (PHP 5.6.25 以降)

LDAP

  • LDAP_ESCAPE_DN
  • LDAP_ESCAPE_FILTER

OpenSSL

  • OPENSSL_DEFAULT_STREAM_CIPHERS
  • STREAM_CRYPTO_METHOD_ANY_CLIENT
  • STREAM_CRYPTO_METHOD_ANY_SERVER
  • STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
  • STREAM_CRYPTO_METHOD_TLSv1_0_SERVER
  • STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
  • STREAM_CRYPTO_METHOD_TLSv1_1_SERVER
  • STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
  • STREAM_CRYPTO_METHOD_TLSv1_2_SERVER

PostgreSQL

  • PGSQL_CONNECT_ASYNC
  • PGSQL_CONNECTION_AUTH_OK
  • PGSQL_CONNECTION_AWAITING_RESPONSE
  • PGSQL_CONNECTION_MADE
  • PGSQL_CONNECTION_SETENV
  • PGSQL_CONNECTION_SSL_STARTUP
  • PGSQL_CONNECTION_STARTED
  • PGSQL_DML_ESCAPE
  • PGSQL_POLLING_ACTIVE
  • PGSQL_POLLING_FAILED
  • PGSQL_POLLING_OK
  • PGSQL_POLLING_READING
  • PGSQL_POLLING_WRITING

User Contributed Notes

There are no user contributed notes for this page.


PHP のデバッグ

目次

  • PHP のデバッグについて

User Contributed Notes

Fonstw 26-Feb-2020 08:54
For me, just outputting variables only works when I know a method should be broken.

I use Xdebug in PHP Storm (available on other IDE's and editors as well)
It allows me to use line breaks and fully inspect anything that's set and how their values are changed and allows me to call single method even at (paused) runtime to see what behaviour the method really gives at any given point, which gives me a much better insight on how my code works and how to get it to work like it should.

I wholeheartedly recomend anyone to try a fuller-fledged debugger like that!


PHP のデバッグについて

PHP には、コマンドラインの対話型デバッガ phpdbg が同梱されています。

ほとんどのIDE は » Xdebug をサポートしています。 これはフリーのデバッグツールで、PHP アプリケーションをステップ実行することでデバッグできます。

User Contributed Notes

There are no user contributed notes for this page.


Configure オプション

目次

  • 中心となる configure オプションのリスト

User Contributed Notes

There are no user contributed notes for this page.


中心となる configure オプションのリスト

以下のリストは、Unix 系の環境で PHP をコンパイルする際に用いられる configure スクリプトのオプションの一部です。 ほとんどのオプションはそれぞれの拡張モジュールのリファレンスページで 説明されており、ここにはありません。最新の configure オプションの 完全なリストを得るには、PHP のソースディレクトリで autoconf を実行した後、./configure --help を実行してください（インストールと設定 も参照ください）。--prefix=PREFIX のような追加の configure オプションについて興味がある方は、 » GNU configure のドキュメントが 参考になるでしょう。

注意:

これらの設定はコンパイル時にのみ使用可能です。PHP の動作を 実行時に設定したい場合は、実行時設定 の章を参照ください。

  • 一般
  • PHP の動作
  • サーバー

PHP の Configure オプション

一般的なオプション

--enable-debug

デバッグシンボルつきでコンパイルします。

--with-layout=TYPE

インストールされるファイルのレイアウトを設定します。Type には PHP（デフォルト）または GNU のどちらかが指定できます。 manページを PREFIX 直下にインストールした場合(デフォルト)、 manpath ユーティリティの検索パスで見つかった順に、 GNU スタイルのレイアウトが選択されるので注意しましょう。

--with-pear=DIR

PEAR を DIR（デフォルトは PREFIX/lib/php）にインストールします。

--without-pear

PEAR をインストールしません。

--enable-sigchild

PHP 独自の SIGCHLD ハンドラを有効にします。

--disable-rpath

実行時にライブラリの検索パスを追加できないようにします。

--enable-libgcc

明示的に libgcc とリンクします。

--enable-php-streams

実験的な PHP ストリーム機能を組み込みます。PHP そのものをテストする 目的以外では使用しないでください。

--with-zlib-dir[=DIR]

zlib のインストールディレクトリを指定します。

--with-tsrm-pthreads

POSIX スレッドを使用します（デフォルト）。

--enable-shared[=PKGS]

共有ライブラリをビルドします [default=yes]。

--enable-static[=PKGS]

静的ライブラリをビルドします [default=yes]。

--enable-fast-install[=PKGS]

インストール速度を上げるように最適化します [default=yes]。

--with-gnu-ld

C コンパイラが GNU ld を使用するとみなします [default=no]。

--disable-libtool-lock

ロックを回避します（並列ビルドに失敗する可能性があります）。

--with-pic

PIC/non-PIC オブジェクトのどちらか一方のみを使用するようにします [default=use both]。

--enable-versioning

要求されるシンボルのみをエクスポートします。 詳細な情報は INSTALL を参照ください。

PHP オプション

--enable-maintainer-mode

一般の利用者にとってあまり便利でない（そして時に混乱のもととなる） make ルールや依存性を有効にします。

--with-config-file-path=PATH

php.ini を探すパスを設定します。デフォルト値は PREFIX/lib です。

--disable-short-tags

開始タグの短縮形 <? をデフォルトで無効にします。

--with-libdir

Unix システムにおいて、PHP をビルドするためのライブラリがあるディレクトリを指定します。 64 ビットシステムでは、この引数を --with-libdir=lib64 のようにして lib64 ディレクトリを指定しなければなりません。

--enable-zts

Zend Thread Safety を有効にします。 PHP 8.0.0 より前のバージョン、かつ Windows 以外のシステムでは、 このオプションは --enable-maintainer-zts と呼ばれていました。

SAPI オプション

以下のリストには、PHP で有効な SAPI（Server Application Programming Interface）が含まれています。

--with-apxs[=FILE]

Apache 共有モジュールをビルドします。FILE は Apache apxs ツールへの パスで、デフォルトは apxs です。Apache のソース Tarball に含まれる apxs を指定するのではなく、そのシステムに実際にインストールされている バージョンの apxs を指定するようにしましょう。

--with-apache[=DIR]

静的 Apache モジュールをビルドします。DIR は Apache のビルドディレクトリで、 デフォルトは /usr/local/apache です。

--with-mod_charset

（ロシアの Apache 用の）mod_charset のための変換テーブルを 有効にします。

--with-apxs2[=FILE]

Apache 2.0 共有モジュールをビルドします。FILE は、オプションで指定する Apache apxs ツールへのパスです。デフォルトは apxs です。

--disable-cli

PHP の CLI バージョンのビルドを 無効にします（自動的に --without-pear も指定されます）。詳細な情報は PHP をコマンドラインから使用する を参照ください。

--enable-phpdbg

phpdbg インタラクティブデバッガ SAPI モジュールのサポートを有効にします。

--enable-embed[=TYPE]

組み込み SAPI ライブラリのビルドを有効にします。TYPE は shared あるいは static のいずれかで、デフォルトは shared です。

--with-servlet[=DIR]

サーブレットのサポートを含めます。DIR は JSDK のインストールディレクトリです。 java 拡張モジュールが共有ライブラリとしてビルドされていることが 前提条件です。

--disable-cgi

PHP の CGI バージョンをビルドしないようにします。

この引数は FastCGI も有効にします。

User Contributed Notes

atesin () gmail ! com 04-Feb-2021 08:55
i'll answer myself (FINALLY!)

current "configure options" can be viewed with "php-config" shell script, aside with other compile time options too =D!!! ...

in some distributions it comes with the "php-devel" package... but until in this online manual "php-config" is mentioned in pecl extensions documentation (i couldn't find on pecl site), idk if that "php-devel" has something to do with this

... however i noticed they are literal strings inside the script, i hope the script itself were built together with php compilation o_O

in the previous page "configure options" (link shown above ^), there is an editor note with additional info about it
atesin () gmail ! com 04-Feb-2021 02:38
please somebody tell me how to display configure options used in php actual binary

it was shown in phpinfo() some years before, it was very useful, specially with 'phpize' recompilation and to enable some pecl/pear module :/

please tell me also which ctriteria had php guys used to suddenly decided to hide (or obfuscate) this info :/

thanks in advance


php.ini ディレクティブ

目次

  • php.ini ディレクティブのリスト
  • php.ini のセクション一覧
  • コア php.ini ディレクティブに関する説明

User Contributed Notes

There are no user contributed notes for this page.


php.ini ディレクティブのリスト

以下のリストには、PHP の設定を行うための php.ini ディレクティブが 含まれます。

"変更可能" カラムは、そのディレクティブをいつどこで定義できるかを表すモードです。その意味については どこで設定を行うのか を参照ください。

設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
allow_url_fopen | "1" | INI_SYSTEM |
allow_url_include | "0" | INI_SYSTEM | PHP 7.4.0 以降は非推奨
arg_separator.input | "&" | INI_PERDIR |
arg_separator.output | "&" | INI_ALL |
assert.active | "1" | INI_ALL |
assert.bail | "0" | INI_ALL |
assert.callback | null | INI_ALL |
assert.exception | "0" | INI_ALL |
assert.quiet_eval | "0" | INI_ALL | PHP 8.0.0 以降では削除されました
assert.warning | "1" | INI_ALL |
auto_append_file | null | INI_PERDIR |
auto_detect_line_endings | "0" | INI_ALL |
auto_globals_jit | "1" | INI_PERDIR |
auto_prepend_file | null | INI_PERDIR |
bcmath.scale | "0" | INI_ALL |
browscap | null | INI_SYSTEM |
cgi.check_shebang_line | "1" | INI_SYSTEM |
cgi.discard_path | "0" | INI_SYSTEM |
cgi.fix_pathinfo | "1" | INI_SYSTEM |
cgi.force_redirect | "1" | INI_SYSTEM |
cgi.nph | "0" | INI_ALL |
cgi.redirect_status_env | null | INI_SYSTEM |
cgi.rfc2616_headers | "0" | INI_ALL |
child_terminate | "0" | INI_ALL |
cli.pager | "" | INI_ALL |
cli.prompt | "\\b \\> " | INI_ALL |
cli_server.color | "0" | INI_ALL |
com.allow_dcom | "0" | INI_SYSTEM |
com.autoregister_typelib | "0" | INI_ALL |
com.autoregister_verbose | "0" | INI_ALL |
com.autoregister_casesensitive | "1" | INI_ALL |
com.code_page | "" | INI_ALL |
com.dotnet_version | "" | INI_SYSTEM | PHP 8.0.0 以降で利用可能
com.typelib_file | "" | INI_SYSTEM |
curl.cainfo | NULL | INI_SYSTEM |
date.default_latitude | "31.7667" | INI_ALL |
date.default_longitude | "35.2333" | INI_ALL |
date.sunrise_zenith | "90.833333" | INI_ALL | PHP 8.0.0 より前のバージョンでは、デフォルト値は "90.583333" でした。
date.sunset_zenith | "90.833333" | INI_ALL | PHP 8.0.0 より前のバージョンでは、デフォルト値は "90.583333" でした。
date.timezone | "UTC" | INI_ALL | PHP 8.2 以降では、この値に無効な値や空文字列を設定すると、警告が発生します。
dba.default_handler | DBA_DEFAULT | INI_ALL |
default_charset | "UTF-8" | INI_ALL
input_encoding | "" | INI_ALL |
output_encoding | "" | INI_ALL |
internal_encoding | "" | INI_ALL |
default_mimetype | "text/html" | INI_ALL |
default_socket_timeout | "60" | INI_ALL |
disable_classes | "" | php.ini のみ |
disable_functions | "" | php.ini のみ |
display_errors | "1" | INI_ALL |
display_startup_errors | "1" | INI_ALL | PHP 8.0.0 より前のバージョンでは、デフォルト値は "0" でした。
docref_ext | "" | INI_ALL |
docref_root | "" | INI_ALL |
doc_root | null | INI_SYSTEM |
enable_dl | "1" | INI_SYSTEM | この非推奨の機能は、きっと 将来 削除 されるでしょう。
enable_post_data_reading | "On" | INI_PERDIR |
engine | "1" | INI_ALL |
error_append_string | null | INI_ALL |
error_log | null | INI_ALL |
error_log_mode | 0o644 | INI_ALL | PHP 8.2.0 以降で利用可能
error_prepend_string | null | INI_ALL |
error_reporting | null | INI_ALL |
exif.encode_unicode | "ISO-8859-15" | INI_ALL |
exif.decode_unicode_motorola | "UCS-2BE" | INI_ALL |
exif.decode_unicode_intel | "UCS-2LE" | INI_ALL |
exif.encode_jis | "" | INI_ALL |
exif.decode_jis_motorola | "JIS" | INI_ALL |
exif.decode_jis_intel | "JIS" | INI_ALL |
exit_on_timeout | "" | INI_ALL |
expect.timeout | "10" | INI_ALL |
expect.loguser | "1" | INI_ALL |
expect.logfile | "" | INI_ALL |
expect.match_max | "" | INI_ALL |
expose_php | "1" | php.ini のみ |
extension | null | php.ini のみ |
extension_dir | "/path/to/php" | INI_SYSTEM |
fastcgi.impersonate | "0" | INI_SYSTEM |
fastcgi.logging | "1" | INI_SYSTEM |
file_uploads | "1" | INI_SYSTEM |
filter.default | "unsafe_raw" | INI_PERDIR | PHP 8.1.0 以降は非推奨
filter.default_flags | NULL | INI_PERDIR |
from | "" | INI_ALL |
gd.jpeg_ignore_warning | "1" | INI_ALL |
geoip.custom_directory | "" | INI_ALL |
hard_timeout | "2" | INI_SYSTEM | PHP 7.1.0 以降で利用可能。
highlight.comment | "#FF8000" | INI_ALL |
highlight.default | "#0000BB" | INI_ALL |
highlight.html | "#000000" | INI_ALL |
highlight.keyword | "#007700" | INI_ALL |
highlight.string | "#DD0000" | INI_ALL |
html_errors | "1" | INI_ALL |
ibase.allow_persistent | "1" | INI_SYSTEM |
ibase.max_persistent | "-1" | INI_SYSTEM |
ibase.max_links | "-1" | INI_SYSTEM |
ibase.default_db | NULL | INI_SYSTEM |
ibase.default_user | NULL | INI_ALL |
ibase.default_password | NULL | INI_ALL |
ibase.default_charset | NULL | INI_ALL |
ibase.timestampformat | "%Y-%m-%d %H:%M:%S" | INI_ALL |
ibase.dateformat | "%Y-%m-%d" | INI_ALL |
ibase.timeformat | "%H:%M:%S" | INI_ALL |
ibm_db2.binmode | "1" | INI_ALL |
ibm_db2.i5_all_pconnect | "0" | INI_SYSTEM | ibm_db2 1.6.5 以降で利用可能
ibm_db2.i5_allow_commit | "0" | INI_SYSTEM | ibm_db2 1.4.9 以降で利用可能
ibm_db2.i5_blank_userid | "0" | INI_SYSTEM | ibm_db2 1.9.7 以降で利用可能
ibm_db2.i5_char_trim | "0" | INI_SYSTEM | ibm_db2 2.1.0 以降で利用可能
ibm_db2.i5_dbcs_alloc | "0" | INI_SYSTEM | ibm_db2 1.5.0 以降で利用可能
ibm_db2.i5_guard_profile | "0" | INI_SYSTEM | ibm_db2 1.9.7 以降で利用可能
ibm_db2.i5_ignore_userid | "0" | INI_SYSTEM | ibm_db2 1.8.0 以降で利用可能
ibm_db2.i5_job_sort | "0" | INI_SYSTEM | ibm_db2 1.8.4 以降で利用可能
ibm_db2.i5_log_verbose | "0" | INI_SYSTEM | ibm_db2 1.9.7 以降で利用可能
ibm_db2.i5_max_pconnect | "0" | INI_SYSTEM | ibm_db2 1.9.7 以降で利用可能
ibm_db2.i5_override_ccsid | "0" | INI_SYSTEM | ibm_db2 1.9.7 以降で利用可能
ibm_db2.i5_servermode_subsystem | NULL | INI_SYSTEM | ibm_db2 1.9.7 以降で利用可能
ibm_db2.i5_sys_naming | "0" | INI_SYSTEM | ibm_db2 1.9.7 以降で利用可能
ibm_db2.instance_name | NULL | INI_SYSTEM | ibm_db2 1.0.2 以降で利用可能
iconv.input_encoding | "" | INI_ALL | PHP 5.6.0 で非推奨となりました。
iconv.output_encoding | "" | INI_ALL | PHP 5.6.0 で非推奨となりました。
iconv.internal_encoding | "" | INI_ALL | PHP 5.6.0 で非推奨となりました。
ignore_repeated_errors | "0" | INI_ALL |
ignore_repeated_source | "0" | INI_ALL |
ignore_user_abort | "0" | INI_ALL |
implicit_flush | "0" | INI_ALL |
include_path | ".:/path/to/php/pear" | INI_ALL |
intl.default_locale |  | INI_ALL |
intl.error_level | 0 | INI_ALL |
intl.use_exceptions | 0 | INI_ALL | PECL 3.0.0a1 以降で使用可能。
last_modified | "0" | INI_ALL |
ldap.max_links | "-1" | INI_SYSTEM |
log_errors | "0" | INI_ALL |
log_errors_max_len | "1024" | INI_ALL |
mail.add_x_header | "0" | INI_PERDIR |
mail.force_extra_parameters | null | php.ini のみ |
mail.log | "" | INI_PERDIR |
max_execution_time | "30" | INI_ALL |
max_input_nesting_level | "64" | INI_PERDIR |
max_input_vars | 1000 | INI_PERDIR |
max_input_time | "-1" | INI_PERDIR |
mbstring.language | "neutral" | INI_ALL |
mbstring.detect_order | NULL | INI_ALL |
mbstring.http_input | "pass" | INI_ALL | 非推奨になりました。
mbstring.http_output | "pass" | INI_ALL | 非推奨になりました。
mbstring.internal_encoding | NULL | INI_ALL | 非推奨になりました。
mbstring.substitute_character | NULL | INI_ALL |
mbstring.func_overload | "0" | INI_SYSTEM | PHP 7.2.0 で非推奨になり、PHP 8.0.0 で削除されました。
mbstring.encoding_translation | "0" | INI_PERDIR |
mbstring.http_output_conv_mimetypes | "^(text/|application/xhtml\+xml)" | INI_ALL |
mbstring.strict_detection | "0" | INI_ALL |
mbstring.regex_retry_limit | "1000000" | INI_ALL | PHP 7.4.0 以降で利用可能です。
mbstring.regex_stack_limit | "100000" | INI_ALL | PHP 7.3.5 以降で利用可能です。
mcrypt.algorithms_dir | null | INI_ALL |
mcrypt.modes_dir | null | INI_ALL |
memcache.allow_failover | "1" | INI_ALL | memcache 2.0.2 以降で使用可能です
memcache.max_failover_attempts | "20" | INI_ALL | memcache 2.1.0 以降で使用可能です
memcache.chunk_size | "8192" | INI_ALL | memcache 2.0.2 以降で使用可能です
memcache.default_port | "11211" | INI_ALL | memcache 2.0.2 以降で使用可能です
memcache.hash_strategy | "standard" | INI_ALL | memcache 2.2.0 以降で使用可能です
memcache.hash_function | "crc32" | INI_ALL | memcache 2.2.0 以降で使用可能です
memcache.protocol | ascii | INI_ALL | memcache 3.0.0 以降で使用可能です
memcache.redundancy | 1 | INI_ALL | memcache 3.0.0 以降で使用可能です
memcache.session_redundancy | 2 | INI_ALL | memcache 3.0.0 以降で使用可能です
memcache.compress_threshold | 20000 | INI_ALL | memcache 3.0.3 以降で使用可能です
memcache.lock_timeout | 15 | INI_ALL | memcache 3.0.4 以降で使用可能です
memory_limit | "128M" | INI_ALL |
mysql.allow_local_infile | "1" | INI_SYSTEM |
mysql.allow_persistent | "1" | INI_SYSTEM |
mysql.max_persistent | "-1" | INI_SYSTEM |
mysql.max_links | "-1" | INI_SYSTEM |
mysql.trace_mode | "0" | INI_ALL |
mysql.default_port | NULL | INI_ALL |
mysql.default_socket | NULL | INI_ALL |
mysql.default_host | NULL | INI_ALL |
mysql.default_user | NULL | INI_ALL |
mysql.default_password | NULL | INI_ALL |
mysql.connect_timeout | "60" | INI_ALL |
mysqli.allow_local_infile | "0" | INI_SYSTEM | PHP 7.2.16, 7.3.3 より前のバージョンでは デフォルト値は "1" でした。
mysqli.local_infile_directory |  | INI_SYSTEM | PHP 8.1.0 以降で利用可能です。
mysqli.allow_persistent | "1" | INI_SYSTEM |
mysqli.max_persistent | "-1" | INI_SYSTEM |
mysqli.max_links | "-1" | INI_SYSTEM |
mysqli.default_port | "3306" | INI_ALL |
mysqli.default_socket | NULL | INI_ALL |
mysqli.default_host | NULL | INI_ALL |
mysqli.default_user | NULL | INI_ALL |
mysqli.default_pw | NULL | INI_ALL |
mysqli.reconnect | "0" | INI_SYSTEM | PHP 8.2.0 で削除されました。
mysqli.rollback_on_cached_plink | "0" | INI_SYSTEM |
mysqlnd.collect_statistics | "1" | INI_SYSTEM |
mysqlnd.collect_memory_statistics | "0" | INI_SYSTEM |
mysqlnd.debug | "" | INI_SYSTEM |
mysqlnd.log_mask | 0 | INI_ALL |
mysqlnd.mempool_default_size | 16000 | INI_ALL |
mysqlnd.net_read_timeout | "86400" | INI_ALL | PHP 7.2.0 より前のバージョンでは、 デフォルト値は "31536000" で、変更可能な範囲が INI_SYSTEM でした。
mysqlnd.net_cmd_buffer_size | "4096" | INI_SYSTEM |
mysqlnd.net_read_buffer_size | "32768" | INI_SYSTEM |
mysqlnd.sha256_server_public_key | "" | INI_PERDIR |
mysqlnd.trace_alloc | "" | INI_SYSTEM |
mysqlnd.fetch_data_copy | 0 | INI_ALL | PHP 8.1.0 で削除されました。
oci8.connection_class | "" | INI_ALL |
oci8.default_prefetch | "100" | INI_SYSTEM |
oci8.events | Off | INI_SYSTEM |
oci8.max_persistent | "-1" | INI_SYSTEM |
oci8.old_oci_close_semantics | Off | INI_SYSTEM | PHP 8.1.0 以降は非推奨。
oci8.persistent_timeout | "-1" | INI_SYSTEM |
oci8.ping_interval | "60" | INI_SYSTEM |
oci8.prefetch_lob_size | "0" | INI_ALL | PECL OCI8 3.2 以降で利用可能
oci8.privileged_connect | Off | INI_SYSTEM |
oci8.statement_cache_size | "20" | INI_SYSTEM |
odbc.allow_persistent | "1" | INI_SYSTEM |
odbc.check_persistent | "1" | INI_SYSTEM |
odbc.max_persistent | "-1" | INI_SYSTEM |
odbc.max_links | "-1" | INI_SYSTEM |
odbc.defaultlrl | "4096" | INI_ALL |
odbc.defaultbinmode | "1" | INI_ALL |
odbc.default_cursortype | "3" | INI_ALL |
opcache.enable | 1 | INI_ALL |
opcache.enable_cli | 0 | INI_SYSTEM | PHP 7.1.2 と 7.1.6 の間では、デフォルトは 1 でした
opcache.memory_consumption | 128 | INI_SYSTEM |
opcache.interned_strings_buffer | 8 | INI_SYSTEM |
opcache.max_accelerated_files | 10000 | INI_SYSTEM |
opcache.max_wasted_percentage | 5 | INI_SYSTEM |
opcache.use_cwd | 1 | INI_SYSTEM |
opcache.validate_timestamps | 1 | INI_ALL |
opcache.revalidate_freq | 2 | INI_ALL |
opcache.revalidate_path | 0 | INI_ALL |
opcache.save_comments | 1 | INI_SYSTEM |
opcache.fast_shutdown | 0 | INI_SYSTEM | PHP 7.2.0 で削除されました
opcache.enable_file_override | 0 | INI_SYSTEM |
opcache.optimization_level | 0x7FFEBFFF | INI_SYSTEM | PHP 7.3.0 で 0x7FFFBFFF から変更されました。
opcache.inherited_hack | 1 | INI_SYSTEM | PHP 7.3.0 で削除されました
opcache.dups_fix | 0 | INI_ALL |
opcache.blacklist_filename | "" | INI_SYSTEM |
opcache.max_file_size | 0 | INI_SYSTEM |
opcache.consistency_checks | 0 | INI_ALL | PHP 8.1.18 と PHP 8.2.5 で無効。PHP 8.3.0 で削除。
opcache.force_restart_timeout | 180 | INI_SYSTEM |
opcache.error_log | "" | INI_SYSTEM |
opcache.log_verbosity_level | 1 | INI_SYSTEM |
opcache.record_warnings | 0 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.preferred_memory_model | "" | INI_SYSTEM |
opcache.protect_memory | 0 | INI_SYSTEM |
opcache.mmap_base | null | INI_SYSTEM | Windows のみ
opcache.restrict_api | "" | INI_SYSTEM |
opcache.file_update_protection | 2 | INI_ALL |
opcache.huge_code_pages | 0 | INI_SYSTEM |
opcache.lockfile_path | "/tmp" | INI_SYSTEM |
opcache.opt_debug_level | 0 | INI_SYSTEM | PHP 7.1.0 以降で利用可能
opcache.file_cache | null | INI_SYSTEM |
opcache.file_cache_only | 0 | INI_SYSTEM |
opcache.file_cache_consistency_checks | 1 | INI_SYSTEM |
opcache.file_cache_fallback | 1 | INI_SYSTEM | Windows のみ
opcache.validate_permission | 0 | INI_SYSTEM | PHP 7.0.14 以降で利用可能
opcache.validate_root | 0 | INI_SYSTEM | PHP 7.0.14 以降で利用可能
opcache.preload | "" | INI_SYSTEM | PHP 7.4.0 以降で利用可能
opcache.preload_user | "" | INI_SYSTEM | PHP 7.4.0 以降で利用可能
opcache.cache_id | "" | INI_SYSTEM | Windows のみ。PHP 7.4.0 以降で利用可能
opcache.jit | "tracing" | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_buffer_size | 0 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_debug | 0 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_bisect_limit | 0 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_prof_threshold | 0.005 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_max_root_traces | 1024 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_max_side_traces | 128 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_max_exit_counters | 8192 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_hot_loop | 64 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_hot_func | 127 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_hot_return | 8 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_hot_side_exit | 8 | INI_SYSTEM | PHP 8.0.0 以降で利用可能
opcache.jit_blacklist_root_trace | 16 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_blacklist_side_trace | 8 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_max_loop_unrolls | 8 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_max_recursive_calls | 2 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_max_recursive_returns | 2 | INI_ALL | PHP 8.0.0 以降で利用可能
opcache.jit_max_polymorphic_calls | 2 | INI_ALL | PHP 8.0.0 以降で利用可能
open_basedir | null | INI_ALL |
output_buffering | "0" | INI_PERDIR |
output_handler | null | INI_PERDIR |
pcre.backtrack_limit | "1000000" | INI_ALL |
pcre.recursion_limit | "100000" | INI_ALL |
pcre.jit | "1" | INI_ALL |
pdo.dsn.* |  | php.ini のみ |
pdo_odbc.connection_pooling | "strict" | INI_ALL |
pdo_odbc.db2_instance_name | NULL | INI_SYSTEM | この非推奨の機能は、きっと 将来 削除 されるでしょう。
pgsql.allow_persistent | "1" | INI_SYSTEM |
pgsql.max_persistent | "-1" | INI_SYSTEM |
pgsql.max_links | "-1" | INI_SYSTEM |
pgsql.auto_reset_persistent | "0" | INI_SYSTEM |
pgsql.ignore_notice | "0" | INI_ALL |
pgsql.log_notice | "0" | INI_ALL |
phar.readonly | "1" | INI_ALL |
phar.require_hash | "1" | INI_ALL |
phar.cache_list | "" | INI_SYSTEM |
post_max_size | "8M" | INI_PERDIR |
precision | "14" | INI_ALL |
realpath_cache_size | "16K" | INI_SYSTEM |
realpath_cache_ttl | "120" | INI_SYSTEM |
register_argc_argv | "1" | INI_PERDIR |
report_memleaks | "1" | INI_ALL |
report_zend_debug | "1" | INI_ALL |
request_order | "" | INI_PERDIR |
runkit.superglobal | "" | INI_PERDIR |
runkit.internal_override | "0" | INI_SYSTEM |
sendmail_from | null | INI_ALL |
sendmail_path | "/usr/sbin/sendmail -t -i" | INI_SYSTEM |
serialize_precision | "-1" | INI_ALL | PHP 7.1.0 より前のバージョンでは、デフォルト値は 17 でした。
session.save_path | "" | INI_ALL |
session.name | "PHPSESSID" | INI_ALL |
session.save_handler | "files" | INI_ALL |
session.auto_start | "0" | INI_PERDIR |
session.gc_probability | "1" | INI_ALL |
session.gc_divisor | "100" | INI_ALL |
session.gc_maxlifetime | "1440" | INI_ALL |
session.serialize_handler | "php" | INI_ALL |
session.cookie_lifetime | "0" | INI_ALL |
session.cookie_path | "/" | INI_ALL |
session.cookie_domain | "" | INI_ALL |
session.cookie_secure | "0" | INI_ALL | PHP 7.2.0 より前のバージョンでは、デフォルト値は "" でした。
session.cookie_httponly | "0" | INI_ALL | PHP 7.2.0 より前のバージョンでは、デフォルト値は "" でした。""
session.cookie_samesite | "" | INI_ALL | PHP 7.3.0 から利用可能
session.use_strict_mode | "0" | INI_ALL |
session.use_cookies | "1" | INI_ALL |
session.use_only_cookies | "1" | INI_ALL |
session.referer_check | "" | INI_ALL |
session.cache_limiter | "nocache" | INI_ALL |
session.cache_expire | "180" | INI_ALL |
session.use_trans_sid | "0" | INI_ALL |
session.trans_sid_tags | "a=href,area=href,frame=src,form=" | INI_ALL | PHP 7.1.0 から利用可能
session.trans_sid_hosts | $_SERVER['HTTP_HOST'] | INI_ALL | PHP 7.1.0 から利用可能
session.sid_length | "32" | INI_ALL | PHP 7.1.0 から利用可能
session.sid_bits_per_character | "4" | INI_ALL | PHP 7.1.0 から利用可能
session.upload_progress.enabled | "1" | INI_PERDIR |
session.upload_progress.cleanup | "1" | INI_PERDIR |
session.upload_progress.prefix | "upload_progress_" | INI_PERDIR |
session.upload_progress.name | "PHP_SESSION_UPLOAD_PROGRESS" | INI_PERDIR |
session.upload_progress.freq | "1%" | INI_PERDIR |
session.upload_progress.min_freq | "1" | INI_PERDIR |
session.lazy_write | "1" | INI_ALL |
session.hash_function | "0" | INI_ALL | PHP 7.1.0 で削除されました。
session.hash_bits_per_character | "4" | INI_ALL | PHP 7.1.0 で削除されました。
session.entropy_file | "" | INI_ALL | PHP 7.1.0 で削除されました。
session.entropy_length | "0" | INI_ALL | PHP 7.1.0 で削除されました。
short_open_tag | "1" | INI_PERDIR |
SMTP | "localhost" | INI_ALL |
smtp_port | "25" | INI_ALL |
soap.wsdl_cache_enabled | 1 | INI_ALL |
soap.wsdl_cache_dir | /tmp | INI_ALL |
soap.wsdl_cache_ttl | 86400 | INI_ALL |
soap.wsdl_cache | 1 | INI_ALL |
soap.wsdl_cache_limit | 5 | INI_ALL |
sql.safe_mode | "0" | INI_SYSTEM | PHP 7.2.0 で削除
sqlite3.extension_dir | "" | INI_SYSTEM |
sqlite3.defensive | 1 | INI_USER | PHP 7.2.17 ,7.3.4 以降、かつ libsqlite ? 3.26.0 でビルドした場合に利用可能 PHP 8.2.0 より前のバージョンでは、この値は INI_SYSTEM のモードでのみ変更可能でした。
syslog.facility | "LOG_USER" | INI_SYSTEM | PHP 7.3.0 以降で利用可能
syslog.filter | "no-ctrl" | INI_ALL | PHP 7.3.0 以降で利用可能
syslog.ident | "php" | INI_SYSTEM | PHP 7.3.0 以降で利用可能
sys_temp_dir | "" | INI_SYSTEM |
sysvshm.init_mem | 10000 | INI_SYSTEM |
tidy.default_config | "" | INI_SYSTEM |
tidy.clean_output | "0" | INI_USER |
track_errors | "0" | INI_ALL | PHP 7.2.0 以降は非推奨になり、PHP 8.0.0 で 削除されました。
unserialize_callback_func | null | INI_ALL |
unserialize_max_depth | "4096" | INI_ALL | PHP 7.4.0 以降で利用可能。
uploadprogress.file.filename_template | "/tmp/upt_%s.txt" | INI_ALL |
upload_max_filesize | "2M" | INI_PERDIR |
max_file_uploads | 20 | INI_SYSTEM |
upload_tmp_dir | null | INI_SYSTEM |
url_rewriter.hosts | "" | INI_ALL | PHP 7.1.0 以降で利用可能
url_rewriter.tags | "form=" | INI_ALL | PHP 7.1.0 より前のバージョンでは、デフォルト値は "a=href,area=href,frame=src,form=,fieldset=" でした。
user_agent | null | INI_ALL |
user_dir | null | INI_SYSTEM |
user_ini.cache_ttl | "300" | INI_SYSTEM |
user_ini.filename | ".user.ini" | INI_SYSTEM |
uopz.disable | "0" | INI_SYSTEM | uopz 5.0.2 以降で利用可能
uopz.exit | "0" | INI_SYSTEM | uopz 6.0.1 以降で利用可能
uopz.overloads | "1" | INI_SYSTEM | uopz 2.0.2 以降で利用可能。uopz 5.0.0 以降は削除されています
variables_order | "EGPCS" | INI_PERDIR |
windows.show_crt_warning | "0" | INI_ALL |
xbithack | "0" | INI_ALL |
xmlrpc_errors | "0" | INI_SYSTEM |
xmlrpc_error_number | "0" | INI_ALL |
yaz.keepalive | "120" | INI_ALL |
yaz.log_mask | null | INI_ALL | yaz 1.0.3 以降で利用可能。
zend.assertions | "1" | INI_ALL |
zend.detect_unicode | "1" | INI_ALL |
zend.enable_gc | "1" | INI_ALL |
zend.multibyte | "0" | INI_PERDIR |
zend.script_encoding | null | INI_ALL |
zend.signal_check | "0" | INI_SYSTEM |
zend_extension | null | php.ini のみ |
zlib.output_compression | "0" | INI_ALL |
zlib.output_compression_level | "-1" | INI_ALL |
zlib.output_handler | "" | INI_ALL |

User Contributed Notes

There are no user contributed notes for this page.


php.ini のセクション一覧

この一覧では、ホスト単位やパス単位で PHP の設定を行いたい場合に設定する php.ini のセクションをまとめます。これらのセクションはオプションです。

これらのセクションは、PHP に直接影響を及ぼすわけではありません。 さまざまな php.ini ディレクティブをひとまとめにして、 それを特定のホストや特定のパスにだけ適用する場合に使用します。

これらのセクションは CGI/FastCGI モードでのみ使用します。 extension および zend_extension ディレクティブは設定できません。

セクション
名前 | 変更可能 | 変更履歴
[HOST=] | INI_SYSTEM |
[PATH=] | INI_SYSTEM |

以下に設定ディレクティブに関する 簡単な説明を示します。

[HOST=<host>]

このセクションで指定した php.ini ディレクティブは、 指定した名前のホスト上でのみ有効となります。

例1 dev. ドメインではエラーを画面に表示させるようにする例

[HOST=dev.site.com]
error_reporting = E_ALL
display_errors = On

[PATH=<path>]

このセクションで指定した php.ini ディレクティブは、 指定したパスで実行したスクリプトでのみ有効となります。

例2 保護エリア内でのスクリプトのセキュリティ確保

[PATH=/home/site/public/secure]
auto_prepend_file=security.php

User Contributed Notes

dasloch at absatzen dot de 12-Feb-2020 12:47
Note that you cannot usefully set syslog.* in [PATH=] (and probably [HOST=]) sections, since the syslogger is initialized only once per php-fpm worker process, and not per request.
robinhook at mail dot com 22-Apr-2018 07:14
Sorry for the note. I've read some bad tutorials.
The correct syntax is : directive = 'value'
not a thing like : php_value[directive] = "somevalue"
robinhook at mail dot com 22-Apr-2018 06:59
this HOST and PATH sections doesn't seems to work in php.ini under apache 2.4 with php-fpm 7.1.16 for directive php_value or php_admin_value open_basedir or include_path.
phpinfo() says "none" in master and local values.
z dot himdi at bita dot nl 04-Aug-2011 07:53
On Windows IIS 7 server I noticed that [PATH=] was not listened to. [HOST=] however worked.
leo 06-May-2011 03:21
Just developed the probably first php.ini hack to add commands which will only be parsed before PHP 5.3 when using mod_php.

<?php

# Disable eAccelerator by default
eaccelerator.enable = 0

# Now, to prevent incompatibilities with Zend Optimizer+, we
# want to enable eAccelerator only in PHP 5.2 or lower.
[HOST=*]
eaccelerator.enable = 1

?>

What is happening here? In PHP 5.3, php.ini sections to set up PHP on a per host basis have been introduced:

http://www.php.net/manual/en/ini.sections.php

These sections only work in CGI/FastCGI mode, however there still seems to be a difference in how the php.ini file is parsed in PHP 5.2 and PHP 5.3 when using mod_php: PHP 5.3 ignores everything below the line [HOST=*], whereas PHP 5.2 does not.

In the above example, PHP 5.3 only reads "eaccelerator.enable = 0" and then stops at the invalid command [HOST=*]. However, PHP 5.2 seems to ignore the invalid command and parses the whole configuration file, ending up with "eaccelerator.enable = 1".
crash at lubyte dot de 06-Sep-2010 05:45
If you have a system which uses separated PHP inis for loading extensions (Debian, Fedora and most other distributions do so), [PATH=] or [HOST=] will prevent loading extensions defined in those ini files (extension= and zend_extension=).

I had some headache, when I added a hosts.ini to /etc/php5/cgi/conf.d (Debians default), where I wanted to define some defaults for a host name. The manual says extension= and zend_extension= aren't allowed in [HOST=] and [PATH=] (see above). I figured out that you can easily fix that with adding [PHP] after your definitions.

For example hosts.ini:
[HOST=dev.example.com]
display_errors = on

[PHP]

this will change the section back to [PHP] where extension= and zend_extension= is allowed.
robert dot johnson at icap dot com 12-Apr-2010 10:26
Adding PATH= applies only to the named path and does not include sub-directories, you have to add a PATH= value for each sub-directory.

Also some settings have no effect even though phpinfo recognises and displays the per-folder value as the 'local' value, and the default as the 'master' value.

'fastcgi.impersonate' always uses the master setting.
public at grik dot net 24-Sep-2009 03:00
In [HOST=...] one should use only the 1st server name from the list of server names.

I.E. if you have
server_name example.com, example2.com;
and will use www.example.com in a browser,
use [HOST=example.com] in php.ini for both addresses.

PHP looks not at the HOST request header (as I expected), but at the SERVER_NAME parameter (which by default is the 1st from the list of names, no matter what the HOST is).


コア php.ini ディレクティブに関する説明

このリストには、PHPを設定する際に使用可能なコア php.ini ディレクティブが 含まれています。拡張モジュールにより処理されるディレクティブは、それぞれの 拡張モジュールのドキュメントページにリストと詳細が記述されています。 例えば、セッション用ディレクティブに関する情報は、 セッションのページにあります。

注意:

これらのデフォルト値は、php.ini が読み込まれなかったときに使われるものです。 運用時と開発時では php.ini の値が変わることもあるでしょう。

言語オプション

言語およびその他の設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
short_open_tag | "1" | INI_PERDIR |
precision | "14" | INI_ALL |
serialize_precision | "-1" | INI_ALL | PHP 7.1.0 より前は、デフォルト値は 17 でした。
disable_functions | "" | INI_SYSTEM のみ |
disable_classes | "" | php.ini のみ |
exit_on_timeout | "" | INI_ALL |
expose_php | "1" | php.ini のみ |
hard_timeout | "2" | INI_SYSTEM | PHP 7.1.0 以降で利用可能。
zend.exception_ignore_args | "0" | INI_ALL | PHP 7.4.0 以降で利用可能。
zend.multibyte | "0" | INI_ALL |
zend.script_encoding | NULL | INI_ALL |
zend.detect-unicode | NULL | INI_ALL |
zend.signal_check | "0" | INI_SYSTEM |
zend.assertions | "1" | INI_ALL (制限あり) |
zend.exception_string_param_max_len | "15" | INI_ALL | PHP 8.0.0 以降で利用可能。

以下に設定ディレクティブに関する 簡単な説明を示します。

short_open_tag bool

PHP タグの短縮型 (<? ?>) を使用 可能にするかどうかを設定します。PHPをXMLと組み合わせて用いる 場合は、<?xml ?>をファイル中で用 いるためにこのオプションをオフにする必要があります。オンにし た場合にPHPでXMLを出力するには、例えば、次のようにします。 <?php echo '<?xml version="1.0"?>'; ?> これをオフにした場合、長い方の形式のタグ (<?php ?>)を使用する必要があります。

注意:

これは、<?= 記法に影響を与えません。常に有効となります。

precision int
浮動小数点数に関して表示される最大桁数を指定します。 -1 は、数値を丸める際に拡張アルゴリズムを用いることを意味します。
serialize_precision int
浮動小数点数をシリアライズするときに格納する桁数を指定します。 -1 は、数値を丸める際に拡張アルゴリズムを用いることを意味します。
expose_php bool

PHP がサーバーにインストールされていることを全世界に晒し、PHP のバージョンも HTTP ヘッダに含めます (X-Powered-By: PHP/5.3.7 など)。

disable_functions string
このディレクティブを使うと、特定の関数を無効にすることができます。 関数名の一覧をカンマ区切りで指定します。 PHP 8.0.0 以降では、関数を無効にすると定義を削除しますが、 ユーザーランドで再定義できます。 PHP 8.0.0 より前のバージョンでは、 関数を無効にすると、その関数は呼び出せませんでした。 このディレクティブを使って無効にできるのは、 内部関数 だけです。 ユーザー定義関数 は影響を受けません。 このディレクティブは php.ini で設定しなければなりません。 httpd.conf では設定できません。
disable_classes string

このディレクティブを使うと、特定のクラスを無効にすることができます。 クラス名の一覧をカンマ区切りで指定します。 クラスを無効にすると、クラスのインスタンス化ができなくなります。

このディレクティブを使って無効にできるのは、内部クラスのみです。 ユーザーが定義したクラスは影響を受けません。

このディレクティブは php.ini で設定しなければなりません。 httpd.conf では設定できません。
zend.assertions int
1 にすると、アサーションのコードを生成して実行します (開発モード)。 0 にすると、アサーションのコードは生成しますが実行時にはスキップします (実行しません)。 -1 にすると、アサーションのコードを生成せず、アサーションのコストがゼロになります (実運用モード)。

注意:

実運用モードで開始したプロセスでは、zend.assertions を実行時に変更することはできません。アサーションのコードが生成されていないからです。

開発モードで開始したプロセスでは、zend.assertions を実行時に -1 に変更することはできません。

zend.exception_string_param_max_len int
文字列化されたスタックトレース中の、関数の引数の長さの最大値。 "0" と "1000000" の間でなければいけません。
hard_timeout int

max_execution_time で設定されたタイムアウトに達すると、 PHPランタイムはリソースをgracefulに開放します。 リソースを開放する処理が何らかの原因で止まってしまった場合、 hard_timeout のカウントがここで設定した秒数行われます。 hard_timeout のタイムアウトに達すると、 PHP はgracefulにリソースを開放せずに終了します。 この値を 0 に設定すると、この機能は無効になります。

PHP が hard timeout で停止すると、 以下のようなメッセージが残るでしょう。

Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0

zend.exception_ignore_args bool

例外経由で生成されたスタックトレースから、引数を除外します。

zend.multibyte bool

マルチバイトエンコーディングで書かれたソースファイルをパースできるようにします。 zend.multibyte を有効にしないと、マルチバイト文字データの中に特殊文字を含むエンコーディング (SJIS や BIG5 など) を使えません。 ISO-8859-1 互換のエンコーディングである UTF-8 や EUC などを使う場合は、このオプションは不要です。

zend.multibyte を有効にしたい場合は、mbstring 拡張モジュールを有効にしなければいけません。

zend.script_encoding string

この値を使うのは、 declare(encoding=...) ディレクティブがスクリプトの先頭に存在しない場合です。 ISO-8859-1 非互換のエンコーディングを使う場合は、 zend.multibyte と zend.script_encoding を両方とも指定する必要があります。

リテラル文字列は、zend.script_encoding から mbstring.internal_encoding に変換されます。 mb_convert_encoding() が呼ばれたときと同じです。

zend.detect_unicode bool

BOM (Byte Order Mark) を調べ、 ファイルが有効なマルチバイト文字を含むかどうかを確認します。 この検出は、 __halt_compiler() の処理より前に行われます。 Zend Multibyte モードでのみ利用可能です。

zend.signal_check bool

置き換えられたシグナルハンドラを、シャットダウン時にチェックします。

exit_on_timeout bool

これは Apache1 の mod_php だけで使える項目で、PHP の実行タイムアウトが発生したときに Apache の子プロセスを強制終了させます。このタイムアウトがおこると Apache1 の内部で longjmp() がコールされ、その結果としていくつかの拡張モジュールが一貫性を欠く状態になってしまいます。 プロセスを強制終了させることで、未処理のロックやメモリの後始末も行います。

リソース制限

リソース制限
名前 | デフォルト | 変更可能 | 変更履歴
memory_limit | "128M" | INI_ALL |

以下に設定ディレクティブに関する 簡単な説明を示します。

memory_limit int

スクリプトが確保できる最大メモリをバイト数で指定します。この命令は、 正しく書かれていないスクリプトがサーバーのメモリを食いつぶすことを防止するのに役立ちます。 もし、使用可能メモリに制限を設けたくない場合は、 ここに -1 を指定してください。

intを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。

max_execution_time も参照ください。

パフォーマンスチューニング

パフォーマンスチューニング
名前 | デフォルト | 変更可能 | 変更履歴
realpath_cache_size | "4M" | INI_SYSTEM | PHP 7.0.16 および 7.1.2 より前のバージョンでは、 デフォルト値は "16K" でした。
realpath_cache_ttl | "120" | INI_SYSTEM |

注意:

open_basedir を使用すると、 realpath キャッシュが disable にされます。

以下に設定ディレクティブに関する 簡単な説明を示します。

realpath_cache_size int

PHP が使用する realpath キャッシュの大きさを設定します。 PHP で大量にファイルをオープンする際に、 この値を大きくすることによってファイル操作のパフォーマンスを 向上させます。

このサイズが表すのは、格納するパス文字列の総バイト数と、 キャッシュエントリに関連づけるデータのサイズを足したものです。 つまり、長いパスをキャッシュに格納するには、キャッシュのサイズを大きくしなければいけません。 この値を使って、最大何件のパスをキャッシュするのかを制御することはできません。

キャッシュエントリのデータに必要なサイズは、システムによって変わります。

realpath_cache_ttl int

与えられたファイルやディレクトリについての realpath 情報キャッシュの有効期限を (秒単位で) 設定します。 ファイルを変更することがほとんどない場合は、 この値を大きくすることを検討してください。

データ処理

データ処理設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
arg_separator.output | "&" | INI_ALL |
arg_separator.input | "&" | INI_SYSTEM|INI_PERDIR |
variables_order | "EGPCS" | INI_PERDIR |
request_order | "" | INI_PERDIR |
auto_globals_jit | "1" | INI_PERDIR |
register_argc_argv | "1" | INI_PERDIR |
enable_post_data_reading | "1" | INI_PERDIR |
post_max_size | "8M" | INI_PERDIR |
auto_prepend_file | "" | INI_PERDIR |
auto_append_file | "" | INI_PERDIR |
default_mimetype | "text/html" | INI_ALL |
default_charset | "UTF-8" | INI_ALL |
input_encoding | "" | INI_ALL |
output_encoding | "" | INI_ALL |
internal_encoding | "" | INI_ALL |

以下に設定ディレクティブに関する 簡単な説明を示します。

arg_separator.output string

PHPがURLを生成する際にURL引数を区分するために使用されるセパレータ。

arg_separator.input string

入力されたURLを変数にパースする際にPHPが使用するセパレータのリスト。

注意:

このディレクティブで指定した全ての文字は、 セパレータとして認識されます!

variables_order string

EGPCS (Environment (環境変数)、 Get、Post、 Cookie (クッキー)、そして Server) 変数のパースの順番を設定します。例えば variables_order を "SP" に設定すると、PHP は スーパーグローバル $_SERVER および $_POST を作成しますが、 $_ENV、$_GET および $_COOKIE は作成しません。"" に設定すると、一切 スーパーグローバル を設定しません。

警告

CGI および FastCGI SAPI の両方で、 $_SERVER にも環境変数の値が格納されます。 つまり、S を指定すると、 ES と指定したのと同じ意味になります。 これは、E が他のどこかで指定されていたとしても同じです。

注意:

$_REQUEST の内容や順序も、このディレクティブの影響を受けます。

request_order string

このディレクティブは、PHP が GET 変数や POST 変数そしてクッキー変数を _REQUEST 配列に登録する際の順序を表します。 登録は左から右の順に行い、後から登録した値が古い値を上書きします。

このディレクティブが設定されていない場合は、variables_order を使用して $_REQUEST を設定します。

デフォルトの配布状態の php.ini ファイルには、クッキーの 'C' が含まれていないことに注意しましょう。 セキュリティを考慮したためです。

auto_globals_jit bool

有効にした場合、SERVER、REQUEST および ENV 変数はスクリプトの開始時ではなく、 最初に使用された時 (Just In Time) に作成されるようになります。 これらの変数がスクリプトの中で使用されない場合、 このディレクティブを使用することで性能が向上します。

警告

SERVER、REQUEST および ENV 変数の利用チェックはコンパイル時に行われます。 したがって、たとえば 可変変数 で使用した場合は初期化を行いません。

register_argc_argv bool
PHPが変数argvとargcを宣言するかどうかを指定します (これらにはGETの情報が格納されます)。 コマンドライン も参照ください。
enable_post_data_reading bool
このオプションを無効にすると、$_POST や $_FILES に値が入らなくなります。 この場合、投稿されたデータを読むには、ストリームラッパー php://input を使う以外の方法はなくなります。 これは、リクエストをプロキシしたり POST データを処理する際のメモリ消費量を抑えたりする際に有用です。
post_max_size int
POSTデータに許可される最大サイズを設定します。この設定は、ファ イルアップロードにも影響します。大きなファイルをアップロード するには、この値を upload_max_filesize より大きく設定する必要があります。 一般的に memory_limit は、 post_max_sizeよりも大きく する必要があります。 intを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。 POSTデータの大きさが、post_max_sizeより大きい場合、 $_POST と $_FILES スーパーグローバル は空になります。この事象は、いくつかの方法で検出することができます。 例えば、$_GET 変数をデータを <form action="edit.php?processed=1">のように 処理するスクリプトに渡し、 $_GET['processed'] が設定されているかどうかを 確認する方法があります。

注意:

PHP では、バイト値を表すショートカット K (kilo)、M (mega) および G (giga) を使用することができます。 これらを使用した場合、PHP が規約にしたがって自動的に値を判断します。 32 ビット符号付き整数の最大値を上回る値を指定しないように注意しましょう (32 ビットシステムを使用している場合)。 そのようなことをすると、スクリプトの実行が失敗します。

post_max_size の変更履歴
バージョン | 説明
5.3.4 | コンテンツタイプが application/x-www-form-urlencoded であったり、あるいは PHP に登録されていないものであった場合は、 post_max_size = 0 にしても上限を無効にできなくなりました。
5.3.2 , 5.2.12 | post_max_size を 0 にすることで、サイズを無制限にできるようになりました。

auto_prepend_file string

メインファイルの前に自動的に付加されるファイルの名前を指定します。 このファイルは、require 関数のコール時と同様に読み込まれます。 このため、include_path が使用されます。

特別な値 none を指 定すると、ファイルを前に追加する機能は無効となります。

auto_append_file string

メインファイルの後に自動的に追加されるファイルの名前を指定します。 このファイルは、require 関数のコール時と同様に読み込まれます。 このため、include_path が使用されます。

none を値として 指定するとこの自動付加機能はオフとなります。

注意: スクリプトが exit() で終了する場合、 この自動付加機能は使用されません 。

default_mimetype string

デフォルトでは、PHP はメディアタイプを Content-Type ヘッダで出力します。 これを無効にするには、ここに空文字列を設定しましょう。

PHP のデフォルトのメディアタイプは text/html です。

default_charset string

"UTF-8" がデフォルトの値です。 htmlentities() や html_entity_decode() そして htmlspecialchars() で encoding パラメータを省略した場合は、このデフォルト値を利用します。 また、default_charset の値は、 iconv 関数で iconv.input_encoding、 iconv.output_encoding、 iconv.internal_encoding が未設定の場合や、 mbstring 関数で mbstring.http_input mbstring.http_output mbstring.internal_encoding が未設定の場合のデフォルトとしても用いられます。

すべてのバージョンの PHP は、PHP から送信する Content-Type ヘッダのデフォルト値としてこれを使います。 ただし、header() で上書きされている場合は別です。

default_charset に空文字列を指定することは、おすすめしません。

input_encoding string

この設定は、mbstring や iconv などのマルチバイトモジュールが使うものです。デフォルトは空文字列です。

output_encoding string

この設定は、mbstring や iconv などのマルチバイトモジュールが使うものです。デフォルトは空文字列です。

internal_encoding string

この設定は、mbstring や iconv などのマルチバイトモジュールが使うものです。デフォルトは空文字列です。 空文字列を指定した場合は、 default_charset を利用します。

パスおよびディレクトリ

パスおよびディレクトリ設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
include_path | ".;/path/to/php/pear" | INI_ALL |
open_basedir | NULL | INI_ALL |
doc_root | NULL | INI_SYSTEM |
user_dir | NULL | INI_SYSTEM |
user_ini.cache_ttl | "300" | INI_SYSTEM |
user_ini.filename | ".user.ini" | INI_SYSTEM |
extension_dir | "/path/to/php" | INI_SYSTEM |
extension | NULL | php.ini のみ |
zend_extension | NULL | php.ini のみ |
cgi.check_shebang_line | "1" | INI_SYSTEM |
cgi.discard_path | "0" | INI_SYSTEM |
cgi.fix_pathinfo | "1" | INI_SYSTEM |
cgi.force_redirect | "1" | INI_SYSTEM |
cgi.nph | "0" | INI_SYSTEM |
cgi.redirect_status_env | NULL | INI_SYSTEM |
cgi.rfc2616_headers | "0" | INI_ALL |
fastcgi.impersonate | "0" | INI_SYSTEM |
fastcgi.logging | "1" | INI_SYSTEM |

以下に設定ディレクティブに関する 簡単な説明を示します。

include_path string

require、include、 fopen()、file()、 readfile() および file_get_contents() 関数がファイルを 探すディレクトリのリストを指定します。フォーマットは、システ ムの環境変数 PATHと同じです。つまり、UNIXでは コロンで、Windowsではセミコロンで区切ったディレクトリのリスト で指定します。

PHP は、インクルードするファイルを探す際に インクルードパスの各エントリを個別に調べます。 まず最初のパスを調べ、見つからなければ次のパスを調べ、...... というように、ファイルが見つかるか E_WARNING あるいは E_ERROR が発生するまで続けます。インクルードパスを実行時に変更したり設定したりするには set_include_path() を使用します。

例1 Unix include_path

include_path=".:/php/includes"

例2 Windows include_path

include_path=".;c:\php\includes"

インクルードパスに . (カレントディレクトリ) を指定すると、相対パス指定によるインクルードができるようになります。 しかし、インクルードのたびに毎回 PHP にカレントディレクトリをチェックさせるよりは、 明示的に include './file' を指定したほうが効率的です。

注意:

ENV 変数は .ini ファイルの中でもアクセスできます。 たとえば、ホームディレクトリを参照するときに ${LOGIN} や ${USER} が使えます。

環境変数はサーバー API の種類によって異なるので、この環境も異なることがあります。

例3 Unix include_path で環境変数 ${USER} を使う例

include_path = ".:${USER}/pear/php"

open_basedir string

PHP からアクセスできるファイルを、指定したディレクトリツリーに限定します。 ファイル自身も含みます。

スクリプトから include や fopen() などでファイルシステムにアクセスしようとしたときに、そのファイルの場所をチェックします。 ファイルが指定したディレクトリツリーの外にある場合は、PHP はそのファイルへのアクセスを拒否します。 シンボリックリンクの解決も行うので、 シンボリックリンクでこの制限を回避することはできません。 存在しないファイルへのシンボリックリンクは解決できないので、 ファイル名を open_basedir と比較します。

open_basedir は、ファイルシステム関数以外の挙動にも影響を及ぼします。 たとえば MySQL の設定で mysqlnd ドライバーを使うようにしている場合に、 LOAD DATA INFILE は open_basedir の影響を受けます。 PHP の拡張モジュールの多くが、open_basedir をこのように利用しています。

特別な値 . は、 スクリプトの作業ディレクトリを表します。これをベースディレクトリとすることもできますが、 少し危険です。スクリプトの作業ディレクトリは chdir() で容易に変更できるからです。

httpd.conf で、(たとえばバーチャルホスト単位で) open_basedir を無効にすることができます。 その他の設定ディレクティブの場合と 同様に "php_admin_value open_basedir none" のようにします。

Windows では、ディレクトリの区切りはセミコロンとなります。 その他のシステムでは、コロンで区切ります。Apache モジュールでは、 親ディレクトリからの open_basedir パスを自動的に継承します。

open_basedir で指定する制約は、 ディレクトリ名となります。プレフィックスではありません。

デフォルトでは、すべてのファイルを開くことができます。

注意:

open_basedir の設定を実行時に厳しくすることができます。 これは、open_basedir が php.ini で /www/ と設定されているときに、スクリプト内で ini_set() を使って設定を厳しくして /www/tmp/ のようにできるということです。 複数のディレクトリを指定するときには、定数 PATH_SEPARATOR を使えば OS に依存しない記述ができます。

注意:

open_basedir を使用すると、realpath_cache_size　は 0 に設定され、結果として realpath キャッシュは disable にされます。

警告

open_basedir は、追加のセキュリティ機構でしかありません。 つまり、広範囲に適用できるものでは決してないため、 セキュリティを高める必要がある際にそれだけに依存してはいけません。

doc_root string

サーバーにおけるPHPの"ルートディレクトリ"です。この値は空で無 い場合のみ使用されます。 PHPがFORCE_REDIRECTを指定してコンパイルされていない場合、 (IIS以外の)WebサーバーのもとでCGIとしてPHPを実行する際には、 doc_rootを指定するべきです。 他の方法としては、後述の cgi.force_redirect 設定の使用があります。

user_ini.cache_ttl int

user_ini.filename string

user_dir string

PHPファイル用にユーザーのホームディレクトリ として使用する基本ディレクトリの名前。例えば、 public_html となります。

extension_dir string

動的にロード可能な拡張モジュールを置くディレクトリを 指定します。 絶対パスを指定することを推奨します。 enable_dl と dl() も参照ください。

extension string

PHP の開始時に、どの動的ロード可能な拡張モジュールをロードするかを指定します。

zend_extension string

PHP の起動時に読み込む動的読み込み可能な Zend 拡張モジュール (たとえば XDebug) の名前。

cgi.check_shebang_line bool

CGI 版の PHP が、実行するスクリプトの先頭にある #! から始まる行 (shebang) をチェックするかどうかを指定します。 同じスクリプトをスタンドアロンと PHP CGI 経由の両方で使用したい場合などに、 この行が必要になるでしょう。このディレクティブを on にしておくと、 CGI 版の PHP はこの行の内容を読み飛ばすようになります。

cgi.discard_path bool

これを有効にすると、PHP CGI のバイナリを web ルートのツリーの外部に配置できるようになります。 これで、.htaccess のセキュリティをくぐり抜けてアクセスされる心配がなくなります。

cgi.fix_pathinfo bool

本来の PATH_INFO/PATH_TRANSLATED サポートをCGIで提供します。 PHPの以前の動作は、 SCRIPT_FILENAMEにPATH_TRANSLATEDを設定するというもので、 PATH_INFOの定義を理解していませんんでした。 PATH_INFOに関する詳細については、CGIの仕様を参照ください。 このオプションを1にすることにより、 PHP CGIはこのパスを仕様にあうように修正します。 ゼロとすると、 PHPは以前と同様に動作します。これは、デフォルトでオンになっています。 PATH_TRANSLATEDではなく、SCRIPT_FILENAMEを使用するようにスクリプト を修正する必要があります。

cgi.force_redirect bool

cgi.force_redirect は、ほとんどのWebサーバーのもとで CGI として PHP を実行する際のセキュリティを確保するために必要です。 未定義のままの場合、PHPはデフォルトでこれを on にします。 これを off にする時は、自己責任 の下に 行なってください。

注意:

Windowsユーザー: IIS を使う場合は、このオプションは 必ず off にしなければなりません。 OmniHTTPD や Xitami の場合も同様です。

cgi.nph bool

cgi.nph を有効にすると、すべてのリクエストに対して cgi がステータスコード 200 を返すように強制します。

cgi.redirect_status_env string

cgi.force_redirect を on にし、Apache または Netscape (iPlanet) Webサーバーのもとで実行していない場合、 実行を継続して良いかどうかをPHPが判断するために 環境変数の名前を設定する必要があるかもしれません。

注意:

この変数を設定することにより、セキュリティ上の問題を発生する 場合があります。行うことのリスクをまず把握してください。

cgi.rfc2616_headers int

PHP に、HTTP レスポンスを返す際に、どの形式のヘッダーを使うか 指示します。0 にセットした場合は、Apache やその他の web サーバーで サポートされている » RFC 3875 Status: ヘッダーを送信します。このオプションの値を 1 にセットした場合は、PHP は » RFC 2616 の仕様に適合した形式のヘッダーを送信します。

このオプションを有効にして、かつ PHP を CGI 環境 (PHP-FPM など) で動かしている場合は、 標準の RFC 2616 形式の HTTP ステータスレスポンスヘッダーを使ってはいけません。そのかわりに RFC 3875 形式にする必要があります。つまり、 header("HTTP/1.0 404 Not found"); ではなく header("Status: 404 Not Found"); にしなければいけないということです。

よくわからないときは、この値は 0 のままにしておきましょう。

fastcgi.impersonate string

IIS (または WINNT ベースの OS) のもとでの FastCGI は、 クライアントをコールする際にセキュリティトークンを 匿名化する機能をサポートしています。 これにより、IIS がリクエストを処理するセキュリティコンテキストを 定義できるようになります。Apacheのもとで実行される mod_fastcgi は現在 (2002/03/17) この機能をサポートしていません。 IIS のもとで実行するには、1 に設定してください。 デフォルトは 0 です。

fastcgi.logging bool

FastCGI 使用中の SAPI ロギングを有効にします。 デフォルトはロギングが有効となっています。

ファイルアップロード

ファイルアップロード設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
file_uploads | "1" | INI_SYSTEM |
upload_tmp_dir | NULL | INI_SYSTEM |
max_input_nesting_level | 64 | INI_PERDIR |
max_input_vars | 1000 | INI_PERDIR |
upload_max_filesize | "2M" | INI_PERDIR |
max_file_uploads | 20 | INI_PERDIR |

以下に設定ディレクティブに関する 簡単な説明を示します。

file_uploads bool

HTTP ファイルアップロード を有効とするかどうか。 upload_max_filesize, upload_tmp_dir, post_max_size ディレクティブも参照ください。

upload_tmp_dir string

ファイルアップロード時にファイル保存に用いるテンポラリディレクトリ。 PHPの実行ユーザーが書きこみ可能である必要が あります。指定されない場合、PHPはシステムのデフォルト設定を 使用します。

ここで指定したディレクトリに書き込むことができない場合、 PHP はかわりにシステムのデフォルトテンポラリディレクトリを使用します。 open_basedir が on の場合は、システムのデフォルトテンポラリディレクトリへのアップロードを許可しておかなければなりません。

upload_max_filesize int

アップロードされるファイルの最大サイズ。

post_max_size には、 この値より大きな値を指定しなければいけません。

intを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。
max_file_uploads int

同時にアップロードできるファイルの最大数。 何もファイルを指定せずに送信されたアップロードフィールドは ファイル数に数えられません。

SQL全般

SQL全般の設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
sql.safe_mode | "0" | INI_SYSTEM | PHP 7.2.0 以降は削除されています。

以下に設定ディレクティブに関する 簡単な説明を示します。

sql.safe_mode bool

オンにすると、デフォルト値が指定されているデータベース接続関数は、 引数で指定された値よりもデフォルト値を優先して使用します。 デフォルト値の詳細については、関連するデータベースのドキュメントを参照ください。

警告

この機能は PHP 7.2.0 で 削除 されました。

Windows のみ

Windows 特有の設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
windows.show_crt_warning | "0" | INI_ALL |

以下に設定ディレクティブに関する 簡単な説明を示します。

windows.show_crt_warning bool

このディレクティブを有効にすると、Windows CRT の警告を表示します。

User Contributed Notes

gcb@ 09-Jun-2024 06:19
you get a misleading error if a directory doesn't exist or the user lacks permission to access it.

open_basedir restriction in effect. File(/tmp/php_session) is not within the allowed path(s): /tmp/php_session
andre dot wetter at myelco dot ch 23-Mar-2021 09:55
If you use Microsoft IIS Windows and want to use open_basedir restrictions with multiple dirs you have to set them into single quotes in the main config xml file of IIS (C:\Windows\System32\inetsrv\config\applicationHost.config). Works fine in IIS 10.

Multiple files with single quotes and ; for windows:
"C:\php\php-cgi.exe|-d open_basedir='C:\Windows\Temp\;D:\mywebsite1\'"

Only one dir works fine without single quotes:
"C:\php\php-cgi.exe|-d open_basedir=D:\mywebsite1\"

In my main config xml file of IIS there are 2 nodes to set per website and the definitions have to be equal:
configuration\Location\system.webServer\handlers\add
configuration\system.webServer\fastCgi
Simone Pellegatta 19-Jan-2021 12:08
Be careful while using auto_prepend_file.

When the custom exception handler, set by set_exception_handler(), handles an uncaught exception, it interrupts the execution of every script.

If the script with the unhandled exception has been automatically prepended or included by an automatically prepended script, however, the main script will continue running anyway.

This could cause several issues: when we think that throwing an exception would automatically interrupt the current application, a whole chunk of code is going to run anyway.
Anton Bannikov 22-Apr-2020 02:40
I had a problem with 'open_basedir =' string in php.ini. This string was writtren in VirtualHost Directory directive of Apache2 and successfully rewrote the same php.ini setting! It happened with VestaCP, but I think, it's a common way. Goog luck!
luisdev 03-Mar-2020 02:59
https://haydenjames.io/understanding-php-memory_limit/ explains the memory_limit setting nicely.
diamondeagle at webmail dot co dot za 15-Aug-2019 11:14
Note regarding the upload_tmp_dir setting and UNC Paths:

When using PHP on Windows OS and IIS FastCGI, if you need to use a UNC path to a folder on a network drive for the upload_tmp_dir setting then you must use three \ characters at the front of the UNC path.

Windows and PHP use the first slash as an escape character, so if you only use two slashes then it passes a UNC path with just one backslash. That is not valid for UNC paths and you many experience problems when uploading files, such as errors saying that "PHP is missing a temporary folder".

Correct:
upload_tmp_dir = "\\\path\to\your\folder"

Incorrect:
upload_tmp_dir = "\\path\to\your\folder"
fernandobasso dot br at gmail dot com 17-Oct-2016 08:06
This might help in case someone happens to maintain old applications with a charset other than utf-8.

According to the docs, you can override the default charset if you use `header()`.

Suppose php.ini sets the default_charset to "UTF-8", but you need a legacy charset, like ISO-8859-1.

Still,

<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>

would not override the charset, just add it as well and the result
was a response header like (note the two charsets):

    Content-Type:"text/html; Charset=ISO-8859-1;CHARSET=shift-jis"

I found it strange the default one as `charset` with a lowercase `c`
as opposed to my custom charset with an uppercase `C`.

What solved was to _override_ the charset using all lowercase letters
as well for the word "charset":

<?php header('content-type: text/html; charset=ISO-8859-1'); ?>

Then, the double charset from the response headers disappeared, and only the single, custom charset remained.
dougal at gunters dot org 03-Mar-2016 05:11
It appears that if you use both the 'include_path' directives and 'open_basedir', that file searches will hit the include path *first*, before local files. But if 'open_basedir' is not in use, then local files are found first. For example, suppose you have code in '/var/www/myfile.php' which does:

<?php
  require_once('config.php');
?>

Further, assume that there is a local file '/var/www/config.php', and there is also a file '/var/local/php/config.php'.

Next, if your php.ini has:

  include_path = /var/local/php/

Normally, this would look for '/var/www/config.php' first, and if not found, then it would try '/var/local/php/config.php'.

But if you also have this in php.ini:

  open_basedir = /var/www/:/var/local/php/

Then the require would reverse the order of the search, and load '/var/local/php/config.php', even when the local 'config.php' file exists.

Furthermore, if include_path contains directories not in open_basedir, you can end up with a fatal error. For example, change the directive to:

  open_basedir = /var/www/:/var/local/includes/php/

Now the require will first find '/var/local/php/config.php' from the include_path, try to include it, but be unable to because of the open_basedir restrictions.
leo at korfu dot cz 29-May-2006 03:45
"If the size of post data is greater than post_max_size..."

It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo


拡張モジュールの一覧/分類

目次

  • アルファベット順
  • 所属
  • 状態

この付録では、PHP マニュアルに掲載されている 150 以上の 拡張モジュールを分類します。

User Contributed Notes

There are no user contributed notes for this page.


アルファベット順

  • Apache
  • APCu
  • 配列
  • BC Math
  • Bzip2
  • カレンダー
  • クラス/オブジェクト
  • CommonMark
  • COM
  • Componere
  • Ctype
  • CUBRID
  • cURL
  • Date/Time
  • DBA
  • dBase
  • ダイレクト IO
  • ディレクトリ
  • DOM
  • Data Structures
  • Eio
  • Enchant
  • エラー処理
  • Ev
  • Event
  • プログラムの実行
  • Exif
  • Expect
  • FANN
  • FDF
  • FFI
  • Fileinfo
  • ファイルシステム
  • Filter
  • FastCGI Process Manager(FPM)
  • FTP
  • 関数処理
  • Gearman
  • Gender
  • GeoIP
  • Gettext
  • Gmagick
  • GMP
  • GnuPG
  • Hash
  • HRTime
  • Firebird/InterBase
  • IBM DB2
  • iconv
  • Igbinary
  • GD
  • ImageMagick
  • IMAP
  • PHP Options/Info
  • Inotify
  • intl
  • JSON
  • LDAP
  • libxml
  • Lua
  • LuaSandbox
  • LZF
  • メール
  • Mailparse
  • Math
  • マルチバイト文字列
  • Mcrypt
  • Memcache
  • Memcached
  • Mhash
  • その他
  • mqseries
  • MySQL (最初の API)
  • Mysql_xdevapi
  • MySQLi
  • Mysqlnd
  • ネットワーク
  • OAuth
  • OCI8
  • OPcache
  • OpenAL
  • OpenSSL
  • 出力制御
  • parallel
  • Parle
  • パスワードのハッシュ
  • PCNTL
  • PCRE
  • PDO
  • CUBRID (PDO)
  • MS SQL Server (PDO)
  • Firebird (PDO)
  • IBM (PDO)
  • Informix (PDO)
  • MySQL (PDO)
  • Oracle (PDO)
  • ODBC and DB2 (PDO)
  • PostgreSQL (PDO)
  • SQLite (PDO)
  • MS SQL Server (PDO)
  • PostgreSQL
  • Phar
  • phpdbg
  • POSIX
  • PS
  • Pspell
  • pthreads
  • Quickhash
  • Radius
  • Random
  • Rar
  • Readline
  • Recode
  • リフレクション
  • Rnp
  • RpmInfo
  • RRD
  • runkit7
  • ScoutAPM
  • Seaslog
  • セマフォ
  • Sessions
  • 共有メモリ
  • Simdjson
  • SimpleXML
  • SNMP
  • SOAP
  • ソケット
  • Sodium
  • Solr
  • SPL
  • SQLite3
  • SQLSRV
  • ssdeep
  • SSH2
  • Statistics
  • Stomp
  • ストリーム
  • 文字列
  • SVM
  • SVN
  • Swoole
  • Sync
  • Taint
  • TCP
  • Tidy
  • Tokenizer
  • Trader
  • UI
  • ODBC
  • uopz
  • URLs
  • V8js
  • 変数操作
  • var_representation
  • Varnish
  • WDDX
  • win32service
  • WinCache
  • wkhtmltox
  • xattr
  • xdiff
  • Xhprof
  • XLSWriter
  • XML パーサ
  • XMLDiff
  • XMLReader
  • XML-RPC
  • XMLWriter
  • XSL
  • Yac
  • Yaconf
  • Yaf
  • Yaml
  • Yar
  • YAZ
  • Zip
  • Zlib
  • 0MQ messaging
  • ZooKeeper

User Contributed Notes

There are no user contributed notes for this page.


所属

コア拡張

これらは実際のところ拡張ではありません。 PHP のコアに組み込まれており、 コンパイルオプションで無効にすることはできません。

  • 配列

  • クラス/オブジェクト

  • Date/Time

  • ディレクトリ

  • エラー処理

  • プログラムの実行

  • ファイルシステム

  • FastCGI Process Manager(FPM)

  • 関数処理

  • Hash

  • PHP Options/Info

  • JSON

  • メール

  • Math

  • その他

  • ネットワーク

  • OPcache

  • 出力制御

  • パスワードのハッシュ

  • PCRE

  • Random

  • リフレクション

  • SPL

  • ストリーム

  • 文字列

  • URLs

  • 変数操作

バンドルされている拡張

これらの拡張は PHP にバンドルされています。

  • Apache

  • BC Math

  • カレンダー

  • COM

  • Ctype

  • DBA

  • Exif

  • FFI

  • Fileinfo

  • Filter

  • FTP

  • iconv

  • GD

  • intl

  • マルチバイト文字列

  • Mhash

  • PCNTL

  • PDO

  • Phar

  • phpdbg

  • POSIX

  • セマフォ

  • Sessions

  • 共有メモリ

  • ソケット

  • SQLite3

  • Tokenizer

  • Zlib

外部拡張

これらの拡張は PHP にバンドルされていますが、コンパイルするには外部ライブラリが必要となります。

  • Bzip2

  • cURL

  • DOM

  • Enchant

  • Gettext

  • GMP

  • IMAP

  • LDAP

  • libxml

  • MySQLi

  • Mysqlnd

  • OCI8

  • OpenSSL

  • MS SQL Server (PDO)

  • Firebird (PDO)

  • MySQL (PDO)

  • Oracle (PDO)

  • ODBC and DB2 (PDO)

  • PostgreSQL (PDO)

  • SQLite (PDO)

  • PostgreSQL

  • Pspell

  • Readline

  • SimpleXML

  • SNMP

  • SOAP

  • Sodium

  • Tidy

  • ODBC

  • XML パーサ

  • XMLReader

  • XMLWriter

  • XSL

  • Zip

PECL 拡張

これらの拡張は » PECL にあります。 また、外部のライブラリを必要とするかもしれません。PECL には、この他にもまだ PHP マニュアルで文書化されていない拡張があります。

  • APCu

  • CommonMark

  • Componere

  • CUBRID

  • dBase

  • ダイレクト IO

  • Data Structures

  • Eio

  • Ev

  • Event

  • Expect

  • FANN

  • FDF

  • Gearman

  • Gender

  • GeoIP

  • Gmagick

  • GnuPG

  • HRTime

  • Firebird/InterBase

  • IBM DB2

  • Igbinary

  • ImageMagick

  • Inotify

  • Lua

  • LuaSandbox

  • LZF

  • Mailparse

  • Mcrypt

  • Memcache

  • Memcached

  • mqseries

  • MySQL (最初の API)

  • Mysql_xdevapi

  • OAuth

  • OpenAL

  • parallel

  • Parle

  • CUBRID (PDO)

  • IBM (PDO)

  • Informix (PDO)

  • MS SQL Server (PDO)

  • PS

  • pthreads

  • Quickhash

  • Radius

  • Rar

  • Recode

  • Rnp

  • RpmInfo

  • RRD

  • runkit7

  • ScoutAPM

  • Seaslog

  • Simdjson

  • Solr

  • SQLSRV

  • ssdeep

  • SSH2

  • Statistics

  • Stomp

  • SVM

  • SVN

  • Swoole

  • Sync

  • Taint

  • TCP

  • Trader

  • UI

  • uopz

  • V8js

  • var_representation

  • Varnish

  • WDDX

  • win32service

  • WinCache

  • wkhtmltox

  • xattr

  • xdiff

  • Xhprof

  • XLSWriter

  • XMLDiff

  • XML-RPC

  • Yac

  • Yaconf

  • Yaf

  • Yaml

  • Yar

  • YAZ

  • 0MQ messaging

  • ZooKeeper

User Contributed Notes

There are no user contributed notes for this page.


状態

このパートでは、実用向けではない拡張を挙げます。- これらは "古すぎる"（廃止予定 / deprecated）あるいは "新しすぎる"（実験的 / experimental）のどちらかです。

廃止予定の拡張

これらの拡張は非推奨です。通常は同じ機能を持つ別の拡張が存在します。

  • MySQL (最初の API)

  • WDDX

  • XML-RPC

実験的な拡張

これらの拡張の振る舞いは、PHP の将来のリリースで （その関数名や文書化されているあらゆる内容を含めて） 予告なく変更される可能性があります。自己責任のもとで利用してください。

  • ImageMagick

User Contributed Notes

There are no user contributed notes for this page.


関数エイリアスのリスト

数はかなり少ないですが、PHPには複数の名前でコールされる関数があります。 いくつかの関数は単に二つの名前があり、実際の機能を持ちません。 （例えばis_int()とis_integer() は完全に同じです） いくつかの場合、これら複数の名前のどちらかが好ましいとはされていません。 例えば、is_int() と is_integer() は等しく好ましいとされています。 しかし、APIの整理や他の理由により名前が変更された関数があり、古い名前が 下位互換性の維持のためだけに残されている場合があります。 エイリアスの使用は古かったり、名前が変更されていたりで移植性の 低いスクリプトとなるため推奨されません。このリストは、古いスクリプト から新しい構文に更新しようとする人の助けとなるために提供されるもので す。

エイリアス
エイリアス | 正規化された関数名 | 使用されている拡張モジュール
_ | gettext() | Gettext
chop | rtrim() | Base syntax
close | closedir() | Base syntax
com_get | com_propget() | COM
com_propset | com_propput() | COM
com_set | com_propput() | COM
die | exit() | Miscellaneous functions
diskfreespace | disk_free_space() | Filesystem
doubleval | floatval() | Base syntax
fputs | fwrite() | Base syntax
gzputs | gzwrite() | Zlib
i18n_convert | mb_convert_encoding() | Multi-bytes Strings
i18n_discover_encoding | mb_detect_encoding() | Multi-bytes Strings
i18n_http_input | mb_http_input() | Multi-bytes Strings
i18n_http_output | mb_http_output() | Multi-bytes Strings
i18n_internal_encoding | mb_internal_encoding() | Multi-bytes Strings
i18n_ja_jp_hantozen | mb_convert_kana() | Multi-bytes Strings
i18n_mime_header_decode | mb_decode_mimeheader() | Multi-bytes Strings
i18n_mime_header_encode | mb_encode_mimeheader() | Multi-bytes Strings
imap_create | imap_createmailbox() | IMAP
imap_fetchtext | imap_body() | IMAP
imap_getmailboxes | imap_list_full() | IMAP
imap_getsubscribed | imap_lsub_full() | IMAP
imap_header | imap_headerinfo() | IMAP
imap_listmailbox | imap_list() | IMAP
imap_listsubscribed | imap_lsub() | IMAP
imap_rename | imap_renamemailbox() | IMAP
imap_scan | imap_listscan() | IMAP
imap_scanmailbox | imap_listscan() | IMAP
ini_alter | ini_set() | Base syntax
is_double | is_float() | Base syntax
is_integer | is_int() | Base syntax
is_long | is_int() | Base syntax
is_real | is_float() | Base syntax
is_writeable | is_writable() | Base syntax
join | implode() | Base syntax
key_exists | array_key_exists() | Base syntax
ldap_close | ldap_unbind() | LDAP
mbstrcut | mb_strcut() | Multi-bytes Strings
mbstrlen | mb_strlen() | Multi-bytes Strings
mbstrpos | mb_strpos() | Multi-bytes Strings
mbstrrpos | mb_strrpos() | Multi-bytes Strings
mbsubstr | mb_substr() | Multi-bytes Strings
mysql | mysql_db_query() | MySQL
mysql_createdb | mysql_create_db() | MySQL
mysql_db_name | mysql_result() | MySQL
mysql_dbname | mysql_result() | MySQL
mysql_dropdb | mysql_drop_db() | MySQL
mysql_fieldflags | mysql_field_flags() | MySQL
mysql_fieldlen | mysql_field_len() | MySQL
mysql_fieldname | mysql_field_name() | MySQL
mysql_fieldtable | mysql_field_table() | MySQL
mysql_fieldtype | mysql_field_type() | MySQL
mysql_freeresult | mysql_free_result() | MySQL
mysql_listdbs | mysql_list_dbs() | MySQL
mysql_listfields | mysql_list_fields() | MySQL
mysql_listtables | mysql_list_tables() | MySQL
mysql_numfields | mysql_num_fields() | MySQL
mysql_numrows | mysql_num_rows() | MySQL
mysql_selectdb | mysql_select_db() | MySQL
mysql_tablename | mysql_result() | MySQL
ociassignelem | OCICollection::assignElem | OCI8
ocibindbyname | oci_bind_by_name() | OCI8
ocicancel | oci_cancel() | OCI8
ocicloselob | OCILob::close | OCI8
ocicollappend | OCICollection::append | OCI8
ocicollassign | OCICollection::assign | OCI8
ocicollmax | OCICollection::max | OCI8
ocicollsize | OCICollection::size | OCI8
ocicolltrim | OCICollection::trim | OCI8
ocicolumnisnull | oci_field_is_null() | OCI8
ocicolumnname | oci_field_name() | OCI8
ocicolumnprecision | oci_field_precision() | OCI8
ocicolumnscale | oci_field_scale() | OCI8
ocicolumnsize | oci_field_size() | OCI8
ocicolumntype | oci_field_type() | OCI8
ocicolumntyperaw | oci_field_type_raw() | OCI8
ocicommit | oci_commit() | OCI8
ocidefinebyname | oci_define_by_name() | OCI8
ocierror | oci_error() | OCI8
ociexecute | oci_execute() | OCI8
ocifetch | oci_fetch() | OCI8
ocifetchinto | oci_fetch_array(), oci_fetch_row(), oci_fetch_assoc(), oci_fetch_object() | OCI8
ocifetchstatement | oci_fetch_all() | OCI8
ocifreecollection | OCICollection::free | OCI8
ocifreecursor | oci_free_statement() | OCI8
ocifreedesc | oci_free_descriptor() | OCI8
ocifreestatement | oci_free_statement() | OCI8
ocigetelem | OCICollection::getElem | OCI8
ociinternaldebug | oci_internal_debug() | OCI8
ociloadlob | OCILob::load | OCI8
ocilogon | oci_connect() | OCI8
ocinewcollection | oci_new_collection() | OCI8
ocinewcursor | oci_new_cursor() | OCI8
ocinewdescriptor | oci_new_descriptor() | OCI8
ocinlogon | oci_new_connect() | OCI8
ocinumcols | oci_num_fields() | OCI8
ociparse | oci_parse() | OCI8
ocipasswordchange | oci_password_change() | OCI8
ociplogon | oci_pconnect() | OCI8
ociresult | oci_result() | OCI8
ocirollback | oci_rollback() | OCI8
ocisavelob | OCILob::save | OCI8
ocisavelobfile | OCILob::import | OCI8
ociserverversion | oci_server_version() | OCI8
ocisetprefetch | oci_set_prefetch() | OCI8
ocistatementtype | oci_statement_type() | OCI8
ociwritelobtofile | OCILob::export | OCI8
ociwritetemporarylob | OCILob::writeTemporary | OCI8
odbc_do | odbc_exec() | ODBC
odbc_field_precision | odbc_field_len() | ODBC
pg_clientencoding | pg_client_encoding() | PostgreSQL
pg_setclientencoding | pg_set_client_encoding() | PostgreSQL
pos | current() | Base syntax
recode | recode_string() | Recode
show_source | highlight_file() | Base syntax
sizeof | count() | Base syntax
snmpwalkoid | snmprealwalk() | SNMP
strchr | strstr() | Base syntax

User Contributed Notes

There are no user contributed notes for this page.


予約語の一覧

目次

  • キーワードのリスト
  • 定義済のクラス
  • 定義済みの定数
  • その他の予約語の一覧

以下に PHP で定義済みの ID の一覧を示します。ここに示す ID はいずれも、 別途明記されていない限りはスクリプトの中で ID として使用することはできません。これらの一覧には キーワード、定義済みの変数、定数、クラス名が含まれています。これらの一覧は、 全てを網羅しているわけではありません。

User Contributed Notes

There are no user contributed notes for this page.


キーワードのリスト

これらのキーワードは、PHP では特別な意味があります。これらのいくつかは 関数やメソッドのようなものを表し、いくつかは定数のようなものを表す、 といったようになっていますが、実際にはそうではありません。実際には、 これらは言語を構成するものです。 以下のキーワードはいずれも定数、クラス名、 関数名として使用することはできません。 しかし、クラスやインターフェイス、そしてトレイトの内部では、 プロパティ、定数、メソッドの名前として使うことができます。 但し、class だけは例外で、これを定数名として使うことはできません。

PHP のキーワード
__halt_compiler() | abstract | and | array() | as
break | callable | case | catch | class
clone | const | continue | declare | default
die() | do | echo | else | elseif
empty() | enddeclare | endfor | endforeach | endif
endswitch | endwhile | eval() | exit() | extends
final | finally | fn (PHP 7.4 以降) | for | foreach
function | global | goto | if | implements
include | include_once | instanceof | insteadof | interface
isset() | list() | match (PHP 8.0 以降) | namespace | new
or | print | private | protected | public
readonly (PHP 8.1.0 以降) * | require | require_once | return | static
switch | throw | trait | try | unset()
use | var | while | xor | yield
yield from |  |  |  |

* readonly は、関数名として使用できます。

コンパイル時の定数
__CLASS__ | __DIR__ | __FILE__ | __FUNCTION__ | __LINE__ | __METHOD__
__NAMESPACE__ | __TRAIT__ |  |  |  |

User Contributed Notes

Chocopie 23-Mar-2024 06:27
From php8, reserved keywords such as `Interface` or `Trait` can be used as part of the namespace.

<?php
namespace App\Entity\Interface;

interface FooInterface
{

}

https://wiki.php.net/rfc/namespaced_names_as_token
Johnny D. 22-May-2020 06:37
const FORBIDDEN_TYPES = [
    'null',

    'bool',
    'false',
    'true',

    'int',
    'float',

    'string',
];
Thomas Hansen 15-Aug-2016 10:08
Please note that reserved words are still not allowed to be used as namespace or as part of it:

<?php
namespace MyNameSpace\List;

class Test
{
}
?>

This will fail with a Parse error:  syntax error, unexpected 'List' (T_LIST), expecting identifier (T_STRING)
martindilling at gmail dot com 15-Apr-2013 10:20
RegEx to find all the keywords:

\b(
(a(bstract|nd|rray|s))|
(c(a(llable|se|tch)|l(ass|one)|on(st|tinue)))|
(d(e(clare|fault)|ie|o))|
(e(cho|lse(if)?|mpty|nd(declare|for(each)?|if|switch|while)|val|x(it|tends)))|
(f(inal|or(each)?|unction))|
(g(lobal|oto))|
(i(f|mplements|n(clude(_once)?|st(anceof|eadof)|terface)|sset))|
(n(amespace|ew))|
(p(r(i(nt|vate)|otected)|ublic))|
(re(quire(_once)?|turn))|
(s(tatic|witch))|
(t(hrow|r(ait|y)))|
(u(nset|se))|
(__halt_compiler|break|list|(x)?or|var|while)
)\b
Chris 04-Oct-2012 04:33
Here they are as arrays:

<?php
$keywords = array('__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor');

$predefined_constants = array('__CLASS__', '__DIR__', '__FILE__', '__FUNCTION__', '__LINE__', '__METHOD__', '__NAMESPACE__', '__TRAIT__');
?>

Along with get_defined_functions() and get_defined_constants(), this can be useful for checking eval() statements.


定義済のクラス

ここでは、標準で定義されているクラスをとりあげます。 さまざまな拡張モジュールで定義されるその他のクラスについては、 個々の拡張モジュールのリファレンスで述べられています。

標準で定義されているクラス

以下のクラスは、PHP ビルドに含まれる標準関数セットで定義されています。

Directory
dir() 関数が作成します。
stdClass
オブジェクトへの型変換 や、いろいろな標準の関数によって作られる、汎用的な空のクラスです。
__PHP_Incomplete_Class
unserialize() 関数が作成する可能性があります。
Exception
ErrorException
php_user_filter
Closure
定義済みの final クラス Closure は、 無名クラス を表現するために使います。
Generator
定義済みの final クラス Generator は、 ジェネレータ を表現するために使います。
ArithmeticError
AssertionError
DivisionByZeroError
Error
Throwable
ParseError
TypeError

特別なクラス

次の識別子は特別な意味を持っているので、クラス名としては使えません。

self
現在のクラス。
static
実行時における現在のクラス。
parent
親クラス。

User Contributed Notes

xzero at elite7hackers dot net 08-Sep-2017 08:37
There comes improved version of amazing snippet posted by (spark at limao dot com dot br)  which allows dynamic methods generations and works as versatile extension of StdClass:

This one is faster, optimised for closures, and will work only with closures. Compatible: >= PHP 5.6
<?php

class Dynamic extends \stdClass
{
    public function __call($key, $params)
    {
        if ( ! isset($this->{$key})) {
            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
        }

        return $this->{$key}->__invoke(... $params);
    }
}

?>

Usage examples:

<?php
$dynamic                = new Dynamic();
$dynamic->anotherMethod = function () {
    echo "Hey there";
};
$dynamic->randomInt     = function ($min, $max) {
    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
    $dynamic->randomInt(1, 11),
    $dynamic->anotherMethod()
);
?>

This will accept arrays, strings and Closures but is a bit slower due to call_user_func_array
<?php

class Dynamic extends \stdClass
{
    public function __call($key, $params)
    {
        if ( ! isset($this->{$key})) {
            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
        }

        return call_user_func_array($this->{$key}, $params);
    }
}

?>

Usage examples:
<?php
$dynamic                = new Dynamic();
$dynamic->myMethod      = "thatFunction";
$dynamic->hisMethod     = array($dynamic, "randomInt");
$dynamic->newMethod     = array(SomeClass, "staticMethod");
$dynamic->anotherMethod = function () {
    echo "Hey there";
};
$dynamic->randomInt     = function ($min, $max) {
    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
    $dynamic->randomInt(1, 11),
    $dynamic->anotherMethod(),
    $dynamic->hisMethod()
);

?>
xzero at elite7hackers dot net 08-Sep-2017 08:32
There comes improved version of amazing snippet posted by which allows dynamic methods generations and works as versatile extension of StdClass:

This one is faster, optimised for closures, and will work only with closures. Compatible: >= PHP 5.6
<?php

class Dynamic extends \stdClass
{
    public function __call($key, $params)
    {
        if ( ! isset($this->{$key})) {
            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
        }

        return $this->{$key}->__invoke(... $params);
    }
}

?>

Usage examples:

<?php
$dynamic                = new Dynamic();
$dynamic->anotherMethod = function () {
    echo "Hey there";
};
$dynamic->randomInt     = function ($min, $max) {
    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
    $dynamic->randomInt(1, 11),
    $dynamic->anotherMethod()
);
?>

This will accept arrays, strings and Closures but is a bit slower due to call_user_func_array
<?php

class Dynamic extends \stdClass
{
    public function __call($key, $params)
    {
        if ( ! isset($this->{$key})) {
            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
        }

        return call_user_func_array($this->{$key}, $params);
    }
}

?>

Usage examples:
<?php
$dynamic                = new Dynamic();
$dynamic->myMethod      = "thatFunction";
$dynamic->hisMethod     = array($dynamic, "randomInt");
$dynamic->newMethod     = array(SomeClass, "staticMethod");
$dynamic->anotherMethod = function () {
    echo "Hey there";
};
$dynamic->randomInt     = function ($min, $max) {
    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
    $dynamic->randomInt(1, 11),
    $dynamic->anotherMethod(),
    $dynamic->hisMethod()
);

?>
Ashley Dambra 19-Feb-2014 06:43
Here a simple class that allow to set anonymous function. It's an optimised class of stdClass.

<?php
class stdObject {
    public function __construct(array $arguments = array()) {
        if (!empty($arguments)) {
            foreach ($arguments as $property => $argument) {
                if ($argument instanceOf Closure) {
                    $this->{$property} = $argument;
                } else {
                    $this->{$property} = $argument;
                }
            }
        }
    }

    public function __call($method, $arguments) {
        if (isset($this->{$method}) && is_callable($this->{$method})) {
            return call_user_func_array($this->{$method}, $arguments);
        } else {
            throw new Exception("Fatal error: Call to undefined method stdObject::{$method}()");
        }
    }
}

$person = new stdObject(array(
    "name" => "nick",
    "age" => 23,
    "friends" => array("frank", "sally", "aaron"),
    "sayHi" => function() {
        return "Hello there";
    }
));

$person->sayHi2 = function() {
    return "Hello there 2";
};

$person->test = function() {
    return "test";
};

var_dump($person->name, $person->test(), $person->sayHi2());
?>
wyattstorch42 at outlook dot com 24-Dec-2013 01:15
If you call var_export() on an instance of stdClass, it attempts to export it using ::__set_state(), which, for some reason, is not implemented in stdClass.

However, casting an associative array to an object usually produces the same effect (at least, it does in my case). So I wrote an improved_var_export() function to convert instances of stdClass to (object) array () calls. If you choose to export objects of any other class, I'd advise you to implement ::__set_state().

<?php
/**
 * An implementation of var_export() that is compatible with instances
 * of stdClass.
 * @param mixed $variable The variable you want to export
 * @param bool $return If used and set to true, improved_var_export()
 *     will return the variable representation instead of outputting it.
 * @return mixed|null Returns the variable representation when the
 *     return parameter is used and evaluates to TRUE. Otherwise, this
 *     function will return NULL.
 */
function improved_var_export ($variable, $return = false) {
    if ($variable instanceof stdClass) {
        $result = '(object) '.improved_var_export(get_object_vars($variable), true);
    } else if (is_array($variable)) {
        $array = array ();
        foreach ($variable as $key => $value) {
            $array[] = var_export($key, true).' => '.improved_var_export($value, true);
        }
        $result = 'array ('.implode(', ', $array).')';
    } else {
        $result = var_export($variable, true);
    }

    if (!$return) {
        print $result;
        return null;
    } else {
        return $result;
    }
}

// Example usage:
$obj = new stdClass;
$obj->test = 'abc';
$obj->other = 6.2;
$obj->arr = array (1, 2, 3);

improved_var_export((object) array (
    'prop1' => true,
    'prop2' => $obj,
    'assocArray' => array (
        'apple' => 'good',
        'orange' => 'great'
    )
));

/* Output:
(object) array ('prop1' => true, 'prop2' => (object) array ('test' => 'abc', 'other' => 6.2, 'arr' => array (0 => 1, 1 => 2, 2 => 3)), 'assocArray' => array ('apple' => 'good', 'orange' => 'great'))
*/
?>

Note: This function spits out a single line of code, which is useful to save in a cache file to include/eval. It isn't formatted for readability. If you want to print a readable version for debugging purposes, then I would suggest print_r() or var_dump().
spark at limao dot com dot br 15-Aug-2011 02:21
if you want a Dynamic class you can extend from, add atributes AND methods on the fly you can use this:
<?php
    class Dynamic extends stdClass{
        public function __call($key,$params){
            if(!isset($this->{$key})) throw new Exception("Call to undefined method ".get_class($this)."::".$key."()");
            $subject = $this->{$key};
            call_user_func_array($subject,$params);
        }
    }
?>

this will accept both arrays, strings and Closures:
<?php
    $dynamic->myMethod = "thatFunction";
    $dynamic->hisMethod = array($instance,"aMethod");
    $dynamic->newMethod = array(SomeClass,"staticMethod");
    $dynamic->anotherMethod = function(){
        echo "Hey there";
    };
?>

then call them away =D
Typer85 at gmail dot com 17-Feb-2007 08:58
In response to the note below mine,

This list is not incomplete. Read the Manual folks, its listed there plain and simple:

"This section lists standard predefined classes. Miscellaneous extensions define other classes which are described in their reference."

Depending on what extensions you have, they might define their own classes. This list is just the standard classes as defined by PHP with no regards to extensions.
unknown 23-Jul-2002 10:29
It's handy to have a array of the reserved classes.....
var_dump (get_declared_classes ());


定義済みの定数

コアの定義済みの定数

これらの定数は PHP のコアで定義済みの定数です。 PHP, Zend engine, SAPI モジュールも含みます。

PHP_VERSION (string)
現在の PHP のバージョンを "major.minor.release[extra]" 形式の文字列で表したもの。
PHP_MAJOR_VERSION (int)
現在の PHP のメジャーバージョンを整数値で表したもの (たとえば、バージョンが "5.2.7-extra" の場合は int(5) となる)。
PHP_MINOR_VERSION (int)
現在の PHP のマイナーバージョンを整数値で表したもの (たとえば、バージョンが "5.2.7-extra" の場合は int(2) となる)。
PHP_RELEASE_VERSION (int)
現在の PHP のリリースバージョンを整数値で表したもの (たとえば、バージョンが "5.2.7-extra" の場合は int(7) となる)。
PHP_VERSION_ID (int)
現在の PHP のバージョンを整数値で表したもの。バージョンを比較する際に有用 (たとえば、バージョンが "5.2.7-extra" の場合は int(50207) となる)。
PHP_EXTRA_VERSION (string)
現在の PHP の追加バージョンを文字列で表したもの (たとえば、バージョンが "5.2.7-extra" の場合は '-extra' となる)。 ディストリビューションのベンダーが、パッケージのバージョンを示すために使うことが多い。
ZEND_THREAD_SAFE (bool)
PHP の現状のビルドが、スレッドセーフ版であるかどうかを示す。
ZEND_DEBUG_BUILD (bool)
PHP の現状のビルドが、デバッグビルド版であるかどうかを示す。
PHP_ZTS (int)
PHP の現状のビルドが、スレッドセーフ版であるかどうかを示す。
PHP_DEBUG (int)
PHP の現状のビルドが、デバッグビルド版であるかどうかを示す。
DEBUG_BACKTRACE_PROVIDE_OBJECT (int)
"object" のインデックスを収集します。
DEBUG_BACKTRACE_IGNORE_ARGS (int)
スタックトレース中の関数の情報に、引数の情報を含めません。
PHP_MAXPATHLEN (int)
この PHP がサポートする、ファイル名の長さ (パスを含む) の最大値。 PHP 5.3.0 以降で利用可能。
PHP_OS (string)
PHP がビルドされた OS。
PHP_OS_FAMILY (string)
PHP がビルドされたオペレーティングシステムファミリー。 以下のうちひとつです。 'Windows', 'BSD', 'Darwin', 'Solaris', 'Linux' or 'Unknown'. PHP 7.2.0 以降で利用可能。
PHP_SAPI (string)
この PHP のサーバー API。 php_sapi_name() も参照ください。
PHP_EOL (string)
このプラットフォームの行末文字。
PHP_INT_MAX (int)
この PHP がサポートする整数型の最大値。32bit のシステムでは 通常は int(2147483647)。 64bit のシステムでは、int(9223372036854775807)。
PHP_INT_MIN (int)
この PHP がサポートする整数型の最小値。通常は、32ビットシステムなら int(-2147483648)、 64ビットシステムなら int(-9223372036854775808)。 通常は PHP_INT_MIN === ~PHP_INT_MAX となる。
PHP_INT_SIZE (int)
この PHP ビルドにおける整数型のサイズ (バイト数)。
PHP_FLOAT_DIG (int)
float への丸めやその逆操作の際に精度を維持できる数値の桁数。 PHP 7.2.0 以降で利用可能。
PHP_FLOAT_EPSILON (float)
x + 1.0 != 1.0 となる正の数 x のうちで、浮動小数点数値として表せる最小の数。 PHP 7.2.0 以降で利用可能。
PHP_FLOAT_MIN (float)
正 の浮動小数点数値として表せる最小の数。 浮動小数点数値として表せる 負の 最小値が必要なら、- PHP_FLOAT_MAX を使って下さい。 PHP 7.2.0 以降で利用可能。
PHP_FLOAT_MAX (float)
浮動小数点数値として表せる最大の数。 PHP 7.2.0 以降で利用可能。
DEFAULT_INCLUDE_PATH (string)
PEAR_INSTALL_DIR (string)
PEAR_EXTENSION_DIR (string)
PHP_EXTENSION_DIR (string)
動的にロード可能な拡張モジュールを探すデフォルトのディレクトリ。 (但し、extension_dir で上書きされた場合を除きます) デフォルトは PHP_PREFIX です。 (Windows では、 PHP_PREFIX . "\\ext" です。)
PHP_PREFIX (string)
configure 時に設定された --prefix の値。 Windows の場合、configure 時に設定された --with-prefix の値になります。
PHP_BINDIR (string)
configure 時に設定された --bindir の値。 Windows の場合、configure 時に設定された --with-prefix の値になります。
PHP_BINARY (string)
スクリプト実行時の PHP バイナリのパス。
PHP_MANDIR (string)
man ページのインストール先。
PHP_LIBDIR (string)
PHP_DATADIR (string)
PHP_SYSCONFDIR (string)
PHP_LOCALSTATEDIR (string)
PHP_CONFIG_FILE_PATH (string)
PHP_CONFIG_FILE_SCAN_DIR (string)
PHP_SHLIB_SUFFIX (string)
このプラットフォームの共有ライブラリの拡張子。"so" (多くの Unix 系 OS) や "dll" (Windows) など。
PHP_FD_SETSIZE (int)
select システムコール用のファイルディスクリプタの最大数。 PHP 7.1.0 以降で使用可能です。
E_ERROR (int)
エラーを報告する定数
E_WARNING (int)
エラーを報告する定数
E_PARSE (int)
エラーを報告する定数
E_NOTICE (int)
エラーを報告する定数
E_CORE_ERROR (int)
エラーを報告する定数
E_CORE_WARNING (int)
エラーを報告する定数
E_COMPILE_ERROR (int)
エラーを報告する定数
E_COMPILE_WARNING (int)
エラーを報告する定数
E_USER_ERROR (int)
エラーを報告する定数
E_USER_WARNING (int)
エラーを報告する定数
E_USER_NOTICE (int)
E_RECOVERABLE_ERROR (int)
エラーを報告する定数
E_DEPRECATED (int)
エラーを報告する定数
E_USER_DEPRECATED (int)
エラーを報告する定数
E_ALL (int)
エラーを報告する定数
E_STRICT (int)
エラーを報告する定数
__COMPILER_HALT_OFFSET__ (int)
true (bool)
Booleans も参照ください。
false (bool)
Booleans も参照ください。
null (null)
Null も参照ください。
PHP_WINDOWS_EVENT_CTRL_C (int)
Windows の CTRL+C イベント。 PHP 7.4.0 から利用可能です。(Windows のみ)
PHP_WINDOWS_EVENT_CTRL_BREAK (int)
Windows の CTRL+BREAK イベント。 PHP 7.4.0 から利用可能です。(Windows のみ)
PHP_CLI_PROCESS_TITLE (bool)
プロセスのタイトルを設定/取得できるかどうかを示します。 CLI SAPI でのみ利用可能です。
STDERR (resource)
stderr に対して、 既にオープンされているストリーム。 CLI SAPI でのみ利用可能です。
STDIN (resource)
stdin に対して、 既にオープンされているストリーム。 CLI SAPI でのみ利用可能です。
STDOUT (resource)
stdout に対して、 既にオープンされているストリーム。 CLI SAPI でのみ利用可能です。

マジック定数 も参照ください。

標準の定義済み定数

コアモジュール の定数は、すべて PHP にデフォルトで定義されています。

User Contributed Notes

rdcapasso 08-Sep-2013 09:16
Volker's getOS() function needs to have the order of cases changed in the switch statement since "darwin" contains "win", which means that both "windows" and "darwin" will return self::OS_WIN. I've moved the 'dar' case above the 'win' case:

<?php
class System {

    const OS_UNKNOWN = 1;
    const OS_WIN = 2;
    const OS_LINUX = 3;
    const OS_OSX = 4;

    /**
     * @return int
     */
    static public function getOS() {
        switch (true) {
            case stristr(PHP_OS, 'DAR'): return self::OS_OSX;
            case stristr(PHP_OS, 'WIN'): return self::OS_WIN;
            case stristr(PHP_OS, 'LINUX'): return self::OS_LINUX;
            default : return self::OS_UNKNOWN;
        }
    }

}
?>


その他の予約語の一覧

これらの名前は、クラスやインターフェイスそしてトレイトの名前として使えません。 PHP 8.0 より前のバージョンでは、名前空間の中であっても使えませんでした。

予約語
int | float | bool | string
true | false | null | void
iterable (PHP 7.1 以降) | object (PHP 7.2 以降) | mixed (PHP 8.0 以降) | never (PHP 8.1 以降)

これらの名前は、弱い予約語として確保されています。 クラスやインターフェイスそしてトレイトの名前として使えますが、 使わないことを強く推奨します。将来のバージョンの PHP で使われる可能性があるためです。

弱い予約語
enum resource numeric

User Contributed Notes

There are no user contributed notes for this page.


リソース型の一覧

以下にPHPのリソースを生成、使用、破棄するための関数の一覧を示します。 is_resource()によりある変数がリソースであるかど うかを調べることが可能です。また、 get_resource_type()は変数のリソース型を返します。

Resource Types
リソース型の名前 | 生成する関数 | 使用する関数 | 破棄する関数 | 説明
AddressInfo | socket_addrinfo_lookup() | socket_addrinfo_bind(), socket_addrinfo_connect(), socket_addrinfo_explain(), | None | AddressInfo (ソケット)
bzip2 | bzopen() | bzerrno(), bzerror(), bzerrstr(), bzflush(), bzread(), bzwrite() | bzclose() | Bzip2 ファイル
cubrid 接続 | cubrid_connect() cubrid_connect_with_url() | cubrid_col_get() cubrid_col_size() cubrid_commit() cubrid_drop() cubrid_execute() cubrid_get_autocommit() cubrid_get_charset() cubrid_get_class_name() cubrid_get_db_parameter() cubrid_get_server_info() cubrid_get() cubrid_insert_id() cubrid_is_instance() cubrid_lob_export() cubrid_lob_get() cubrid_lob_send() cubrid_lock_read() cubrid_lock_write() cubrid_prepare() cubrid_put() cubrid_rollback() cubrid_schema() cubrid_seq_drop() cubrid_seq_insert() cubrid_seq_put() cubrid_set_add() cubrid_set_autocommit() cubrid_set_db_parameter() cubrid_set_drop() cubrid_affected_rows() cubrid_client_encoding() cubrid_errno() cubrid_error() cubrid_list_dbs() cubrid_ping() cubrid_query() cubrid_real_escape_string() | cubrid_close() cubrid_disconnect() | CUBRID データベースへの接続
持続的な cubrid 接続 | cubrid_pconnect() cubrid_pconnect_with_url() | cubrid_col_get() cubrid_col_size() cubrid_commit() cubrid_drop() cubrid_execute() cubrid_get_autocommit() cubrid_get_charset() cubrid_get_class_name() cubrid_get_db_parameter() cubrid_get_server_info() cubrid_get() cubrid_insert_id() cubrid_is_instance() cubrid_lob_export() cubrid_lob_get() cubrid_lob_send() cubrid_lock_read() cubrid_lock_write() cubrid_prepare() cubrid_put() cubrid_rollback() cubrid_schema() cubrid_seq_drop() cubrid_seq_insert() cubrid_seq_put() cubrid_set_add() cubrid_set_autocommit() cubrid_set_db_parameter() cubrid_set_drop() cubrid_affected_rows() cubrid_client_encoding() cubrid_errno() cubrid_error() cubrid_list_dbs() cubrid_ping() cubrid_query() cubrid_real_escape_string() cubrid_lob2_new() | CUBRID データベースへの持続的な接続
cubrid request | cubrid_prepare() cubrid_execute() cubrid_query() cubrid_unbuffered_query() | cubrid_bind() cubrid_column_names() cubrid_column_types() cubrid_current_oid() cubrid_execute() cubrid_free_result() cubrid_get_query_timeout() cubrid_move_cursor() cubrid_next_result() cubrid_num_cols() cubrid_num_rows() cubrid_set_query_timeout() cubrid_data_seek() cubrid_fetch_array() cubrid_fetch_assoc() cubrid_fetch_field() cubrid_fetch_lengths() cubrid_fetch_object() cubrid_fetch_row() cubrid_field_flags() cubrid_field_len() cubrid_field_name() cubrid_field_seek() cubrid_field_table() cubrid_field_type() cubrid_num_fields() cubrid_result() cubrid_lob2_bind() | cubrid_close_prepare() cubrid_close_request() | CUBRID request
cubrid lob | cubrid_lob_get() | cubrid_lob_export() cubrid_lob_send() cubrid_lob_size() | cubrid_lob_close() | None
cubrid lob2 | cubrid_lob2_new() cubrid_fetch() cubrid_fetch_row() cubrid_fetch_array() cubrid_fetch_assoc() cubrid_fetch_object() | cubrid_lob2_export() cubrid_lob2_import() cubrid_lob2_read() cubrid_lob2_write() cubrid_lob2_tell() cubrid_lob2_tell64() cubrid_lob2_seek() cubrid_lob2_seek64() cubrid_lob2_size() cubrid_lob2_size64() | cubrid_lob2_close() | None
curl | curl_copy_handle(), curl_init() | curl_copy_handle(), curl_errno(), curl_error(), curl_exec(), curl_getinfo(), curl_setopt() | curl_close() | cURL ハンドル
curl_multi | curl_multi_init() | curl_multi_errno(), curl_multi_exec(), curl_multi_info_read(), curl_multi_remove_handle(), curl_multi_select(), curl_multi_setopt() | curl_multi_close() | cURL マルチハンドル
curl_share | curl_share_init() | curl_share_errno(), curl_share_setopt() | curl_share_close() | cURL 共有ハンドル
dba | dba_open() | dba_delete(), dba_exists(), dba_fetch(), dba_firstkey(), dba_insert(), dba_nextkey(), dba_optimize(), dba_replace(), dba_sync() | dba_close() | DBAデータベースへのリンク
dba persistent | dba_popen() | dba_delete(), dba_exists(), dba_fetch(), dba_firstkey(), dba_insert(), dba_nextkey(), dba_optimize(), dba_replace(), dba_sync() | None | DBAデータベースへの持続的なリンク
dbase | dbase_open() | dbase_pack(), dbase_add_record(), dbase_replace_record(), dbase_delete_record(), dbase_get_record(), dbase_get_record_with_names(), dbase_numfields(), dbase_numrecords() | dbase_close() | Dbaseデータベースへのリンク
enchant_broker | enchant_broker_init() | enchant_broker_describe(), enchant_broker_dict_exists(), enchant_broker_get_dict_path(), enchant_broker_get_error(), enchant_broker_list_dicts(), enchant_broker_set_dict_path(), enchant_broker_set_ordering() | enchant_broker_free() | Enchant ブローカー (PHP 8.0.0 より前)
enchant_dict | enchant_broker_request_dict() enchant_broker_request_pwl_dict() | enchant_dict_add_to_personal(), enchant_dict_add_to_session(), enchant_dict_check(), enchant_dict_describe(), enchant_dict_get_error(), enchant_dict_is_in_session(), enchant_dict_store_replacement(), enchant_dict_suggest() | enchant_broker_free_dict() | Enchant 辞書 (PHP 8.0.0 より前)
fdf | fdf_open() | fdf_create(), fdf_save(), fdf_get_value(), fdf_set_value(), fdf_next_field_name(), fdf_set_ap(), fdf_set_status(), fdf_get_status(), fdf_set_file(), fdf_get_file(), fdf_set_flags(), fdf_set_opt(), fdf_set_submit_form_action(), fdf_set_javascript_action() | fdf_close() | FDF File
ftp | ftp_connect(), ftp_ssl_connect() | ftp_login(), ftp_pwd(), ftp_cdup(), ftp_chdir(), ftp_mkdir(), ftp_rmdir(), ftp_nlist(), ftp_rawlist(), ftp_systype(), ftp_pasv(), ftp_get(), ftp_fget(), ftp_put(), ftp_fput(), ftp_size(), ftp_mdtm(), ftp_rename(), ftp_delete(), ftp_site(), ftp_alloc(), ftp_chmod(), ftp_exec(), ftp_get_option(), ftp_nb_continue(), ftp_nb_fget(), ftp_nb_fput(), ftp_nb_get(), ftp_nb_put(), ftp_raw(), ftp_set_option() | ftp_close() | FTP 接続 (PHP 8.1.0 より前)
gd | imagecreate(), imagecreatefromgd(), imagecreatefromgd2(), imagecreatefromgd2part(), imagecreatefromgif(), imagecreatefromjpeg(), imagecreatefrompng(), imagecreatefromwbmp(), imagecreatefromstring(), imagecreatefromxbm(), imagecreatefromxpm(), imagecreatetruecolor(), imagerotate() | imagearc(), imagechar(), imagecharup(), imagecolorallocate(), imagecolorat(), imagecolorclosest(), imagecolorexact(), imagecolorresolve(), imagegammacorrect(), imagegammacorrect(), imagecolorset(), imagecolorsforindex(), imagecolorstotal(), imagecolortransparent(), imagecopy(), imagecopyresized(), imagedashedline(), imagefill(), imagefilledpolygon(), imagefilledrectangle(), imagefilltoborder(), imagegif(), imagepng(), imagejpeg(), imagewbmp(), imageinterlace(), imageline(), imagepolygon(), imagerectangle(), imagerotate(), imagesetpixel(), imagestring(), imagestringup(), imagesx(), imagesy(), imagettftext(), imagefilledarc(), imageellipse(), imagefilledellipse(), imagecolorclosestalpha(), imagecolorexactalpha(), imagecolorresolvealpha(), imagecopymerge(), imagecopymergegray(), imagecopyresampled(), imagetruecolortopalette(), imagesetbrush(), imagesettile(), imagesetthickness(), image2wbmp(), imagealphablending(), imageantialias(), imagecolorallocatealpha(), imagecolorclosesthwb(), imagecolordeallocate(), imagecolormatch(), imagefilter(), imagefttext(), imagegd(), imagegd2(), imageistruecolor(), imagelayereffect(), imagepalettecopy(), imagesavealpha(), imagesetstyle(), imagexbm() | imagedestroy() | GD Image (PHP 8.0.0 より前)
gd font | imageloadfont() | imagechar(), imagecharup(), imagefontheight() | None | GD用のフォント (PHP 8.1.0 より前)
imap | imap_open() | imap_append(), imap_body(), imap_check(), imap_createmailbox(), imap_delete(), imap_deletemailbox(), imap_expunge(), imap_fetchbody(), imap_fetchstructure(), imap_headerinfo(), imap_header(), imap_headers(), imap_listmailbox(), imap_getmailboxes(), imap_get_quota(), imap_status(), imap_listsubscribed(), imap_set_quota(), imap_set_quota(), imap_getsubscribed(), imap_mail_copy(), imap_mail_move(), imap_num_msg(), imap_num_recent(), imap_ping(), imap_renamemailbox(), imap_reopen(), imap_subscribe(), imap_undelete(), imap_unsubscribe(), imap_scanmailbox(), imap_mailboxmsginfo(), imap_fetchheader(), imap_uid(), imap_msgno(), imap_search(), imap_fetch_overview() | imap_close() | IMAP, POP3 server への接続リンク(PHP 8.1.0 より前)
interbase blob | ibase_blob_create(), ibase_blob_import(), ibase_blob_open() | ibase_blob_add(), ibase_blob_cancel(), ibase_blob_echo(), ibase_blob_get(), ibase_blob_info() | ibase_blob_close()
interbase link | ibase_connect() | ibase_query(), ibase_prepare(), ibase_trans() | ibase_close() | Interbase データベースへのリンク
interbase link persistent | ibase_pconnect() | ibase_query(), ibase_prepare(), ibase_trans() | None | Interbase データベースへの持続的なリンク
interbase query | ibase_prepare() | ibase_execute() | ibase_free_query() | Interbase query
interbase 結果 | ibase_query() | ibase_fetch_row(), ibase_fetch_object(), ibase_field_info(), ibase_num_fields() | ibase_free_result() | Interbase 結果
interbase transaction | ibase_trans() | ibase_commit() | ibase_rollback() | Interbase transaction
ldap link | ldap_connect(), ldap_search() | ldap_count_entries(), ldap_first_attribute(), ldap_first_entry(), ldap_get_attributes(), ldap_get_dn(), ldap_get_entries(), ldap_get_values(), ldap_get_values_len(), ldap_next_attribute(), ldap_next_entry() | ldap_close() | ldap connection (PHP 8.1.0 より前)
ldap result | ldap_read() | ldap_add(), ldap_compare(), ldap_bind(), ldap_count_entries(), ldap_delete(), ldap_errno(), ldap_error(), ldap_first_attribute(), ldap_first_entry(), ldap_get_attributes(), ldap_get_dn(), ldap_get_entries(), ldap_get_values(), ldap_get_values_len(), ldap_get_option(), ldap_list(), ldap_modify(), ldap_mod_add(), ldap_mod_replace(), ldap_next_attribute(), ldap_next_entry(), ldap_mod_del(), ldap_set_option(), ldap_unbind() | ldap_free_result() | ldap search result (PHP 8.1.0 より前)
ldap result entry (PHP 8.1.0 より前)
mailparse_mail_structure | mailparse_msg_create() mailparse_msg_parse_file() | mailparse_msg_extract_part_file() mailparse_msg_extract_part() mailparse_msg_extract_whole_part_file() mailparse_msg_get_part_data() mailparse_msg_get_part() mailparse_msg_get_structure() mailparse_msg_parse() | mailparse_msg_free()
mysql link | mysql_connect() | mysql_affected_rows(), mysql_create_db(), mysql_data_seek(), mysql_db_name(), mysql_db_query(), mysql_drop_db(), mysql_errno(), mysql_error(), mysql_insert_id(), mysql_list_dbs(), mysql_list_fields(), mysql_list_tables(), mysql_query(), mysql_result(), mysql_select_db(), mysql_tablename(), mysql_get_host_info(), mysql_get_proto_info(), mysql_get_server_info() | mysql_close() | MySQL データベースへのリンク
mysql link persistent | mysql_pconnect() | mysql_affected_rows(), mysql_create_db(), mysql_data_seek(), mysql_db_name(), mysql_db_query(), mysql_drop_db(), mysql_errno(), mysql_error(), mysql_insert_id(), mysql_list_dbs(), mysql_list_fields(), mysql_list_tables(), mysql_query(), mysql_result(), mysql_select_db(), mysql_tablename(), mysql_get_host_info(), mysql_get_proto_info(), mysql_get_server_info() | None | MySQL データベースへの持続的なリンク
mysql 結果 | mysql_db_query(), mysql_list_dbs(), mysql_list_fields(), mysql_list_processes(), mysql_list_tables(), mysql_query(), mysql_unbuffered_query() | mysql_data_seek(), mysql_db_name(), mysql_fetch_array(), mysql_fetch_assoc(), mysql_fetch_field(), mysql_fetch_lengths(), mysql_fetch_object(), mysql_fetch_row(), mysql_fetch_row(), mysql_field_flags(), mysql_field_name(), mysql_field_len(), mysql_field_seek(), mysql_field_table(), mysql_field_type(), mysql_num_fields(), mysql_num_rows(), mysql_result(), mysql_tablename() | mysql_free_result() | MySQL 結果
oci8 collection | oci_new_collection() | OCI-Collection::append(), OCI-Collection::assign(), OCI-Collection::assignElem(), OCI-Collection::getElem(), OCI-Collection::max(), OCI-Collection::size(), OCI-Collection::trim() | OCI-Collection::free() | Oracle Collection
oci8 接続 | oci_connect(), oci_pconnect(), oci_new_connect() | oci_commit(), oci_error(), oci_new_cursor(), oci_parse(), oci_password_change(), oci_rollback(), oci_server_version(), oci_set_action(), oci_set_client_identifier(), oci_set_client_info(), oci_set_module_name() | oci_close() | Oracle データベースへの接続
oci8 lob | oci_new_descriptor() | OCI-Lob::append(), OCI-Lob::close(), OCI-Lob::eof(), OCI-Lob::erase(), OCI-Lob::export(), OCI-Lob::flush(), OCI-Lob::getBuffering(), OCI-Lob::import(), OCI-Lob::load(), OCI-Lob::read(), OCI-Lob::rewind(), OCI-Lob::save(), OCI-Lob::saveFile(), OCI-Lob::seek(), OCI-Lob::setBuffering(), OCI-Lob::size(), OCI-Lob::tell(), OCI-Lob::truncate(), OCI-Lob::write(), OCI-Lob::writeTemporary(), OCI-Lob::writeToFile(), oci_lob_copy(), oci_lob_is_equal() | OCI-Lob::free() | Oracle large objects
oci8 statement | oci_parse(), oci_new_cursor() | oci_bind_array_by_name(), oci_bind_by_name(), oci_cancel(), oci_define_by_name(), oci_error() oci_execute(), oci_fetch_all(), oci_fetch_array(), oci_fetch_assoc(), oci_fetch_object(), oci_fetch_row(), oci_fetch(), oci_field_is_null(), oci_field_name(), oci_field_precision(), oci_field_scale(), oci_field_size(), oci_field_type_raw(), oci_field_type(), oci_num_fields(), oci_num_rows(), oci_result(), oci_set_prefetch(), oci_statement_type() | oci_free_statement() | Oracle カーソル
odbc link | odbc_connect() | odbc_autocommit(), odbc_commit(), odbc_error(), odbc_errormsg(), odbc_exec(), odbc_tables(), odbc_tableprivileges(), odbc_do(), odbc_prepare(), odbc_columns(), odbc_columnprivileges(), odbc_procedurecolumns(), odbc_specialcolumns(), odbc_rollback(), odbc_setoption(), odbc_gettypeinfo(), odbc_primarykeys(), odbc_foreignkeys(), odbc_procedures(), odbc_statistics() | odbc_close() | ODBC データベースへのリンク
odbc link persistent | odbc_pconnect() | odbc_autocommit(), odbc_commit(), odbc_error(), odbc_errormsg(), odbc_exec(), odbc_tables(), odbc_tableprivileges(), odbc_do(), odbc_prepare(), odbc_columns(), odbc_columnprivileges(), odbc_procedurecolumns(), odbc_specialcolumns(), odbc_rollback(), odbc_setoption(), odbc_gettypeinfo(), odbc_primarykeys(), odbc_foreignkeys(), odbc_procedures(), odbc_statistics() | None | ODBC データベースへの持続的なリンク
odbc 結果 | odbc_prepare() | odbc_binmode(), odbc_cursor(), odbc_execute(), odbc_fetch_into(), odbc_fetch_row(), odbc_field_name(), odbc_field_num(), odbc_field_type(), odbc_field_len(), odbc_field_precision(), odbc_field_scale(), odbc_longreadlen(), odbc_num_fields(), odbc_num_rows(), odbc_result(), odbc_result_all(), odbc_setoption() | odbc_free_result() | ODBC 結果
birdstep link(PHP 7.3.0より前)
birdstep 結果(PHP 7.3.0より前)
OpenSSL key | openssl_get_privatekey(), openssl_get_publickey() | openssl_sign(), openssl_seal(), openssl_open(), openssl_verify() | openssl_free_key() | OpenSSL key
OpenSSL X.509 | openssl_x509_read() | openssl_x509_parse(), openssl_x509_checkpurpose() | openssl_x509_free() | Public Key
pgsql large object | pg_lo_open() | pg_lo_open(), pg_lo_create(), pg_lo_read(), pg_lo_read_all(), pg_lo_seek(), pg_lo_tell(), pg_lo_unlink(), pg_lo_write() | pg_lo_close() | PostgreSQL ラージオブジェクト (PHP 8.1.0 より前)
pgsql link | pg_connect() | pg_affected_rows(), pg_query(), pg_send_query(), pg_get_result(), pg_connection_busy(), pg_connection_reset(), pg_connection_status(), pg_last_error(), pg_last_notice(), pg_lo_create(), pg_lo_export(), pg_lo_import(), pg_lo_open(), pg_lo_unlink(), pg_host(), pg_port(), pg_dbname(), pg_options(), pg_copy_from(), pg_copy_to(), pg_end_copy(), pg_put_line(), pg_tty(), pg_trace(), pg_untrace(), pg_set_client_encoding(), pg_client_encoding(), pg_meta_data(), pg_convert(), pg_insert(), pg_select(), pg_delete(), pg_update() | pg_close() | PostgreSQL データベースへのリンク (PHP 8.1.0 より前)
pgsql link persistent | pg_pconnect() | pg_affected_rows(), pg_query(), pg_send_query(), pg_get_result(), pg_connection_busy(), pg_connection_reset(), pg_connection_status(), pg_last_error(), pg_last_notice(), pg_lo_create(), pg_lo_export(), pg_lo_import(), pg_lo_open(), pg_lo_unlink(), pg_host(), pg_port(), pg_dbname(), pg_options(), pg_copy_from(), pg_copy_to(), pg_end_copy(), pg_put_line(), pg_tty(), pg_trace(), pg_untrace(), pg_set_client_encoding(), pg_client_encoding(), pg_meta_data(), pg_convert(), pg_insert(), pg_select(), pg_delete(), pg_update() | None | PostgreSQL データベースへの持続的なリンク
pgsql 結果 | pg_execute(), pg_query(), pg_query_params(), pg_get_result() | pg_fetch_array(), pg_fetch_object(), pg_fetch_result(), pg_fetch_row(), pg_field_is_null(), pg_field_name(), pg_field_num(), pg_field_prtlen(), pg_field_size(), pg_field_type(), pg_last_oid(), pg_num_fields(), pg_num_rows(), pg_result_error(), pg_result_status() | pg_free_result() | PostgreSQL 結果 (PHP 8.1.0 より前)
pgsql string
pspell | pspell_new(), pspell_new_config(), pspell_new_personal() | pspell_add_to_personal(), pspell_add_to_session(), pspell_check(), pspell_clear_session(), pspell_config_ignore(), pspell_config_mode(), pspell_config_personal(), pspell_config_repl(), pspell_config_runtogether(), pspell_config_save_repl(), pspell_save_wordlist(), pspell_store_replacement(), pspell_suggest() | None | pspell 辞書 (PHP 8.1.0 より前)
pspell config | pspell_config_create() | pspell_new_config() | None | pspell 設定 (PHP 8.1.0 より前)
shmop | shmop_open() | shmop_read(), shmop_write(), shmop_size(), shmop_delete() | shmop_close() | 共有メモリブロックハンドル (PHP 8.0.0 より前)
ソケット | socket_accept(), socket_addrinfo_bind(), socket_addrinfo_connect(), socket_create(), socket_create_listen(), socket_import_stream(), socket_wsaprotocol_info_import() | socket_accept(), socket_bind(), socket_clear_error(), socket_connect(), socket_get_option(), socket_getpeername(), socket_getsockname(), socket_last_error(), socket_listen(), socket_read(), socket_recv(), socket_recvfrom(), socket_recvmsg(), socket_select(), socket_send(), socket_sendmsg(), socket_sendto(), socket_set_block(), socket_set_nonblock(), socket_set_option(), socket_shutdown(), socket_write(), socket_wsaprotocol_info_export(), socket_wsaprotocol_info_release() | socket_close() | Socket (ソケット拡張モジュール)
stream | opendir() | readdir(), rewinddir() | closedir() | ディレクトリハンドル
stream | fopen(), tmpfile() | feof(), fflush(), fgetc(), fgetcsv(), fgets(), fgetss(), flock(), fpassthru(), fputs(), fwrite(), fread(), fseek(), ftell(), fstat(), ftruncate(), set_file_buffer(), rewind() | fclose() | ファイルハンドル
stream | popen(), fsockopen(), pfsockopen() | feof(), fflush(), fgetc(), fgetcsv(), fgets(), fgetss(), fpassthru(), fputs(), fwrite(), fread() | pclose() | Process handle
socket | fflush(), fgetc(), fgetcsv(), fgets(), fgetss(), fpassthru(), fputs(), fwrite(), fread() | fclose() | ソケットハンドル
SSH2 セッション | ssh2_connect() | ssh2_disconnect()
SSH2 リスナー | ssh2_forward_listen()
SSH2 SFTP | ssh2_sftp()
SSH2 公開鍵サブシステム | ssh2_publickey_init()
sysvmsg queue | msg_get_queue() | msg_queue_exists(), msg_receive(), msg_send(), msg_set_queue(), msg_stat_queue() | msg_remove_queue() | System V メッセージキュー(PHP 8.0.0 より前)
sysvsem | sem_get() | sem_acquire() | sem_release() | System V セマフォ(PHP 8.0.0 より前)
sysvshm | shm_attach() | shm_remove(), shm_put_var(), shm_get_var(), shm_remove_var() | shm_detach() | System V 共有メモリ(PHP 8.0.0 より前)
wddx | wddx_packet_start() | wddx_add_vars() | wddx_packet_end() | WDDX packet
xml | xml_parser_create(), xml_parser_create_ns() | xml_set_object(), xml_set_element_handler(), xml_set_character_data_handler(), xml_set_processing_instruction_handler(), xml_set_default_handler(), xml_set_unparsed_entity_decl_handler(), xml_set_notation_decl_handler(), xml_set_external_entity_ref_handler(), xml_parse(), xml_get_error_code(), xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number(), xml_get_current_byte_index(), xml_parse_into_struct(), xml_parser_set_option(), xml_parser_get_option() | xml_parser_free() | XML パーサ(PHP 8.0.0 より前)
zlib | gzopen() | gzeof(), gzgetc(), gzgets(), gzgetss(), gzpassthru(), gzputs(), gzread(), gzrewind(), gzseek(), gztell(), gzwrite() | gzclose() | gz で圧縮したファイル
zlib.deflate | deflate_init() | deflate_add() | なし | インクリメンタル圧縮コンテキスト(PHP 8.0.0 より前)
zlib.inflate | inflate_init() | inflate_add() inflate_add(), inflate_get_read_len(), inflate_get_status() | なし | インクリメンタル伸長コンテキスト(PHP 8.0.0 より前)

User Contributed Notes

Anonymous 28-Jul-2023 12:19
Resource of type "process" is returned by proc_open() and used by proc_close()


利用できるフィルタのリスト

目次

  • 文字列フィルタ
  • 変換フィルタ
  • 圧縮フィルタ
  • 暗号化フィルタ

以下は、stream_filter_append() で利用できる 組み込みフィルタのリストです。PHP のバージョンによっては このリスト以外のフィルタがあったり、このリストにあるフィルタが存在 しなかったりするかもしれません。

stream_filter_append() と stream_filter_prepend() のちょっとした違いに ついて説明します。 すべての PHP ストリームはその内部に小さな読み込みバッファ を持っており、ファイルシステムもしくは他のリソースから読み込まれた データはこのバッファに格納されます。このことで、データをより効率的に 扱うことができるのです。リソースがストリームの内部バッファに 取り込まれたら、アプリケーション側で準備ができているかどうかに かかわらずすぐにフィルタ処理が行われます。フィルタが append されていた場合、読み込みバッファに はいってきたデータはすぐにフィルタ処理されます。つまり、バッファの 存在をまったく意識せずに扱えるということです。しかし、もしフィルタが prepend されていた場合、読み込みバッファにデータが 入ってきた段階ではフィルタ処理されません。 リソースから次のデータブロックが読み込まれるまで、フィルタ処理を 待機するのです。

あなたが使っている PHP にどのようなフィルタが登録されているかを 知るには、stream_get_filters() を利用します。

User Contributed Notes

There are no user contributed notes for this page.


文字列フィルタ

これらのフィルタは、まさしくその名が示すとおりの働きをし、PHP 組み込み の文字列処理関数と同じように動作します。これらのフィルタについての より詳しい情報は、対応する関数のマニュアルを参照ください。

string.rot13

このフィルタは、すべてのストリームデータに対して str_rot13() 関数を適用するのと同じ動作をします。

例1 string.rot13

<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.rot13');
fwrite($fp, "This is a test.\n");
/* 出力: Guvf vf n grfg. */
?>

string.toupper

このフィルタは、すべてのストリームデータに対して strtoupper() 関数を適用するのと同じ動作をします。

例2 string.toupper

<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.toupper');
fwrite($fp, "This is a test.\n");
/* 出力: THIS IS A TEST. */
?>

string.tolower

このフィルタは、すべてのストリームデータに対して strtolower() 関数を適用するのと同じ動作をします。

例3 string.tolower

<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.tolower');
fwrite($fp, "This is a test.\n");
/* 出力: this is a test. */
?>

string.strip_tags

このフィルタは、すべてのストリームデータに対して strip_tags() 関数を適用するのと同じ動作をします。 以下の２つのうちどちらかの形式でパラメータを渡すことができます。 ひとつは、strip_tags() 関数の第２パラメータと同じ 形式でタグを並べた文字列、もうひとつはタグ名の配列です。

警告

この機能は PHP 7.3.0 で 非推奨になります。この機能に頼らないことを強く推奨します。

例4 string.strip_tags

<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, "<b><i><u>");
fwrite($fp, "<b>bolded text</b> enlarged to a <h1>level 1 heading</h1>\n");
fclose($fp);
/* 出力: bolded text enlarged to a level 1 heading */

$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('b','i','u'));
fwrite($fp, "<b>bolded text</b> enlarged to a <h1>level 1 heading</h1>\n");
fclose($fp);
/* 出力: bolded text enlarged to a level 1 heading */
?>

User Contributed Notes

There are no user contributed notes for this page.


変換フィルタ

string.* フィルタと同様、convert.* フィルタもその名前と同じような 動作をします。 これらのフィルタについてのより詳しい情報は、対応する関数のマニュアルを 参照ください。

convert.base64-encode と convert.base64-decode による変換

これらのフィルタは、すべてのストリームデータに対してそれぞれ base64_encode() または base64_decode() 関数を適用するのと同じ動作をします。 convert.base64-encode は、パラメータを連想配列形式で 受け取ることができます。line-length が与えられた 場合、base64 出力は line-length 文字単位に 分割されます。 line-break-chars が与えられた場合、 分割されたデータは、line-break-chars で指定された文字列で区切って出力されます。 これらのパラメータは、base64_encode() を chunk_split() とともに利用した場合と同じ動作をします。

例1 convert.base64-encode と convert.base64-decode

<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.base64-encode');
fwrite($fp, "This is a test.\n");
fclose($fp);
/* 出力: VGhpcyBpcyBhIHRlc3QuCg== */

$param = array('line-length' => 8, 'line-break-chars' => "\r\n");
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.base64-encode', STREAM_FILTER_WRITE, $param);
fwrite($fp, "This is a test.\n");
fclose($fp);
/* 出力: VGhpcyBp
: cyBhIHRl
: c3QuCg== */

$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.base64-decode');
fwrite($fp, "VGhpcyBpcyBhIHRlc3QuCg==");
fclose($fp);
/* 出力: This is a test. */
?>

convert.quoted-printable-encode と convert.quoted-printable-decode

これらのフィルタのうち、デコードフィルタはすべてのストリームデータに 対して quoted_printable_decode() 関数を適用するのと 同じ動作をします。 convert.quoted-printable-encode に対応する関数は存在しません。 convert.quoted-printable-encode は、パラメータを 連想配列形式で受け取ることができます。convert.base64-encode でサポートされているパラメータに加え、convert.quoted-printable-encode は binary と force-encode-first という２つの論理型パラメータをサポートしています。 convert.base64-decode は line-break-chars パラメータのみをサポートしており、 これは符号化されたデータを分割する際に用いられます。

例2 convert.quoted-printable-encode と convert.quoted-printable-decode

<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.quoted-printable-encode');
fwrite($fp, "This is a test.\n");
/* 出力: =This is a test.=0A */
?>

convert.iconv.*

convert.iconv.* フィルタは、 iconv サポートが有効になっている場合に利用できます。 このフィルタは、すべてのストリームデータに iconv() 関数を適用するのと 同じ動作をします。 これらのフィルタは引数をサポートしていませんが、 その代わりに、入力と出力のエンコーディングがフィルタ名の一部として与えられます。 つまり、以下のような形になります。 convert.iconv.<input-encoding>.<output-encoding> または convert.iconv.<input-encoding>/<output-encoding> (どちらの記法もセマンティクス的には同等です).

例3 convert.iconv.*

<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.iconv.utf-16le.utf-8');
fwrite($fp, "T\0h\0i\0s\0 \0i\0s\0 \0a\0 \0t\0e\0s\0t\0.\0\n\0");
fclose($fp);
/* 出力: This is a test. */
?>

User Contributed Notes

marcus at synchromedia dot co dot uk 10-May-2022 09:50
It's not quite obvious what all the available parameters are for convert.quoted-printable-encode. If you want the stream filter to act the same way as the quoted_printable_encode function, you need these extra params, for example:

stream_filter_append(
    STDOUT,
    'convert.quoted-printable-encode',
    STREAM_FILTER_WRITE,
    [
        'line-break-chars' => PHP_EOL,
        'line-length' => 75,
    ]
);
echo stream_copy_to_stream(STDIN, STDOUT);

Without these extra params set, you may get no wrapping at all, or wrapping using the wrong line break sequence.


圧縮フィルタ

圧縮ストリーム を用いれば ローカルファイルシステム上に gzip や bz2 と互換性のある圧縮ファイルを 作成することができます。しかし、これはネットワーク越しの圧縮機能を 持っておらず、また非圧縮ストリームを圧縮されたストリームに変換することも できません。その点、圧縮フィルタはどんなストリームリソースでもどんな場合 でも適用可能です。

注意: 圧縮フィルタは、gzip のようなコマンドライン ユーティリティで使われるヘッダを生成しません。 これらのフィルタは、（ヘッダ部を除いた）データストリームの本体のみを 圧縮・展開するものです。

zlib.deflate と zlib.inflate

zlib.deflate (圧縮) と zlib.inflate (展開) は、 » RFC 1951 で述べられている圧縮方法を 実装したものです。deflate フィルタには、次の 3 つの パラメータを連想配列形式で渡すことができます: level は、圧縮の度合いを 1から9 までで表した ものです。数字が大きいほど圧縮後のサイズが小さくなりますが、そのぶん 処理時間が長くかかります。次の2つの値は特別な意味を持ちます。 0 (一切圧縮しない)、そして -1 (zlib のデフォルト設定 -- 現在は 6)。 window は、圧縮用ループバックウィンドウのサイズを （2 を底とする）対数で指定します。大きな値 (15 -- つまり 32768 バイトまで 引き上げる) を指定するとメモリをふんだんに利用してより小さく圧縮されます。 一方、小さな値 (9 -- つまり 512 バイトまで絞り込む) を指定すると、圧縮の 効率は落ちますがメモリの消費量を抑えられます。値を指定しなかった際の window の初期値は、現在 15 です。 memory は、作業用の一時メモリをどの程度割り当てるかを 指定します。1 (最小限) から 9 (最大限) の間で指定できます。この値は 圧縮の速度のみに影響し、圧縮後のデータのサイズには影響しません。

注意: level は一番よく使われるパラメータなので、このパラメータについては （配列形式ではなく）直接整数値として設定することも可能にしています。

zlib サポートが有効な場合、 zlib.* 圧縮フィルタが利用可能になります。

例1 zlib.deflate と zlib.inflate

<?php
$params = array('level' => 6, 'window' => 15, 'memory' => 9);

$original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo "もとのテキストの長さは " . strlen($original_text) . " 文字です。\n";

$fp = fopen('test.deflated', 'w');
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params);
fwrite($fp, $original_text);
fclose($fp);

echo "圧縮後のファイルの大きさは " . filesize('test.deflated') . " バイトです。\n";
echo "もとのテキストは:\n";
/* readfile と zlib.inflate を利用し、メモリ上で展開します */
readfile('php://filter/zlib.inflate/resource=test.deflated');

/* 生成される出力:

もとのテキストの長さは 70 文字です。
圧縮後のファイルの大きさは 56 バイトです。
もとのテキストは:
This is a test.
This is only a test.
This is not an important string.

*/
?>

例2 zlib.deflate のシンプルな例

<?php
$original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo "もとのテキストの長さは " . strlen($original_text) . " 文字です。\n";

$fp = fopen('test.deflated', 'w');
/* この "6" は、パラメータ "level" が 6 であるということ */
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, 6);
fwrite($fp, $original_text);
fclose($fp);

echo "圧縮後のファイルの大きさは " . filesize('test.deflated') . " バイトです。\n";

/* 生成される出力:

もとのテキストの長さは 70 文字です。
圧縮後のファイルの大きさは 56 バイトです。

*/
?>

bzip2.compress と bzip2.decompress

bzip2.compress と bzip2.decompress は、上で示した zlib フィルタと同じような動作をします。 bzip2.compress フィルタには、次の 2 つの パラメータを連想配列形式で渡すことができます: blocks は 1 から 9 までの整数値を設定します。 これは一時領域として割り当てるメモリのサイズを 100kバイトブロックの 数で示したものです。 work も整数値で、0 から 250 までの値を設定します。 これは、通常の圧縮方法がうまくいかなかった際に、どのくらい再試行した後で 速度の遅い（ただしより確実な）方法に切りかえるかを示します。 このパラメータは圧縮の速度のみに影響します。圧縮後のデータのサイズや 圧縮時のメモリ使用量は変わりません。0 を指定した場合は、bzip ライブラリの 初期設定値が利用されます。 bzip2.decompress フィルタには 1 つのパラメータを 渡すことができます。このパラメータは普通に論理型の値として渡すことも できますし、連想配列形式で small という名前の 要素として渡すこともできます。 small を true に設定した場合、bzip ライブラリは メモリ使用量をできるだけ抑えるようになり、その分、処理速度は遅くなります。

bz2 サポートが有効な場合、 bzip2.* 圧縮フィルタが利用可能になります。

例3 bzip2.compress と bzip2.decompress

<?php
$param = array('blocks' => 9, 'work' => 0);

echo "もとのファイルの大きさは " . filesize('LICENSE') . " バイトです。\n";

$fp = fopen('LICENSE.compressed', 'w');
stream_filter_append($fp, 'bzip2.compress', STREAM_FILTER_WRITE, $param);
fwrite($fp, file_get_contents('LICENSE'));
fclose($fp);

echo "圧縮後のファイルの大きさは " . filesize('LICENSE.compressed') . " バイトです。\n";

/* 生成される出力:

もとのファイルの大きさは 3288 バイトです。
圧縮後のファイルの大きさは 1488 バイトです。

*/
?>

User Contributed Notes

TingSong 20-Feb-2023 03:43
To decompress a gzipped stream:

<?php
$stream = fopen('https://example.com/some/file.txt.gz', 'rb');
stream_filter_append($stream, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15+16]);

// read the decompressed line directly
$line = fgets($stream);

// process the lines
?>

As the doc of zlib https://www.zlib.net/manual.html#Advanced

The 'window' parameter between 8 and 15 specified the window size from 2? to 21? bytes. It can be added by 16 for wrapping with gzip header and trailer instead of zlib wrapper.

And, window could be -8..-15 for unwrapping RAW deflate data.
Anonymous 10-Feb-2021 06:37
To use the zlib.inflate filter with data originally written using gzcompress() or zlib.deflate, set the window option to 15 as outlined here: https://bugs.php.net/bug.php?id=68556

<?php
$fh = fopen(file_name, 'rb');
stream_filter_append($fh, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15]);
$contents = stream_get_contents($fh);
fclose($fh);
bohwaz 08-Jul-2018 01:39
Please note that there is currently a bug in this feature. ftell(), fseek() and fstat() functions cannot be used. Writing to a stream after using this function will not change the stream position as it should.

See bug: https://bugs.php.net/bug.php?id=49874

Also the zlib filters don't work with php://temp, php://memory and php://input streams, nothing is outputted to those streams.
Anonymous 21-Aug-2015 06:12
To read a gzip encoded stream from http
<?php
$opts = [
    "http" => [
        "method" => "GET",
        "header" => [ "Accept-Encoding: gzip" ],
    ]
];
$ctx = stream_context_create($opts);
$f = fopen("http://php.net", "r", false, $ctx);
// check  stream_get_meta_data($f)["wrapper_data"] has "Content-Encoding: gzip"
stream_filter_append($f, "zlib.inflate", STREAM_FILTER_READ, ["window" => 30]);
echo stream_get_contents($f); // any stream processing
fclose($f);


暗号化フィルタ

暗号化フィルタは、ファイル/ストリーム を暗号化する場合に特に有用です。

mcrypt.* と mdecrypt.*

警告

この機能は PHP 7.1.0 で 非推奨になります。この機能に頼らないことを強く推奨します。

mcrypt.* と mdecrypt.* は、libmcrypt を用いた暗号化・復号化を行います。これらのフィルタは、 mcrypt 暗号化関数 で利用可能な アルゴリズムをサポートしており、mcrypt.ciphername という名前で利用できます。ciphername の部分は、 mcrypt_module_open() に渡すのと同じアルゴリズム名 です。また、以下の 5 つのパラメータが利用できます。

mcrypt フィルタのパラメータ
パラメータ名 | 必須？ | 初期値 | 値の例
mode | 任意 | cbc | cbc, cfb, ecb, nofb, ofb, stream
algorithms_dir | 任意 | ini_get('mcrypt.algorithms_dir') | アルゴリズムモジュールのある場所
modes_dir | 任意 | ini_get('mcrypt.modes_dir') | モードモジュールのある場所
iv | 必須 | N/A | 通常は 8, 16, あるいは 32 バイトのバイナリデータ。暗号の形式に依存する
key | 必須 | N/A | 通常は 8, 16, あるいは 32 バイトのバイナリデータ。暗号の形式に依存する

例1 Blowfish を用いた 暗号化/復号化

<?php
//$key は、ここより以前で生成されているものとする
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
$fp = fopen('encrypted-file.enc', 'wb');
fwrite($fp, $iv);
$opts = array('mode'=>'cbc','iv'=>$iv, 'key'=>$key);
stream_filter_append($fp, 'mcrypt.blowfish', STREAM_FILTER_WRITE, $opts);
fwrite($fp, 'message to encrypt');
fclose($fp);

// 復号化する...
$fp = fopen('encrypted-file.enc', 'rb');
$iv = fread($fp, $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC));
$opts = array('mode'=>'cbc','iv'=>$iv, 'key'=>$key)
stream_filter_append($fp, 'mdecrypt.blowfish', STREAM_FILTER_READ, $opts);
$data = rtrim(stream_get_contents($fp));//trims off null padding
fclose($fp);
echo $data;
?>

例2 ファイルを AES-128 CBC と SHA256 HMAC で暗号化する

<?php
AES_CBC::encryptFile($password, "plaintext.txt", "encrypted.enc");
AES_CBC::decryptFile($password, "encrypted.enc", "decrypted.txt");

class AES_CBC
{
protected static $KEY_SIZES = array('AES-128'=>16,'AES-192'=>24,'AES-256'=>32);
protected static function key_size() { return self::$KEY_SIZES['AES-128']; } //default AES-128
public static function encryptFile($password, $input_stream, $aes_filename){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$fin = fopen($input_stream, "rb");
$fc = fopen($aes_filename, "wb+");
if (!empty($fin) && !empty($fc)) {
fwrite($fc, str_repeat("_", 32) );//placeholder, SHA256 HMAC will go here later
fwrite($fc, $hmac_salt = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
fwrite($fc, $esalt = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
fwrite($fc, $iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM));
$ekey = hash_pbkdf2("sha256", $password, $esalt, $it=1000, self::key_size(), $raw=true);
$opts = array('mode'=>'cbc', 'iv'=>$iv, 'key'=>$ekey);
stream_filter_append($fc, 'mcrypt.rijndael-128', STREAM_FILTER_WRITE, $opts);
$infilesize = 0;
while (!feof($fin)) {
$block = fread($fin, 8192);
$infilesize+=strlen($block);
fwrite($fc, $block);
}
$block_size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$padding = $block_size - ($infilesize % $block_size);//$padding is a number from 1-16
fwrite($fc, str_repeat(chr($padding), $padding) );//perform PKCS7 padding
fclose($fin);
fclose($fc);
$hmac_raw = self::calculate_hmac_after_32bytes($password, $hmac_salt, $aes_filename);
$fc = fopen($aes_filename, "rb+");
fwrite($fc, $hmac_raw);//overwrite placeholder
fclose($fc);
}
}
public static function decryptFile($password, $aes_filename, $out_stream) {
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$hmac_raw = file_get_contents($aes_filename, false, NULL, 0, 32);
$hmac_salt = file_get_contents($aes_filename, false, NULL, 32, $iv_size);
$hmac_calc = self::calculate_hmac_after_32bytes($password, $hmac_salt, $aes_filename);
$fc = fopen($aes_filename, "rb");
$fout = fopen($out_stream, 'wb');
if (!empty($fout) && !empty($fc) && self::hash_equals($hmac_raw,$hmac_calc)) {
fread($fc, 32+$iv_size);//skip sha256 hmac and salt
$esalt = fread($fc, $iv_size);
$iv = fread($fc, $iv_size);
$ekey = hash_pbkdf2("sha256", $password, $esalt, $it=1000, self::key_size(), $raw=true);
$opts = array('mode'=>'cbc', 'iv'=>$iv, 'key'=>$ekey);
stream_filter_append($fc, 'mdecrypt.rijndael-128', STREAM_FILTER_READ, $opts);
while (!feof($fc)) {
$block = fread($fc, 8192);
if (feof($fc)) {
$padding = ord($block[strlen($block) - 1]);//assume PKCS7 padding
$block = substr($block, 0, 0-$padding);
}
fwrite($fout, $block);
}
fclose($fout);
fclose($fc);
}
}
private static function hash_equals($str1, $str2) {
if(strlen($str1) == strlen($str2)) {
$res = $str1 ^ $str2;
for($ret=0,$i = strlen($res) - 1; $i >= 0; $i--) $ret |= ord($res[$i]);
return !$ret;
}
return false;
}
private static function calculate_hmac_after_32bytes($password, $hsalt, $filename) {
static $init=0;
$init or $init = stream_filter_register("user-filter.skipfirst32bytes", "FileSkip32Bytes");
$stream = 'php://filter/read=user-filter.skipfirst32bytes/resource=' . $filename;
$hkey = hash_pbkdf2("sha256", $password, $hsalt, $iterations=1000, 24, $raw=true);
return hash_hmac_file('sha256', $stream, $hkey, $raw=true);
}
}
class FileSkip32Bytes extends php_user_filter
{
private $skipped=0;
function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
$outlen = $bucket->datalen;
if ($this->skipped<32){
$outlen = min($bucket->datalen,32-$this->skipped);
$bucket->data = substr($bucket->data, $outlen);
$bucket->datalen = $bucket->datalen-$outlen;
$this->skipped+=$outlen;
}
$consumed += $outlen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
class AES_128_CBC extends AES_CBC {
protected static function key_size() { return self::$KEY_SIZES['AES-128']; }
}
class AES_192_CBC extends AES_CBC {
protected static function key_size() { return self::$KEY_SIZES['AES-192']; }
}
class AES_256_CBC extends AES_CBC {
protected static function key_size() { return self::$KEY_SIZES['AES-256']; }
}

User Contributed Notes

Maarten Bodewes 06-Aug-2017 12:21
The examples on this page should be destroyed with utmost urgency.

Strangely most people will fall over the use of generating the IV and 3DES key using MD5, a weak hash function, e.g. the previous note and CryptoFails blog.

http://www.cryptofails.com/post/70059608390/php-documentation-woes

A password based key derivation function should be used (bcrypt, PBKDF2).

However the use of MD-5 for key derivation however isn't that bad and if the password is strong enough (it usually isn't) then the generated DES ABC key is strong enough even now.

Using an identical IV for each password means that this function directly leaks information about the encrypted file. If the start of two encrypted files is identical then this function will directly leak information. For instance, if the routine encrypts multiple images then the JPEG header would be easily distinguished.

All in all these examples use deprecated routines (mcrypt), deprecated cryptographic functions (MD5 / DES) and then incorrectly perform the actual encryption. Enough reason to destroy them in the first place.
Uwe Ohse 22-Feb-2017 04:17
1) The mcrypt module has been deprecated with PHP 7.1.
What does that mean for the encryption filters?

2) deriving the IV from the secret passphrase seems wrong. This leaks information about the passphrase without need.

3) using md5() for this? Really? hash() has been available since PHP 5.1.2.

4) hashing the passphrase twice does not add any security.

5) using substr() on binary data (why, oh why, is true passed to md5()?) might lead to headaches if mbstring.func_overload is used.


サポートされるソケットトランスポートのリスト

目次

  • Internet ドメイン: TCP、UDP、SSL、および TLS
  • Unix ドメイン: Unix および UDG

以下は、PHP がビルトインで持っている fsockopen() や stream_socket_client() のような ストリームに基づくソケットトランスポートとともに使用できる URL 形式のソケットトランスポートのリストです。 これらの転送は ソケット拡張モジュールの ソケット関数には 適用されません。

自分が使用している PHP のバージョンのトランスポートのリストを得るには stream_get_transports() を使用してください。

User Contributed Notes

alefinvest at outlook dot com 06-Aug-2021 06:47
That was hard to fetch this page mentioned in note by other user long time ago.
I intended to read Appendix P to find some code examples.
Wondering how to implement custom transport extension for php on our server tto be used with some nowadays technologies research.
https://www.php.net/manual/ru/function.stream-context-create.php#75211


Internet ドメイン: TCP、UDP、SSL、および TLS

ssl://, tls://, sslv2:// & sslv3://.

注意: トランスポートが指定されなければ、tcp:// と仮定されます。

  • 127.0.0.1
  • fe80::1
  • www.example.com
  • tcp://127.0.0.1
  • tcp://fe80::1
  • tcp://www.example.com
  • udp://www.example.com
  • ssl://www.example.com
  • sslv2://www.example.com
  • sslv3://www.example.com
  • tls://www.example.com

Internet ドメインソケットは、対象のアドレスに加えてポート番号を 受け付けます。fsockopen() の場合、これは 2 番目の パラメータとして指定するので、トランスポートの URL には影響を与えません。 しかし、stream_socket_client() および関連する関数では 伝統的な URL を使用します。この場合、ポート番号はトランスポート URL の 後にコロンで区切ってつなげます。

  • tcp://127.0.0.1:80
  • tcp://[fe80::1]:80
  • tcp://www.example.com:80

注意: IPv6 数値アドレスとポート番号
IPv4 やホスト名形式の例では、ポート番号はアドレスやホスト名の直後に コロンでつながっていますが、上の 2 番目の例では IPv6 アドレスが 角括弧でかこまれて [fe80::1] となっています。 これは、IPv6 アドレスに使用されるコロンとポート番号を表す際のコロンを 区別するためです。

ssl:// および tls:// のトランスポート （PHP が openssl サポートを含めてコンパイルされている場合のみ有効）は、 tcp:// トランスポートに SSL 暗号化を含めた拡張です。

ssl:// は SSL V2 での接続を試みます。 あるいはリモートホストの設定によっては SSL V3 での接続を試みます。 sslv2:// および sslv3:// は、SSL V2 と SSL V3 のどちらのプロトコルを 使用するかを明示的に指定します。

User Contributed Notes

christian at lantian dot eu 17-Sep-2013 12:46
@pablo dot livardo  :  I think that the problem you found is caused by the difference between the client/server encryption methods used.

The 465 port is used for SMTPS, and the server starts the encryption immediately it receives your connection. So, your code will work.

The 587 port is used for Submission (MSA or Mail Submission Agent) which works like the port 25. The server accepts your connection and doesn't activate the encryption. If you want an encrypted connection on the port 587, you must connect on it without encryption, you must start to dialog with the server (with EHLO) and after that you must ask the server to start the encrypted connection using the STARTTLS command. The server starts the encryption and now you can start as well the encryption on your client.

So, in few words, you can not use :

<?php $fp = fsockopen("tls://mail.example.com", 587, $errno, $errstr);  ?>

but you can use:

 <?php $fp = stream_socket_client("mail.example.com:587", $errno, $errstr); ?>

and after you send the STARTTLS command, you can enable the crypto:

<?php stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT); ?>

P.S. My previous note on this page was totally wrong, so I ask the php.net admin to remove it.

:)
christian at lantian dot eu 16-Sep-2013 08:17
@pablo dot livardo  :  I think that the problem you found is caused by the difference between the client/server encryption methods used.

You tried to access the port 587 using TLS encryption, but the server uses the SSLv3 encryption on this port.

You can communicate with the Google server on port 465 because on this port the communication is encrypted using TLS and your client is configured to recognize the TLS.

So, if you want to connect on the Google server over the port 587, you simply must write:

<?php
$fp = fsockopen("ssl://mail.example.com", 587, $errno, $errstr);
?>

instead of:

<?php
$fp = fsockopen("tls://mail.example.com", 587, $errno, $errstr);
?>

:)
stefan at example dot com 20-Aug-2010 05:42
Actually, PHP is very able to start with an unencrypted connection and then switch to an encrypted one - refer to http://php.net/stream_socket_enable_crypto .
pablo dot livardo at gmail dot com 09-Dec-2009 09:56
I've been having a problem with a TLS connection.

<?php
$fp = fsockopen("tls://mail.example.com", 587, $errno, $errstr);
?>

Which gives me an error of:

SSL operation failed with code 1. OpenSSL Error messages: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

I believe this is caused by PHP not being able to start with an unencrypted connection and then switch to encryption even though the functionality is built into OpenSSL.

For Google Mail users you can avoid this by using port 465 instead of 587.


Unix ドメイン: Unix および UDG

unix:// および udg://

  • unix:///tmp/mysock
  • udg:///tmp/mysock

unix:// は、Unix ドメインを使用したソケットストリーム 接続へのアクセスを提供します。udg:// は、UDP を使用した別方式での Unix ドメインソケットのトランスポートを提供します。

Unix ドメインソケットは、Internet ドメインソケットと異なり ポート番号を受け付けません。fsockopen() の場合、 portno パラメータは 0 に設定します。

注意: Unix ドメインソケットは、Windows ではサポートされていません。

User Contributed Notes

Matthew Fortune 16-Feb-2007 03:03
It appears that fsockopen prior to php5 did not need the unix:// qualifier when opening a unix domain socket:

php4: fsockopen("/tmp/mysocket"......);

php5: fsockopen("unix:///tmp/mysocket"......);

This caught me out when upgrading.


PHP 型の比較表

下記の表はPHPの型と 比較演算子 の振る舞いについて、緩やかな場合と厳密な場合の両方について 例を示しています。この付録はマニュアルの 型の相互変換 にも関連しています。種々のユーザーコメントと » BlueShoesの働きの おかげです。

この表を活用する前に、型とその意味について理解しておく必要があります。 例えば、"42"は文字列ですが 42は整数です。 falseはboolですが"false"は 文字列です。

注意:

HTMLフォームは整数、浮動小数点数、booleanを渡してはくれず、 文字列を渡します。文字が数値であるかどうか確認するには、 is_numeric()を使うとよいでしょう。

注意:

$xが定義されていない状態で単に
if ($x)とするとE_NOTICE
レベルのエラーが発生します。代わりに、empty()や
isset()を使うか、あるいは変数を初期化するように
してください。

注意:

数値演算の結果が、定数 NAN で表される値になることがあります。 この値を他の値と比較すると、緩やかな比較および厳密な比較のいずれでも結果は false になります。 自分自身と比較した場合も含みますが、true と比較した場合は除きます。 (つまり NAN != NAN であり NAN !== NAN であるということです)。 結果が NAN になる演算の例には sqrt(-1) や asin(2) そして acosh(0) があります。

PHP 関数による $x の比較
式 | gettype() | empty() | is_null() | isset() | bool : if($x)
$x = ""; | string | true | false | true | false
$x = null; | NULL | true | true | false | false
var $x; | NULL | true | true | false | false
$x が未定義 | NULL | true | true | false | false
$x = []; | array | true | false | true | false
$x = ['a', 'b']; | array | false | false | true | true
$x = false; | bool | true | false | true | false
$x = true; | bool | false | false | true | true
$x = 1; | int | false | false | true | true
$x = 42; | int | false | false | true | true
$x = 0; | int | true | false | true | false
$x = -1; | int | false | false | true | true
$x = "1"; | string | false | false | true | true
$x = "0"; | string | true | false | true | false
$x = "-1"; | string | false | false | true | true
$x = "php"; | string | false | false | true | true
$x = "true"; | string | false | false | true | true
$x = "false"; | string | false | false | true | true

== による緩やかな比較
 | true | false | 1 | 0 | -1 | "1" | "0" | "-1" | null | [] | "php" | ""
true | true | false | true | false | true | true | false | true | false | false | true | false
false | false | true | false | true | false | false | true | false | true | true | false | true
1 | true | false | true | false | false | true | false | false | false | false | false | false
0 | false | true | false | true | false | false | true | false | true | false | false* | false*
-1 | true | false | false | false | true | false | false | true | false | false | false | false
"1" | true | false | true | false | false | true | false | false | false | false | false | false
"0" | false | true | false | true | false | false | true | false | false | false | false | false
"-1" | true | false | false | false | true | false | false | true | false | false | false | false
null | false | true | false | true | false | false | false | false | true | true | false | true
[] | false | true | false | false | false | false | false | false | true | true | false | false
"php" | true | false | false | false* | false | false | false | false | false | false | true | false
"" | false | true | false | false* | false | false | false | false | true | false | false | true
* PHP 8.0.0 より前のバージョンでは、true でした。

=== による厳密な比較
 | true | false | 1 | 0 | -1 | "1" | "0" | "-1" | null | [] | "php" | ""
true | true | false | false | false | false | false | false | false | false | false | false | false
false | false | true | false | false | false | false | false | false | false | false | false | false
1 | false | false | true | false | false | false | false | false | false | false | false | false
0 | false | false | false | true | false | false | false | false | false | false | false | false
-1 | false | false | false | false | true | false | false | false | false | false | false | false
"1" | false | false | false | false | false | true | false | false | false | false | false | false
"0" | false | false | false | false | false | false | true | false | false | false | false | false
"-1" | false | false | false | false | false | false | false | true | false | false | false | false
null | false | false | false | false | false | false | false | false | true | false | false | false
[] | false | false | false | false | false | false | false | false | false | true | false | false
"php" | false | false | false | false | false | false | false | false | false | false | true | false
"" | false | false | false | false | false | false | false | false | false | false | false | true

User Contributed Notes

Jeroen 14-Jul-2023 04:26
Be aware of the difference between checking the *value* of an array item, and checking the *existence* of an array item:
<?php
$arr = [
  'x' => 0,
  'y' => null,
];

isset($arr['x']); // true, same as isset(0)
isset($arr['y']); // false, same as isset(null)

array_key_exists('y', $arr); // true, though the value is null
array_key_exists('z', $arr); // false
mark at theanti dot social 29-Mar-2018 08:59
There is also 0.0 which is not identical to 0.

  $x = 0.0;
  gettype($x); // double
  empty($x); // true
  is_null($x); //false
  isset($x); // true
  is_numeric($x); // true
  $x ? true : false; // false
  $x == 0; // true
  $x == "0"; // true
  $x == "0.0"; // true
  $x == false; // true
  $x == null; // true
  $x === 0; // false
  $x === false; // false
  $x === null; // false
  $x === "0"; // false
  $x === "0.0"; // false
blue dot hirano at gmail dot com 07-Sep-2014 02:29
The truth tables really ought to be colorized; they're very hard to read as they are right now (just big arrays of TRUE and FALSE).

Also, something to consider: clustering the values which compare similarly (like is done on qntm.org/equality) would make the table easier to read as well. (This can be done simply by hand by rearranging the order of headings to bring related values closer together).
php at benizi dot com 15-Feb-2010 10:31
It's interesting to note that 'empty()' and 'boolean : if($x)'
are paired as logical opposites, as are 'is_null()' and 'isset()'.
edgar at goodforall dot eu 15-Dec-2009 06:55
Some function to write out your own comparisson table in tsv format. Can be easily modified to add more testcases and/or binary functions. It will test all comparables against each other with all functions.

<?php
$funcs = array(
        /* Testing equality */
        'eq' => '==',
        'ne' => '!=',
        'gt' => '>',
        'lt' => '<',
        'ne2' => '<>',
        'lte' => '<=',
        'gte' => '>=',
        /* Testing identity */
        'id' => '===',
        'nid' => '!=='
);
class Test {
        protected $a;
        public $b;
        public function __construct($a,$b){
                $this->a = $a;
                $this->b = $b;
        }
        public function getab(){
                return $this->a.",". $this->b;
        }

}
$tst1 = new Test(1,2);
$tst2 = new Test(1,2);
$tst3 = new Test(2,2);
$tst4 = new Test(1,1);

$arr1 = array(1,2,3);
$arr2 = array(2,3,4);
$arr3 = array('a','b','c','d');
$arr4 = array('a','b','c');
$arr5 = array();

$comp1 = array(
        'ints' => array(-1,0,1,2),
        'floats' => array(-1.1,0.0,1.1,2.0),
        'string' => array('str', 'str1', '', '1'),
        'bools' => array(true, false),
        'null' => array(null),
        'objects' => array($tst1,$tst2,$tst3,$tst4),
        'arrays' => array($arr1, $arr2, $arr3, $arr4, $arr5)
);
$fbody = array();

foreach($funcs as $name => $op){
        $fbody[$name] = create_function('$a,$b', 'return $a ' . $op . ' $b;');
}

$table = array(array('function', 'comp1', 'comp2', 'f comp1 comp2', 'type'));
/* Do comparisons */
$comp2  = array();
foreach($comp1 as $type => $val){
        $comp2[$type] = $val;
}

foreach($comp1 as $key1 => $val1){
        foreach($comp2 as $key2 => $val2){
                addTableEntry($key1, $key2, $val1, $val2);
        }
}
$out = '';
foreach($table as $row){
        $out .= sprintf("%-20s\t%-20s\t%-20s\t%-20s\t%-20s\n", $row[0], $row[1], $row[2], $row[3], $row[4]);
}

print $out;
exit;

function addTableEntry($n1, $n2, $comp1, $comp2){
        global $table, $fbody;
        foreach($fbody as $fname => $func){
                        foreach($comp1 as $val1){
  foreach($comp2 as $val2){
                                        $val = $func($val1,$val2);
                                                $table[] = array($fname, gettype($val1) . ' => ' . sprintval($val1), gettype($val2) .' => ' . sprintval($val2), gettype($val) . ' => ' . sprintval($val), gettype($val1) . "-" . gettype($val2) . '-' . $fname);
                                        }
                        }
        }
}

function sprintval($val){
        if(is_object($val)){
                return 'object-' . $val->getab();
        }
        if(is_array($val)){
                return implode(',', $val);
        }
        if(is_bool($val)){
                if($val){
                        return 'true';
                }
                return 'false';
        }
        return strval($val);
}

?>
frank 14-Aug-2007 03:06
A comparison table for <=,<,=>,> would be nice...
Following are TRUE (tested PHP4&5):
NULL <= -1
NULL <= 0
NULL <= 1
!(NULL >= -1)
NULL >= 0
!(NULL >= 1)
That was a surprise for me (and it is not like SQL, I would like to have the option to have SQL semantics with NULL...).
Jan 29-Dec-2005 11:23
Note that php comparison is not transitive:

"php" == 0 => true
0 == null => true
null == "php" => false
jerryschwartz at comfortable dot com 26-Jul-2005 01:04
In some languages, a boolean is promoted to an integer (with a value of 1 or -1, typically) if used in an expression with an integer. I found that PHP has it both ways:

If you add a boolean with a value of true to an integer with a value of 3, the result will be 4 (because the boolean is cast as an integer).

On the other hand, if you test a boolean with a value of true for equality with an integer with a value of three, the result will be true (because the integer is cast as a boolean).

Surprisingly, at first glance, if you use either < or > as the comparison operator the result is always false (again, because the integer as cast as a boolean, and true is neither greater nor less than true).


パーサトークンの一覧

PHP 言語の種々の部分は、内部的に トークン で表現されています。 不正なトークンのシーケンスが含まれるコードスニペットの場合、 Parse error: syntax error, unexpected token "==", expecting "(" in script.php on line 10." のようなエラーが発生します。 この場合、トークン == が内部的に T_IS_EQUAL として表現されています。

以下の表に、全てのトークンの一覧を示します。 これらは、全て PHP の定数としても利用できます。

注意: 定数 T_* の使いかた

T_* (T_ で始まる) 定数は、 PHP のベースとなるパーサ基盤に基づいて自動生成されます。 つまり、トークンの具体的な値は、PHP のバージョンが違えば変わる可能性があるということです。 つまり、バージョン間で互換性を保つためには、 コードの中では決して T_* の実際の値を使ってはいけないということです。

異なる PHP のバージョン間で互換性を保った形で T_* 定数を使うには、 PHP の複数のバージョン間で T_* の値が動作するように、 (10000 のような大きな数を使うなどの) 適切な戦略を用いて、未定義の定数をユーザが定義するようにします。

<?php
// PHP 7.4.0 より前のバージョンでは、定数 T_FN は定義されていません
defined('T_FN') || define('T_FN', 10001);

トークン
トークン | 構文 | 参照先
T_ABSTRACT | abstract | クラスの抽象化
T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG | & | 型宣言 (PHP 8.1.0 以降で利用可能)
T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG | & | 型宣言 (PHP 8.1.0 以降で利用可能)
T_AND_EQUAL | &= | 代入演算子
T_ARRAY | array() | array(), array 構文
T_ARRAY_CAST | (array) | 型キャスト
T_AS | as | foreach
T_ATTRIBUTE | #[ | アトリビュート (PHP 8.0.0 以降で利用可能)
T_BAD_CHARACTER |  | ASCII 32以下の全ての文字。\t (0x09), \n (0x0a) , \r (0x0d) は除く (PHP 7.4.0 以降で利用可能)
T_BOOLEAN_AND | && | 論理演算子
T_BOOLEAN_OR | || | 論理演算子
T_BOOL_CAST | (bool) or (boolean) | 型キャスト
T_BREAK | break | break
T_CALLABLE | callable | callable
T_CASE | case | switch
T_CATCH | catch | 例外(exceptions)
T_CLASS | class | クラスとオブジェクト
T_CLASS_C | __CLASS__ | マジック定数
T_CLONE | clone | クラスとオブジェクト
T_CLOSE_TAG | ?> or %> | HTML からの脱出
T_COALESCE | ?? | 比較演算子
T_COALESCE_EQUAL | ??= | NULL合体代入演算子 (PHP 7.4.0 以降で利用可能)
T_COMMENT | // or #, and /* */ | コメント
T_CONCAT_EQUAL | .= | 代入演算子
T_CONST | const | クラス定数
T_CONSTANT_ENCAPSED_STRING | "foo" or 'bar' | 文字列構文
T_CONTINUE | continue | continue
T_CURLY_OPEN | {$ | 複雑な (波括弧) 構文
T_DEC | -- | 可算/減算演算子
T_DECLARE | declare | declare
T_DEFAULT | default | switch
T_DIR | __DIR__ | マジック定数
T_DIV_EQUAL | /= | 代入演算子
T_DNUMBER | 0.12, etc. | 浮動小数点数
T_DO | do | do..while
T_DOC_COMMENT | /** */ | PHPDoc 形式のコメント
T_DOLLAR_OPEN_CURLY_BRACES | ${ | 複雑な (波括弧) 構文
T_DOUBLE_ARROW | => | array 構文
T_DOUBLE_CAST | (real), (double) or (float) | 型キャスト
T_DOUBLE_COLON | :: | T_PAAMAYIM_NEKUDOTAYIM を参照ください
T_ECHO | echo | echo
T_ELLIPSIS | ... | 関数の引数
T_ELSE | else | else
T_ELSEIF | elseif | elseif
T_EMPTY | empty | empty()
T_ENCAPSED_AND_WHITESPACE | " $a" | 文字列のパース
T_ENDDECLARE | enddeclare | declare, 別の構文
T_ENDFOR | endfor | for, 別の構文
T_ENDFOREACH | endforeach | foreach, 別の構文
T_ENDIF | endif | if, 別の構文
T_ENDSWITCH | endswitch | switch, 別の構文
T_ENDWHILE | endwhile | while, 別の構文
T_ENUM | enum | Enumerations (PHP 8.1.0 以降で利用可能)
T_END_HEREDOC |  | ヒアドキュメント構文
T_EVAL | eval() | eval()
T_EXIT | exit or die | exit(), die()
T_EXTENDS | extends | extends, クラスとオブジェクト
T_FILE | __FILE__ | マジック定数
T_FINAL | final | finalキーワード
T_FINALLY | finally | 例外(exceptions)
T_FN | fn | アロー関数 (PHP 7.4.0 以降で利用可能)
T_FOR | for | for
T_FOREACH | foreach | foreach
T_FUNCTION | function | 関数
T_FUNC_C | __FUNCTION__ | マジック定数
T_GLOBAL | global | 変数のスコープ
T_GOTO | goto | goto
T_HALT_COMPILER | __halt_compiler() | __halt_compiler
T_IF | if | if
T_IMPLEMENTS | implements | オブジェクト インターフェイス
T_INC | ++ | 可算/減算演算子
T_INCLUDE | include | include
T_INCLUDE_ONCE | include_once | include_once
T_INLINE_HTML |  | PHP の外部のテキスト
T_INSTANCEOF | instanceof | 型演算子
T_INSTEADOF | insteadof | トレイト
T_INTERFACE | interface | オブジェクト インターフェイス
T_INT_CAST | (int) or (integer) | 型キャスト
T_ISSET | isset() | isset()
T_IS_EQUAL | == | 比較演算子
T_IS_GREATER_OR_EQUAL | >= | 比較演算子
T_IS_IDENTICAL | === | 比較演算子
T_IS_NOT_EQUAL | != or <> | 比較演算子
T_IS_NOT_IDENTICAL | !== | 比較演算子
T_IS_SMALLER_OR_EQUAL | <= | 比較演算子
T_LINE | __LINE__ | マジック定数
T_LIST | list() | list()
T_LNUMBER | 123, 012, 0x1ac, etc. | 整数
T_LOGICAL_AND | and | 論理演算子
T_LOGICAL_OR | or | 論理演算子
T_LOGICAL_XOR | xor | 論理演算子
T_MATCH | match | match (PHP 8.0.0 以降で利用可能)
T_METHOD_C | __METHOD__ | マジック定数
T_MINUS_EQUAL | -= | 代入演算子
T_MOD_EQUAL | %= | 代入演算子
T_MUL_EQUAL | *= | 代入演算子
T_NAMESPACE | namespace | 名前空間
T_NAME_FULLY_QUALIFIED | \App\Namespace | 名前空間 (PHP 8.0.0 以降で利用可能)
T_NAME_QUALIFIED | App\Namespace | 名前空間 (PHP 8.0.0 以降で利用可能)
T_NAME_RELATIVE | namespace\Namespace | 名前空間 (PHP 8.0.0 以降で利用可能)
T_NEW | new | クラスとオブジェクト
T_NS_C | __NAMESPACE__ | 名前空間
T_NS_SEPARATOR | \ | 名前空間
T_NUM_STRING | "$a[0]" | 文字列内の配列の添字
T_OBJECT_CAST | (object) | 型キャスト
T_OBJECT_OPERATOR | -> | クラスとオブジェクト
T_NULLSAFE_OBJECT_OPERATOR | ?-> | クラスとオブジェクト
T_OPEN_TAG | <?php, <? or <% | HTML からのエスケープ
T_OPEN_TAG_WITH_ECHO | <?= or <%= | escaping from HTML
T_OR_EQUAL | |= | 代入演算子
T_PAAMAYIM_NEKUDOTAYIM | :: | ::. T_DOUBLE_COLONとしても定義されています。
T_PLUS_EQUAL | += | 代入演算子
T_POW | ** | 算術演算子
T_POW_EQUAL | **= | 代入演算子
T_PRINT | print | print
T_PRIVATE | private | クラスとオブジェクト
T_PROTECTED | protected | クラスとオブジェクト
T_PUBLIC | public | クラスとオブジェクト
T_READONLY | readonly | クラスとオブジェクト (PHP 8.1.0 以降で利用可能)
T_REQUIRE | require | require
T_REQUIRE_ONCE | require_once | require_once
T_RETURN | return | 値を返す
T_SL | << | ビット演算子
T_SL_EQUAL | <<= | 代入演算子
T_SPACESHIP | <=> | 比較演算子
T_SR | >> | ビット演算子
T_SR_EQUAL | >>= | 代入演算子
T_START_HEREDOC | <<< | ヒアドキュメント構文
T_STATIC | static | 変数のスコープ
T_STRING | parent, self, etc. | 識別子。たとえば parent や self といったオブジェクト指向のキーワード、そして関数名やクラス名などにマッチします。 T_CONSTANT_ENCAPSED_STRING も参照ください。
T_STRING_CAST | (string) | 型キャスト
T_STRING_VARNAME | "${a | 複雑な (波括弧) 構文
T_SWITCH | switch | switch
T_THROW | throw | 例外(exceptions)
T_TRAIT | trait | トレイト
T_TRAIT_C | __TRAIT__ | __TRAIT__
T_TRY | try | 例外(exceptions)
T_UNSET | unset() | unset()
T_UNSET_CAST | (unset) | 型キャスト
T_USE | use | 名前空間
T_VAR | var | クラスとオブジェクト
T_VARIABLE | $foo | 変数
T_WHILE | while | while, do..while
T_WHITESPACE | \t \r\n |
T_XOR_EQUAL | ^= | 代入演算子
T_YIELD | yield | ジェネレータ
T_YIELD_FROM | yield from | ジェネレータ

token_name() も参照ください。

User Contributed Notes

daniel_rhodes at yahoo dot co dot uk 28-Mar-2024 08:41
In the above table of Tokens, it's worth noting that the bracketed text of "available as of PHP x.y.z" can mean one of two things:

[] This *parser token* is available as of PHP x.y.z
    {eg. T_BAD_CHARACTER, T_NAME_QUALIFIED}

[] This *language feature* is available as of PHP x.y.z
    {eg. T_ATTRIBUTE, T_COALESCE_EQUAL}
fgm at osinet dot fr 22-Sep-2008 01:08
T_ENCAPSED_AND_WHITESPACED is returned when parsing strings with evaluated content, like "some $value" or this example from the Strings reference page:

<?php
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>

This last example is tokenized as:
T_ECHO
  echo
T_WHITESPACE
  %20 (a space character)
T_START_HEREDOC
  <<
T_ENCAPSED_AND_WHITESPACE
  My name is "
T_VARIABLE
  $name
T_ENCAPSED_AND_WHITESPACE
  ". I am printing some
T_VARIABLE
  $foo
T_OBJECT_OPERATOR
  ->
T_STRING
  foo
T_ENCAPSED_AND_WHITESPACE
  . Now, I am printing some
T_CURLY_OPEN
  {
T_VARIABLE
  $foo
T_OBJECT_OPERATOR
  ->
T_STRING
  bar
(terminal)
  [
T_LNUMBER
  1
(terminal)
  ]
(terminal)
  }
T_ENCAPSED_AND_WHITESPACE
  . This should print a capital 'A': \x41
T_END_HEREDOC
  EOT
(terminal)
  ;
nathan at unfinitydesign dot com 22-Sep-2008 05:52
T_ENCAPSED_AND_WHITESPACE is whitespace which intersects a group of tokens. For example, an "unexpected T_ENCAPSED_AND_WHITESPACE" error is produced by the following code:

<?php
$main_output_world = 'snakes!';
echo('There are' 10 $main_output_world);
?>

Note the missing concatenation operator between the two strings leads to the whitespace error that is so named above. The concatenation operator instructs PHP to ignore the whitespace between the two code tokens (the so named "encapsed" data"), rather than parse it as a token itself.

The correct code would be:

<?php
$main_output_world = 'snakes!';
echo('There are' . 10 . $main_output_world);
?>

Note the addition of the concatenation operator between each token.


ユーザーレベルでの命名の手引き

目次

  • グローバル名前空間
  • ルール
  • Tips

これは、あなたが書く PHP コード中の識別子によりよい名前をつけるための手引きです。 グローバル名前空間のシンボルを作成するコードでシンボルの名前を決める際には、 以下のガイドラインを考慮することが重要です。これにより、 PHP の将来のバージョンとの衝突を避けることができます。

User Contributed Notes

There are no user contributed notes for this page.


グローバル名前空間

グローバル名前空間に属する言語構造には、このようなものがあります。

  • 関数

  • クラス

  • インターフェイス

  • 定数 (クラス定数以外)

  • 関数/メソッド の外部で定義された変数

User Contributed Notes

There are no user contributed notes for this page.


ルール

以下のリストは、PHP プロジェクトで新たな内部識別子を作成する際に どのような基準で名前を決めているのかを おおまかにまとめたものです。完全な規約は、公式の » コーディング規約 を参照ください。

  • PHP はトップレベルの名前空間を所有していますが、 きちんとしたわかりやすい名前をつけるようにこころがけ、 衝突が起こらないようにしています。

  • 関数名では、単語の間にアンダースコアを使用します。クラスの場合は、 キャメルケース (camelCase) 形式や パスカルケース (PascalCase) 形式を使います。

  • PHP の拡張モジュールのグローバルシンボルには、 その拡張モジュールの名前を先頭につけます (過去には、この原則を守っていない例が大量にありました)。 たとえば次のようになります。

    • curl_close()

    • mysql_query()

    • PREG_SPLIT_DELIM_CAPTURE

    • new DOMDocument()

    • strpos() (過去に間違えた例)

    • new SplFileObject()

  • しかし、イテレータや例外については、単純に最後に "Iterator" および "Exception" を追加するようにします。例えば次のようになります。

    • ArrayIterator

    • LogicException

  • PHP では、__ で始まるシンボルを特殊なものとして予約済みです。 以下にあげるような文書化されている機能を使用する場合を除き、 __ で始まるシンボルを作成しないことを推奨します。

    • __get()

    • __autoload()

User Contributed Notes

There are no user contributed notes for this page.


Tips

将来もそのまま使用できるようなコードを書くためには、 グローバル名前空間にあまり多くの変数や関数やクラスを置かないことをおすすめします。 そうしておけば、サードパーティのコードと名前が衝突したり PHP 自体に追加された機能と名前が衝突したりする可能性を減らせます。

関数やクラスの名前が衝突することを防ぐ手としてよくあるのが、 それ専用の namespace を用意することです。

<?php

namespace MyProject;

function my_function() {
return true;
}

\MyProject\my_function();

既存の名前空間と名前が重複してしまわないように気をつける必要はありますが、 いったん名前空間を用意してしまえば、そこに関数やクラスを追加するときには 名前が衝突する心配をせずに済むようになります。

サードパーティのコードとの名前の衝突を防ぐという意味で、 グローバル名前空間への変数の追加をできるだけ避けるというのはよい習慣だと考えられています。

注意: 変数のスコープ

PHP の 変数のスコープのルール では、関数やメソッドの内部で定義した変数はグローバルスコープにはなりません。 そのため、グローバルスコープで定義された変数との名前の衝突を気にする必要はありません。

User Contributed Notes

There are no user contributed notes for this page.


マニュアルについて

目次

  • フォーマット
  • ユーザーノートについて
  • 関数の定義(プロトタイプ)を読むには
  • 本マニュアルに記載された PHP のバージョン
  • PHP に関する更なる情報を得るには
  • ドキュメントの改善を手助けするには
  • 各種フォーマットを生成する方法
  • 翻訳

User Contributed Notes

There are no user contributed notes for this page.


フォーマット

PHP のマニュアルはいくつかのフォーマットで提供されています。 大まかに言うとフォーマットには2つの種類があります。オンラインで 読むことのできるフォーマットとダウンロード可能なパッケージです。

注意:

いくつかの出版社は印刷されたマニュアルを提供しています。私たち としてはそれらをお勧めすることは出来ません。何故ならそういった ものはすぐに古いものになってしまいがちだからです。

オンラインマニュアルは » PHP.net Web サイト で読むことができます。 オンライン版の PHP マニュアルには、現在二種類の CSS スタイルシートが提供されています。それぞれ、 ウェブでの閲覧に適したものと、プリンタでの印刷に適したものです。

オンラインマニュアルがオフライン版より優れている点は、 ユーザーノートと 見たいマニュアルのページを速やかに入手できる » URL ショートカットが 統合されていることでしょう。不利な点は、当然ですがマニュアルを見るためには 常にオンラインでいる必要があることです。

オフラインフォーマットにはいくつかのタイプがあるので、使用している OS や読み方にあわせて最適なものを選択してください。これらの異なった フォーマットのドキュメントをどのように生成しているかという 情報については、この付録の 各種フォーマットを生成する方法の項を読んでください。

最もプラットフォーム依存性が少いマニュアルのフォーマットは HTML 版です。このマニュアルは、一つのファイルにまとめられたものと、 章ごとに分割されたファイルのパッケージ (その結果、総数は数千にもなっています)の両方があります。 これらの HTML 版は圧縮された状態で提供されているため、 アーカイブの中のファイルを取得するには解凍用ユーティリティ が必要です。

Windows 上では、Windows HTML Help で Windows HTML Help 版のマニュアルを使用すると非常に便利です。このバージョンは全文検索、完全な目次、 そしてブックマーク機能を提供します。多くの有名な Windows 上での PHP 開発環境ではこのバージョンのマニュアルを統合する機能を備えていて、 間単にアクセスすることが出来ます。Linux デスクトップ用の CHM ビューワも 利用可能です。 » xCHM または » GnoCHM を参照ください。

» 拡張 CHM 版も使用可能です。 その更新頻度はより少なくなっていますが、より多くの追加機能があります。 これは、ヘルプページを構築する際に使用される技術のために Microsoft Windows でのみ動作します。

User Contributed Notes

There are no user contributed notes for this page.


ユーザーノートについて

ユーザーノートは PHP マニュアルを作成していく上で重要な役割を 持っています。マニュアルの読者が実例、警告そしてさらに詳しい 説明をブラウザから提供できるようにすることで、そうした フィードバックをマニュアルの本文に取り込むことが出来るのです。 そして記事が本文に取り入れられるまでの間は、その内容をオンライン、 もしくはいくつかのオフラインフォーマットで参照できるでしょう。

ユーザーノートが PHP のサイトに表示される際に、何らかの 査閲がされているわけではない、ということに注意してください。 従って、そこに書かれた内容、実例の質については保証 されません(とはいえ、マニュアルの本文そのものの 質が保証されない、ということではありません)。

注意:

著作権の適用範囲として、ユーザーノートは PHP マニュアルの一部と見なされます。 それゆえ、このドキュメンテーションのライセンス(現状は Creative Commons Attribution License)が適用されます。 詳細は Manual's Copyright をご覧ください。

User Contributed Notes

There are no user contributed notes for this page.


関数の定義(プロトタイプ)を読むには

各関数についてクイックリファレンスが記述されているので、 マニュアルを読み理解するノウハウは PHP の利用をより簡単にしてくれます。 例示やカットアンドペーストに頼るより、関数の定義（プロトタイプ）を 読む方法を覚えるべきです。やってみましょう:

注意: 前提条件: 型の基本的な理解

PHP は型についてルーズな言語ですが、重要な意味があるので、 型の基本を理解することは重要です。

関数の定義には戻り値が どんな型であるかが示されています。最初の例として、 strlen()の定義を考えてみましょう。

strlen ( string $string ) : int

(PHP 4, PHP 5, PHP 7)
 strlen -- 文字列の長さを得る

 説明
int strlen ( string $string )

指定した文字列の長さを返します

関数の定義の説明
Part | 説明
strlen | 関数の名前
(PHP 4, PHP 5, PHP 7) | strlen()は PHP 4 と PHP 5、そして PHP 7 のすべてのバージョンで使用できる
( string $string ) | strlen() 関数の最初の（この場合は唯一の）引数が stringという名前であり それは文字列である
int | 関数が戻す値の型。ここでは整数型 (文字列の長さが数字で数えられている)

上の関数定義は、一般的な書き方では以下のようにも書けます。

     function name    ( parameter type   parameter name ) : returned type

多くの関数は複数の引数を取ります。例えば in_array()。 このプロトタイプは次のようになります:

      in_array ( mixed $needle, array $haystack , bool $strict = false ) : bool

これは何を意味しているのでしょう？ in_array() は boolean の値を返します。 成功した場合は true(needle が haystack の中にある場合)、失敗した場合に false を返します (needle が haystack の中にない場合)。最初の引数は needle と名づけられており、それは多くの違った 型をとることができます。その場合"mixed"と 呼ばれます。 needle (我々が探しているもの)はスカラー値（文字列,整数, 又は float)でも、 配列でもかまいません。 haystack (対象を探す配列)は二番目の引数です。 三番目のオプションの引数は strict と名づけられています。全てのオプション引数はデフォルト値を持ちます。 デフォルト値が不明な場合、? と表示されます。 strict パラメータはデフォルトでは boolean の false であるとマニュアルに述べられています。機能の詳細については 各関数のマニュアルをご覧ください。

さらに、& (アンパサンド) 記号を関数のパラメータの前につけると、 そのパラメータをリファレンス渡しにすることができます。

       preg_match ( string $pattern , string $subject , array &$matches = null,
       int $flags = 0 , int $offset = 0 ) : int|false

この例では、三番目のオプションのパラメータ &$matches がリファレンス渡しとなります。

より複雑なバージョンとの関係を有する関数もあります。以下が html_entity_decode() の例です。

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

これは、この関数が PHP 4.3.0 以降のバージョンでのみ利用可能であることを意味します。

User Contributed Notes

There are no user contributed notes for this page.


本マニュアルに記載された PHP のバージョン

このマニュアルに含まれている情報は、過去や現在のバージョンの PHP だけでなく将来のバージョンの PHP に関するものもあります。 バージョン間での変更内容は「注意」や「更新履歴」 あるいはマニュアルの本文の中で説明しています。 このドキュメントでは、PHP 7.0.0 以降のバージョンを扱っています。

最新の (まだリリースされていない) 開発版に関するドキュメントには "Git 版のみ" や "開発版" といった記述があります。 これらの変更は予定通りに進むのが普通ですが、まれに予定が変更されることもあります。

開発はすべて Git で進められており、 » 匿名での Git へのアクセス のページに書かれている方法でチェックアウトすることができます。

マニュアルでは、PHP のバージョンをメジャー、マイナー、ポイントの三つで表します。 たとえば PHP 7.3.1 を例にとると、7 がメジャーリリースで 3 がマイナーリリース、 そして 1 がポイントリリースとなります。 通常 PHP では、新機能の追加はメジャーリリースやマイナーリリースでしか行いません。 しかし、この決まりが常に守られるとは限りません。

また、PHP のマニュアルは現在形で書かれていることに注意しましょう。 たとえその機能がまだ搭載されていなくても、未来形にはなりません。 マニュアルは長く使い続けられるものです。 PHP のリリースのたびに時制の変更を繰り返すのは退屈な作業なので、そのようにしました。

PHP のマニュアルでは、多くの項目で「デフォルト値」を記載しています。 これらの値は、設定ファイル php.ini がないときの PHP の挙動にもとづいています。 そのため、同梱の設定ファイル php.ini-development や php.ini-production に書かれている内容とは異なる可能性があります。 これらの値は最新版の PHP にもとづくものですが、 過去の値についても更新履歴に記載しています。 これらの値や変更履歴についての詳細は PHP ディレクティブのリスト を参照ください。

User Contributed Notes

There are no user contributed notes for this page.


PHP に関する更なる情報を得るには

このマニュアルは一般的なプログラミングの解説を提供しよう としているわけではありません。従って、もしあなたが全く初めて プログラミングを行う、もしくはほとんど初心者である、と言う場合は このマニュアルだけを使って、PHP のプログラミングを習得するのは 難しいでしょう。そうした場合には初心者向けの本を探したほうが よいかもしれません。

PHP に関する様々な側面について活発に議論しているメーリングリストも 多数あります。もし問題にぶつかったら、これらのメーリングリストの 利用を考えてください。メーリングリストを含むサポート情報は » PHP.net サポートページ にあります。

User Contributed Notes

There are no user contributed notes for this page.


ドキュメントの改善を手助けするには

ドキュメントを改善していくには 複数のやり方があります。

もし(どの言語でかかれたものでも)マニュアルに間違いが見つかったら » https://github.com/php にある、各言語の issue tracker を使って問題を報告して下さい。 たとえば、日本語版のマニュアルについては、 » https://github.com/php/doc-ja/issues になります。 マニュアルのフォーマットを含め、 ドキュメントに関する問題はすべてここから送信してください。

注意:

issue tracker に助けを要求することでシステムを無駄に使用しないでください。 かわりに、たくさんの» サポートオプション の中のひとつを利用してください。

各ページに注釈をつけることで、原文に実例、警告等の更なる説明を 追加することが出来ます。とはいえ、この注釈システムを使って バグレポートを送信しないでください。ユーザーノートの詳細については、 ユーザーノートについての 項を読んでください。

» PHP マニュアルのリポジトリのミラー 経由で Pull Request を送信することもできます。

PHP マニュアルは多くの言語に翻訳されています。英語とその他の外国語が わかる方なら、翻訳チームを手伝うことで PHP マニュアルの改善に協力できます。 新しく翻訳を始めたい場合や、現在翻訳されているバージョンを手伝おうと 思ったら、» http://doc.php.net/tutorial/ を是非読んでください。

PHP ドキュメント作成プロジェクトの IRC チャネルには、マニュアルの 作者の多くが参加しています。irc.efnet.org の #php.doc で、PHP ドキュメントを改善する方法に ついて議論しましょう。

User Contributed Notes

There are no user contributed notes for this page.


各種フォーマットを生成する方法

このマニュアルは、» DocBook XML DTD を用いて XML で記述されています。 また、» PhD (The [PH]P based [D]ocBook renderer) を用いて保守やフォーマットを行います。

XML をソースファイルのフォーマットとして 使用することで、一つのソースファイルを管理するだけで、 多くの出力形式を生成することができるようになっています。 オンライン版のマニュアルを作成する際には » PhD を使用しています。 Windows HTML Help 形式のマニュアルを作成するためには » Microsoft HTML Help Workshop を使用しています。またちょっとした変換処理やフォーマットの 処理にはもちろん PHP を使っています。

PHP マニュアルは多くの言語とフォーマットで作成されています。詳しい 情報は » https://www.php.net/docs.php を参照ください。 このドキュメントの XML ソースコードは、 » https://github.com/php/doc-ja からダウンロードしたり、閲覧したりできます。

User Contributed Notes

There are no user contributed notes for this page.


翻訳

PHP マニュアルはさまざまな形式で読めるだけでなく、さまざまな言語で 読むことができます。マニュアルの文章はまず最初に英語で書かれ、 その後世界中のチームによってそれぞれの母国語に翻訳されます。 もし特定の関数や章がまだ翻訳されていない場合、マニュアル生成システム はその英語版を自動的に挿入します。

翻訳に携わる人は » https://github.com/php/doc-ja から アクセスできる XML ソースコードを母国語に 翻訳することから始めます。生成されたバージョン（HTML やプレーンテキストなど）を扱うことはありません。 XMLを人間が読める形式に変換する処理をしてくれるのが ビルドシステムです。

注意:

もしドキュメントをあなたの母国語に翻訳することを手伝いたいと思ったら、 phpdocメーリングリストに加入してドキュメント／翻訳チームと連絡を取ってください。 » phpdoc+subscribe@lists.php.net に空のメールを送るだけです。 メーリングリストのアドレスは phpdoc@lists.php.net です。 マニュアルの翻訳に関心があることをメッセージに書いてください。 誰かから返事をもらって新しい言語への翻訳をスタートする手助けをしてもらうか、 あるいは、その言語について既に活動している翻訳チームと連絡が取れます。

現在のところ、10 以上の言語において全て又は一部のマニュアルが利用できます。

これらはすべて、» https://www.php.net/docs.php からダウンロードできます。

User Contributed Notes

There are no user contributed notes for this page.


Creative Commons Attribution 3.0

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.

1. Definitions

  1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
  2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
  3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
  4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
  5. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
  6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
  7. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
  8. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.

2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.

3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:

  1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
  2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
  3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
  4. to Distribute and Publicly Perform Adaptations.

  5. For the avoidance of doubt:

    1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
    2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
    3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.

The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.

4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:

  1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested.
  2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
  3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.

5. Representations, Warranties and Disclaimer

UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.

6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. Termination.

  1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
  2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.

8. Miscellaneous

  1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
  2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
  3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
  4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent
  5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
  6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.

User Contributed Notes

There are no user contributed notes for this page.


索引

目次

  • 関数・メソッド
  • サンプル

User Contributed Notes

There are no user contributed notes for this page.


関数・メソッド

マニュアル内の全関数およびメソッドの一覧

a b c d e f g h i j k l m n o p q r s t u v w x y z _

  • a
    • abs - 絶対値
    • acos - 逆余弦（アークコサイン）
    • acosh - 逆双曲線余弦（アークハイパボリックコサイン）
    • addcslashes - C 言語と同様にスラッシュで文字列をクォートする
    • addslashes - 文字列をスラッシュでクォートする
    • AllowDynamicProperties::__construct - 新しい AllowDynamicProperties のインスタンスを作成する
    • apache_child_terminate - このリクエストの後にApacheプロセスを終了する
    • apache_getenv - Apache の subprocess_env 変数を取得する
    • apache_get_modules - ロードされた Apache モジュールのリストを取得する
    • apache_get_version - Apache のバージョンを取得する
    • apache_lookup_uri - リクエストの一部を指定したURIに対して行い、全ての情報を返す
    • apache_note - Apacheリクエスト記号(note)を取得/設定する
    • apache_request_headers - すべての HTTP リクエストヘッダを取得する
    • apache_response_headers - HTTPレスポンスヘッダを全て取得する
    • apache_setenv - Apacheサブプロセスの環境変数を設定する
    • APCUIterator::current - 現在の項目を取得する
    • APCUIterator::getTotalCount - 総数を取得する
    • APCUIterator::getTotalHits - キャッシュヒットの総数を取得する
    • APCUIterator::getTotalSize - キャッシュのサイズの合計を取得する
    • APCUIterator::key - イテレータのキーを取得する
    • APCUIterator::next - ポインタを次の項目に移動させる
    • APCUIterator::rewind - イテレータを巻き戻す
    • APCUIterator::valid - 現在位置が有効かどうかを調べる
    • APCUIterator::__construct - APCUIterator イテレータオブジェクトを作成する
    • apcu_add - 新規の変数をデータ領域にキャッシュする
    • apcu_cache_info - APCu のデータから、キャッシュされた情報を取得する
    • apcu_cas - 古い値を新しい値に更新する
    • apcu_clear_cache - APCu キャッシュをクリアする
    • apcu_dec - 保存した数値を減らす
    • apcu_delete - 格納されている変数をキャッシュから取り除く
    • apcu_enabled - 現在の環境で apcu が使えるかを確認する
    • apcu_entry - アトミックに値を取得するか、キャッシュエントリを生成する
    • apcu_exists - エントリが存在するかどうかを調べる
    • apcu_fetch - 格納されている変数をキャッシュから取得する
    • apcu_inc - 保存した数値を増やす
    • apcu_key_info - キャッシュのキーに関する詳細な情報を取得する
    • apcu_sma_info - APCu の共有メモリ割り当てに関する情報を取得する
    • apcu_store - 変数をデータ領域にキャッシュする
    • AppendIterator::append - イテレータを追加する
    • AppendIterator::current - 現在の値を取得する
    • AppendIterator::getArrayIterator - ArrayIterator を取得する
    • AppendIterator::getIteratorIndex - イテレータのインデックスを取得する
    • AppendIterator::key - 現在のキーを取得する
    • AppendIterator::next - 次の要素に移動する
    • AppendIterator::rewind - イテレータを巻き戻す
    • AppendIterator::valid - 現在の要素が有効かどうかを調べる
    • AppendIterator::__construct - AppendIterator を作成する
    • array - 配列を生成する
    • ArrayAccess::offsetExists - オフセットが存在するかどうか
    • ArrayAccess::offsetGet - オフセットを取得する
    • ArrayAccess::offsetSet - 指定したオフセットに値を設定する
    • ArrayAccess::offsetUnset - オフセットの設定を解除する
    • ArrayIterator::append - 要素を追加する
    • ArrayIterator::asort - 値で配列をソートする
    • ArrayIterator::count - 要素を数える
    • ArrayIterator::current - 現在の配列エントリを返す
    • ArrayIterator::getArrayCopy - 配列のコピーを取得する
    • ArrayIterator::getFlags - 振る舞いのフラグを取得する
    • ArrayIterator::key - 現在の配列キーを返す
    • ArrayIterator::ksort - キーで配列をソートする
    • ArrayIterator::natcasesort - 大文字小文字を区別せずに自然順で配列をソートする
    • ArrayIterator::natsort - 自然順で配列をソートする
    • ArrayIterator::next - 次のエントリに移動する
    • ArrayIterator::offsetExists - オフセットが存在するかどうかを調べる
    • ArrayIterator::offsetGet - オフセットの値を取得する
    • ArrayIterator::offsetSet - オフセットの値を設定する
    • ArrayIterator::offsetUnset - オフセットの値を削除する
    • ArrayIterator::rewind - 配列を最初に巻き戻す
    • ArrayIterator::seek - 位置を移動する
    • ArrayIterator::serialize - シリアライズする
    • ArrayIterator::setFlags - 振る舞いのフラグを設定する
    • ArrayIterator::uasort - ユーザー定義の比較関数を使ってソートを行い、インデックスとの関連を管理する
    • ArrayIterator::uksort - ユーザー定義の比較関数を使い、キーでソートする
    • ArrayIterator::unserialize - アンシリアライズする
    • ArrayIterator::valid - 配列がまだエントリを持っているかどうかチェックする
    • ArrayIterator::__construct - ArrayIterator を作成する
    • ArrayObject::append - 値を追加する
    • ArrayObject::asort - 値でエントリをソートする
    • ArrayObject::count - ArrayObject の public プロパティの数を取得する
    • ArrayObject::exchangeArray - 配列を別の配列と交換する
    • ArrayObject::getArrayCopy - ArrayObject のコピーを作成する
    • ArrayObject::getFlags - 振る舞いのフラグを取得する
    • ArrayObject::getIterator - ArrayObject インスタンスから新規イテレータを生成する
    • ArrayObject::getIteratorClass - ArrayObject のイテレータクラス名を取得する
    • ArrayObject::ksort - キーでエントリをソートする
    • ArrayObject::natcasesort - 大文字小文字を区別しない "自然順" アルゴリズムでエントリをソートする
    • ArrayObject::natsort - "自然順" アルゴリズムでエントリをソートする
    • ArrayObject::offsetExists - 要求されたインデックスが存在するかどうかを返す
    • ArrayObject::offsetGet - 指定したインデックスの値を返す
    • ArrayObject::offsetSet - 指定したインデックスに新しい値をセットする
    • ArrayObject::offsetUnset - 指定したインデックスの値を解除する
    • ArrayObject::serialize - ArrayObject をシリアライズする
    • ArrayObject::setFlags - 処理フラグを設定する
    • ArrayObject::setIteratorClass - ArrayObject のイテレータクラス名を設定する
    • ArrayObject::uasort - ユーザー定義の比較関数でエントリをソートし、キーとの対応は保持する
    • ArrayObject::uksort - ユーザー定義の比較関数を使って、キーでエントリをソートする
    • ArrayObject::unserialize - ArrayObject をアンシリアライズする
    • ArrayObject::__construct - 新規配列オブジェクトを生成する
    • array_change_key_case - 配列のすべてのキーの大文字小文字を変更する
    • array_chunk - 配列を分割する
    • array_column - 入力配列から単一のカラムの値を返す
    • array_combine - 一方の配列をキーとして、もう一方の配列を値として、ひとつの配列を生成する
    • array_count_values - 配列内に存在する、異なる値の出現回数を数える
    • array_diff - 配列の差を計算する
    • array_diff_assoc - 追加された添字の確認を含めて配列の差を計算する
    • array_diff_key - キーを基準にして配列の差を計算する
    • array_diff_uassoc - ユーザーが指定したコールバック関数を利用し、 追加された添字の確認を含めて配列の差を計算する
    • array_diff_ukey - キーを基準にし、コールバック関数を用いて配列の差を計算する
    • array_fill - 配列を指定した値で埋める
    • array_fill_keys - キーを指定して、配列を値で埋める
    • array_filter - コールバック関数を使用して、配列の要素をフィルタリングする
    • array_flip - 配列のキーと値を反転する
    • array_intersect - 配列の共通項を計算する
    • array_intersect_assoc - 追加された添字の確認も含めて配列の共通項を確認する
    • array_intersect_key - キーを基準にして配列の共通項を計算する
    • array_intersect_uassoc - 追加された添字の確認も含め、コールバック関数を用いて 配列の共通項を確認する
    • array_intersect_ukey - キーを基準にし、コールバック関数を用いて 配列の共通項を計算する
    • array_is_list - 指定された配列がリストかどうかをチェックする
    • array_keys - 配列のキーすべて、あるいはその一部を返す
    • array_key_exists - 指定したキーまたは添字が配列にあるかどうかを調べる
    • array_key_first - 配列の最初のキーを得る
    • array_key_last - 配列の最後のキーを得る
    • array_map - 指定した配列の要素にコールバック関数を適用する
    • array_merge - ひとつまたは複数の配列をマージする
    • array_merge_recursive - 一つ以上の配列を再帰的にマージする
    • array_multisort - 複数または多次元の配列をソートする
    • array_pad - 指定長、指定した値で配列を埋める
    • array_pop - 配列の末尾から要素を取り除く
    • array_product - 配列の値の積を計算する
    • array_push - 一つ以上の要素を配列の最後に追加する
    • array_rand - 配列から一つ以上のキーをランダムに取得する
    • array_reduce - コールバック関数を繰り返し配列に適用し、配列をひとつの値にまとめる
    • array_replace - 渡された配列の要素を置き換える
    • array_replace_recursive - 渡された配列の要素を再帰的に置き換える
    • array_reverse - 要素を逆順にした配列を返す
    • array_search - 指定した値を配列で検索し、見つかった場合に対応する最初のキーを返す
    • array_shift - 配列の先頭から要素を一つ取り出す
    • array_slice - 配列の一部を展開する
    • array_splice - 配列の一部を削除し、他の要素で置換する
    • array_sum - 配列の中の値の合計を計算する
    • array_udiff - データの比較にコールバック関数を用い、配列の差を計算する
    • array_udiff_assoc - データの比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算する
    • array_udiff_uassoc - データと添字の比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算する
    • array_uintersect - データの比較にコールバック関数を用い、配列の共通項を計算する
    • array_uintersect_assoc - データの比較にコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算する
    • array_uintersect_uassoc - データと添字の比較に個別のコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算する
    • array_unique - 配列から重複した値を削除する
    • array_unshift - 一つ以上の要素を配列の最初に加える
    • array_values - 配列の全ての値を返す
    • array_walk - 配列の全ての要素にユーザー定義の関数を適用する
    • array_walk_recursive - 配列の全ての要素に、ユーザー関数を再帰的に適用する
    • arsort - 連想キーと要素との関係を維持しつつ配列を降順にソートする
    • asin - 逆正弦（アークサイン）
    • asinh - 逆双曲線正弦（アークハイパボリックサイン）
    • asort - 連想キーと要素との関係を維持しつつ配列を昇順にソートする
    • assert - アサーションの値を調べる
    • assert_options - 様々な assert フラグを設定/取得する
    • atan - 逆正接（アークタンジェント）
    • atan2 - 2 変数のアークタンジェント
    • atanh - 逆双曲線正接（アークハイパボリックタンジェント）
    • Attribute::__construct - 新しい Attribute のインスタンスを作成する
  • b
    • BackedEnum::from - スカラー型の値を列挙型にマップする
    • BackedEnum::tryFrom - スカラー型の値を列挙型にマップするか、null を返す
    • base64_decode - MIME base64 方式によりエンコードされたデータをデコードする
    • base64_encode - MIME base64 方式でデータをエンコードする
    • basename - パスの最後にある名前の部分を返す
    • BaseResult::getWarnings - 直近の操作の警告を取得する
    • BaseResult::getWarningsCount - 直近の操作から発生した警告の数を取得する
    • base_convert - 数値の基数を任意に変換する
    • bcadd - 2つの任意精度の数値を加算する
    • bccomp - 2 つの任意精度数値を比較する
    • bcdiv - 2つの任意精度数値で除算を行う
    • bcmod - 2 つの任意精度数値の剰余を取得する
    • bcmul - 2つの任意精度数値の乗算を行う
    • bcpow - 任意精度数値をべき乗する
    • bcpowmod - 任意精度数値のべき乗の、指定した数値による剰余
    • bcscale - すべての BC 演算関数におけるデフォルトのスケールを設定/取得する
    • bcsqrt - 任意精度数値の平方根を取得する
    • bcsub - 任意精度数値の減算を行う
    • bin2hex - バイナリのデータを16進表現に変換する
    • bindec - 2 進数 を 10 進数に変換する
    • bindtextdomain - ドメインのパスを取得/設定する
    • bind_textdomain_codeset - DOMAIN メッセージカタログから返されるメッセージの文字エンコーディングを設定/取得する
    • boolval - 変数の boolean としての値を取得する
    • bzclose - bzip2 ファイルを閉じる
    • bzcompress - 文字列をbzip2形式のデータに圧縮する
    • bzdecompress - bzip2 形式のデータを解凍する
    • bzerrno - bzip2 エラー番号を返す
    • bzerror - bzip2 エラー番号とエラー文字列を配列で返す
    • bzerrstr - bzip2 エラー文字列を返す
    • bzflush - 何もしない
    • bzopen - bzip2 圧縮されたファイルをオープンする
    • bzread - バイナリ対応の bzip2 ファイル読み込み
    • bzwrite - バイナリ対応の bzip2 ファイルへの書き込み
  • c
    • CachingIterator::count - イテレータ内の要素の数
    • CachingIterator::current - 現在の要素を返す
    • CachingIterator::getCache - キャッシュの内容を取得する
    • CachingIterator::getFlags - 使用しているフラグを取得する
    • CachingIterator::hasNext - 内部イテレータが有効な次の要素を持つかどうかをチェックする
    • CachingIterator::key - 現在の要素のキーを返す
    • CachingIterator::next - イテレータを前方に移動する
    • CachingIterator::offsetExists - The offsetExists purpose
    • CachingIterator::offsetGet - The offsetGet purpose
    • CachingIterator::offsetSet - The offsetSet purpose
    • CachingIterator::offsetUnset - The offsetUnset purpose
    • CachingIterator::rewind - イテレータを巻き戻す
    • CachingIterator::setFlags - The setFlags purpose
    • CachingIterator::valid - 現在の要素が有効かどうかをチェックする
    • CachingIterator::__construct - 新しい CachingIterator オブジェクトを作成する
    • CachingIterator::__toString - 現在の要素の文字列表現を返す
    • CallbackFilterIterator::accept - 現在の値、現在のキー、そして内部イテレータを引数としてでコールバックを呼び出す
    • CallbackFilterIterator::__construct - フィルタリングしたイテレータを別のイテレータから作成する
    • call_user_func - 最初の引数で指定したコールバック関数をコールする
    • call_user_func_array - パラメータの配列を指定してコールバック関数をコールする
    • cal_days_in_month - 指定した年とカレンダーについて、月の日数を返す
    • cal_from_jd - ユリウス積算日からサポートされるカレンダーに変換する
    • cal_info - 特定のカレンダーに関する情報を返す
    • cal_to_jd - サポートされるカレンダーからユリウス積算日に変換する
    • ceil - 端数の切り上げ
    • chdir - ディレクトリを変更する
    • checkdate - グレゴリオ暦の日付/時刻の妥当性を確認します
    • checkdnsrr - 指定したインターネットホスト名もしくは IP アドレスに対応する DNS レコードを検索する
    • chgrp - ファイルのグループを変更する
    • chmod - ファイルのモードを変更する
    • chop - rtrim のエイリアス
    • chown - ファイルの所有者を変更する
    • chr - 数値から、1バイトの文字列を生成する
    • chroot - ルートディレクトリを変更する
    • chunk_split - 文字列をより小さな部分に分割する
    • class_alias - クラスのエイリアスを作成する
    • class_exists - クラスが定義済みかどうかを確認する
    • class_implements - 与えられたクラスあるいはインターフェイスが実装しているインターフェイスを返す
    • class_parents - 与えられたクラスの親クラスを返す
    • class_uses - 指定したクラスが使っているトレイトを返す
    • clearstatcache - ファイルのステータスのキャッシュをクリアする
    • Client::getClient - クライアントのセッションを取得する
    • Client::__construct - Client のコンストラクタ
    • cli_get_process_title - 現在のプロセスのタイトルを返す
    • cli_set_process_title - プロセスのタイトルを設定する
    • closedir - ディレクトリハンドルをクローズする
    • closelog - システムログへの接続を閉じる
    • Closure::bind - バインドされたオブジェクトとクラスのスコープでクロージャを複製する
    • Closure::bindTo - 新しくバインドしたオブジェクトとクラスのスコープで、クロージャを複製する
    • Closure::call - クロージャを束縛して呼び出す
    • Closure::fromCallable - callable をクロージャに変換する
    • Closure::__construct - インスタンス作成を無効化したコンストラクタ
    • Collator::asort - インデックスの情報を保持しつつ配列を並べ替える
    • Collator::compare - ふたつの Unicode 文字列を比較する
    • Collator::create - collator を作成する
    • Collator::getAttribute - 照合用の属性の値を取得する
    • Collator::getErrorCode - collator の直近のエラーコードを取得する
    • Collator::getErrorMessage - collator の直近のエラーコードのテキストを取得する
    • Collator::getLocale - collator のロケール名を取得する
    • Collator::getSortKey - 文字列のソート用のキーを取得する
    • Collator::getStrength - 現在の照合強度を取得する
    • Collator::setAttribute - 照合用の属性を設定する
    • Collator::setStrength - 照合強度を設定する
    • Collator::sort - 指定した collator で配列を並べ替える
    • Collator::sortWithSortKeys - 指定した collator とキーで配列を並べ替える
    • Collator::__construct - collator を作成する
    • Collectable::isGarbage - Determine whether an object has been marked as garbage
    • Collection::add - コレクションにドキュメントを追加する
    • Collection::addOrReplaceOne - コレクションのドキュメントを追加または置換する
    • Collection::count - ドキュメントの数を取得する
    • Collection::createIndex - コレクションにインデックスを作成
    • Collection::dropIndex - コレクションのインデックスを削除
    • Collection::existsInDatabase - コレクションがデータベースに存在するかをチェックする
    • Collection::find - ドキュメントを検索する
    • Collection::getName - コレクションの名前を得る
    • Collection::getOne - ドキュメントをひとつ取得
    • Collection::getSchema - スキーマオブジェクトを得る
    • Collection::getSession - セッションオブジェクトを取得
    • Collection::modify - コレクションのドキュメントを変更する
    • Collection::remove - コレクションを削除する
    • Collection::removeOne - コレクションからドキュメントをひとつ削除する
    • Collection::replaceOne - コレクションのドキュメントをひとつ置き換える
    • Collection::__construct - Collection のコンストラクタ
    • CollectionAdd::execute - ステートメントを実行する
    • CollectionAdd::__construct - CollectionAdd のコンストラクタ
    • CollectionFind::bind - クエリのプレースホルダーに値をバインドする
    • CollectionFind::execute - ステートメントを実行する
    • CollectionFind::fields - ドキュメントのフィールドのフィルタを設定する
    • CollectionFind::groupBy - グループ化の条件を設定する
    • CollectionFind::having - 集約関数の条件を設定する
    • CollectionFind::limit - 返されるドキュメントの数を限定する
    • CollectionFind::lockExclusive - Execute operation with EXCLUSIVE LOCK
    • CollectionFind::lockShared - SHARED LOCK 付きで操作を実行する
    • CollectionFind::offset - 返される要素の数から、与えられた数をスキップする
    • CollectionFind::sort - ソート条件を設定する
    • CollectionFind::__construct - CollectionFind のコンストラクタ
    • CollectionModify::arrayAppend - 配列のフィールドに要素を追加する
    • CollectionModify::arrayInsert - 配列のフィールドに要素を挿入する
    • CollectionModify::bind - クエリのプレースホルダーに値をバインドする
    • CollectionModify::execute - 変更の操作を実行する
    • CollectionModify::limit - 変更されるドキュメントの数を限定する
    • CollectionModify::patch - document にパッチを当てる
    • CollectionModify::replace - ドキュメントのフィールドを置き換える
    • CollectionModify::set - ドキュメントの属性を設定する
    • CollectionModify::skip - 要素をスキップする
    • CollectionModify::sort - ソート条件を設定する
    • CollectionModify::unset - ドキュメントのフィールドの値を削除する
    • CollectionModify::__construct - CollectionModify のコンストラクタ
    • CollectionRemove::bind - プレースホルダーに値をバインドする
    • CollectionRemove::execute - 削除操作を実行する
    • CollectionRemove::limit - 削除するドキュメントの数を限定する
    • CollectionRemove::sort - ソート条件を設定する
    • CollectionRemove::__construct - CollectionRemove のコンストラクタ
    • ColumnResult::getCharacterSetName - キャラクタセットを取得する
    • ColumnResult::getCollationName - 照合順序名を取得する
    • ColumnResult::getColumnLabel - カラムのラベルを取得する
    • ColumnResult::getColumnName - カラム名を取得する
    • ColumnResult::getFractionalDigits - カラムの小数の桁数を取得する
    • ColumnResult::getLength - カラムのフィールドの長さを取得する
    • ColumnResult::getSchemaName - スキーマ名を取得する
    • ColumnResult::getTableLabel - テーブルラベルを取得する
    • ColumnResult::getTableName - テーブル名を取得する
    • ColumnResult::getType - カラムの型を取得する
    • ColumnResult::isNumberSigned - 符号付きの型かどうかを調べる
    • ColumnResult::isPadded - パディングされているかを調べる
    • ColumnResult::__construct - ColumnResult のコンストラクタ
    • com::__construct - com クラスのコンストラクタ
    • CommonMark\CQL::__construct - CQL Construction
    • CommonMark\CQL::__invoke - CQL Execution
    • CommonMark\Interfaces\IVisitable::accept - Visitation
    • CommonMark\Interfaces\IVisitor::enter - Visitation
    • CommonMark\Interfaces\IVisitor::leave - Visitation
    • CommonMark\Node::accept - Visitation
    • CommonMark\Node::appendChild - AST Manipulation
    • CommonMark\Node::insertAfter - AST Manipulation
    • CommonMark\Node::insertBefore - AST Manipulation
    • CommonMark\Node::prependChild - AST Manipulation
    • CommonMark\Node::replace - AST Manipulation
    • CommonMark\Node::unlink - AST Manipulation
    • CommonMark\Node\BulletList::__construct - BulletList Construction
    • CommonMark\Node\CodeBlock::__construct - CodeBlock Construction
    • CommonMark\Node\Heading::__construct - Heading Construction
    • CommonMark\Node\Image::__construct - Image Construction
    • CommonMark\Node\Link::__construct - Link Construction
    • CommonMark\Node\OrderedList::__construct - OrderedList Construction
    • CommonMark\Node\Text::__construct - Text Construction
    • CommonMark\Parse - Parsing
    • CommonMark\Parser::finish - Parsing
    • CommonMark\Parser::parse - Parsing
    • CommonMark\Parser::__construct - Parsing
    • CommonMark\Render - Rendering
    • CommonMark\Render\HTML - Rendering
    • CommonMark\Render\Latex - Rendering
    • CommonMark\Render\Man - Rendering
    • CommonMark\Render\XML - Rendering
    • compact - 変数名とその値から配列を作成する
    • COMPersistHelper::GetCurFileName - 現在のファイル名を取得する
    • COMPersistHelper::GetMaxStreamSize - ストリームのサイズの最大値を取得する
    • COMPersistHelper::InitNew - オブジェクトをデフォルトの状態に初期化する
    • COMPersistHelper::LoadFromFile - オブジェクトをファイルから読み込む
    • COMPersistHelper::LoadFromStream - ストリームからオブジェクトを読み込む
    • COMPersistHelper::SaveToFile - オブジェクトをファイルに保存する
    • COMPersistHelper::SaveToStream - オブジェクトをストリームに保存する
    • COMPersistHelper::__construct - COMPersistHelper オブジェクトを構築する
    • Componere\Abstract\Definition::addInterface - Add Interface
    • Componere\Abstract\Definition::addMethod - Add Method
    • Componere\Abstract\Definition::addTrait - Add Trait
    • Componere\Abstract\Definition::getReflector - Reflection
    • Componere\cast - Casting
    • Componere\cast_by_ref - Casting
    • Componere\Definition::addConstant - Add Constant
    • Componere\Definition::addProperty - Add Property
    • Componere\Definition::getClosure - Get Closure
    • Componere\Definition::getClosures - Get Closures
    • Componere\Definition::isRegistered - State Detection
    • Componere\Definition::register - Registration
    • Componere\Definition::__construct - Definition Construction
    • Componere\Method::getReflector - Reflection
    • Componere\Method::setPrivate - Accessibility Modification
    • Componere\Method::setProtected - Accessibility Modification
    • Componere\Method::setStatic - Accessibility Modification
    • Componere\Method::__construct - Method Construction
    • Componere\Patch::apply - Application
    • Componere\Patch::derive - Patch Derivation
    • Componere\Patch::getClosure - Get Closure
    • Componere\Patch::getClosures - Get Closures
    • Componere\Patch::isApplied - State Detection
    • Componere\Patch::revert - Reversal
    • Componere\Patch::__construct - Patch Construction
    • Componere\Value::hasDefault - Value Interaction
    • Componere\Value::isPrivate - Accessibility Detection
    • Componere\Value::isProtected - Accessibility Detection
    • Componere\Value::isStatic - Accessibility Detection
    • Componere\Value::setPrivate - Accessibility Modification
    • Componere\Value::setProtected - Accessibility Modification
    • Componere\Value::setStatic - Accessibility Modification
    • Componere\Value::__construct - Value Construction
    • com_create_guid - グローバルユニーク ID (GUID) を生成する
    • com_event_sink - COM オブジェクトのイベントを PHP オブジェクトに接続する
    • com_get_active_object - すでに実行中の COM オブジェクトのインスタンスへのハンドルを返す
    • com_load_typelib - タイプライブラリを読み込む
    • com_message_pump - COM メッセージを処理し、timeoutms ミリ秒の間待つ
    • com_print_typeinfo - ディスパッチインターフェイスのために、PHP のクラス定義を出力する
    • connection_aborted - クライアントとの接続が切断されているかどうかを調べる
    • connection_status - 接続ステータスのビットフィールドを返す
    • constant - 定数の値を返す
    • convert_cyr_string - キリル文字セットを他のものに変換する
    • convert_uudecode - uuencode された文字列をデコードする
    • convert_uuencode - 文字列を uuencode する
    • copy - ファイルをコピーする
    • cos - 余弦（コサイン）
    • cosh - 双曲線余弦（ハイパボリックコサイン）
    • count - 配列または Countable オブジェクトに含まれるすべての要素の数を数える
    • Countable::count - オブジェクトの要素数を数える
    • count_chars - 文字列で使用されている文字に関する情報を返す
    • crc32 - 文字列の crc32 多項式計算を行う
    • create_function - 文字列のコードを評価し、動的に関数を作成する
    • CrudOperationBindable::bind - プレースホルダーに値をバインドする
    • CrudOperationLimitable::limit - 結果を限定する
    • CrudOperationSkippable::skip - スキップする操作の数
    • CrudOperationSortable::sort - 結果をソートする
    • crypt - 文字列の一方向のハッシュ化を行う
    • ctype_alnum - 英数字かどうかを調べる
    • ctype_alpha - 英字かどうかを調べる
    • ctype_cntrl - 制御文字かどうかを調べる
    • ctype_digit - 数字かどうかを調べる
    • ctype_graph - 空白以外の印字可能な文字かどうかを調べる
    • ctype_lower - 小文字かどうかを調べる
    • ctype_print - 印字可能な文字かどうかを調べる
    • ctype_punct - 空白、英数字以外の出力可能な文字かどうかを調べる
    • ctype_space - 空白文字かどうか調べる
    • ctype_upper - 大文字かどうか調べる
    • ctype_xdigit - 16 進数を表す文字かどうかを調べる
    • cubrid_affected_rows - Return the number of rows affected by the last SQL statement
    • cubrid_bind - Bind variables to a prepared statement as parameters
    • cubrid_client_encoding - Return the current CUBRID connection charset
    • cubrid_close - Close CUBRID connection
    • cubrid_close_prepare - Close the request handle
    • cubrid_close_request - Close the request handle
    • cubrid_column_names - Get the column names in result
    • cubrid_column_types - Get column types in result
    • cubrid_col_get - Get contents of collection type column using OID
    • cubrid_col_size - Get the number of elements in collection type column using OID
    • cubrid_commit - Commit a transaction
    • cubrid_connect - Open a connection to a CUBRID Server
    • cubrid_connect_with_url - Establish the environment for connecting to CUBRID server
    • cubrid_current_oid - Get OID of the current cursor location
    • cubrid_data_seek - Move the internal row pointer of the CUBRID result
    • cubrid_db_name - Get db name from results of cubrid_list_dbs
    • cubrid_disconnect - Close a database connection
    • cubrid_drop - Delete an instance using OID
    • cubrid_errno - Return the numerical value of the error message from previous CUBRID operation
    • cubrid_error - Get the error message
    • cubrid_error_code - Get error code for the most recent function call
    • cubrid_error_code_facility - Get the facility code of error
    • cubrid_error_msg - Get last error message for the most recent function call
    • cubrid_execute - Execute a prepared SQL statement
    • cubrid_fetch - Fetch the next row from a result set
    • cubrid_fetch_array - Fetch a result row as an associative array, a numeric array, or both
    • cubrid_fetch_assoc - Return the associative array that corresponds to the fetched row
    • cubrid_fetch_field - Get column information from a result and return as an object
    • cubrid_fetch_lengths - Return an array with the lengths of the values of each field from the current row
    • cubrid_fetch_object - Fetch the next row and return it as an object
    • cubrid_fetch_row - Return a numerical array with the values of the current row
    • cubrid_field_flags - Return a string with the flags of the given field offset
    • cubrid_field_len - Get the maximum length of the specified field
    • cubrid_field_name - Return the name of the specified field index
    • cubrid_field_seek - Move the result set cursor to the specified field offset
    • cubrid_field_table - Return the name of the table of the specified field
    • cubrid_field_type - Return the type of the column corresponding to the given field offset
    • cubrid_free_result - Free the memory occupied by the result data
    • cubrid_get - Get a column using OID
    • cubrid_get_autocommit - Get auto-commit mode of the connection
    • cubrid_get_charset - Return the current CUBRID connection charset
    • cubrid_get_class_name - Get the class name using OID
    • cubrid_get_client_info - Return the client library version
    • cubrid_get_db_parameter - Returns the CUBRID database parameters
    • cubrid_get_query_timeout - Get the query timeout value of the request
    • cubrid_get_server_info - Return the CUBRID server version
    • cubrid_insert_id - Return the ID generated for the last updated AUTO_INCREMENT column
    • cubrid_is_instance - Check whether the instance pointed by OID exists
    • cubrid_list_dbs - Return an array with the list of all existing CUBRID databases
    • cubrid_load_from_glo - Read data from a GLO instance and save it in a file
    • cubrid_lob2_bind - Bind a lob object or a string as a lob object to a prepared statement as parameters
    • cubrid_lob2_close - Close LOB object
    • cubrid_lob2_export - Export the lob object to a file
    • cubrid_lob2_import - Import BLOB/CLOB data from a file
    • cubrid_lob2_new - Create a lob object
    • cubrid_lob2_read - Read from BLOB/CLOB data
    • cubrid_lob2_seek - Move the cursor of a lob object
    • cubrid_lob2_seek64 - Move the cursor of a lob object
    • cubrid_lob2_size - Get a lob object's size
    • cubrid_lob2_size64 - Get a lob object's size
    • cubrid_lob2_tell - Tell the cursor position of the LOB object
    • cubrid_lob2_tell64 - Tell the cursor position of the LOB object
    • cubrid_lob2_write - Write to a lob object
    • cubrid_lob_close - Close BLOB/CLOB data
    • cubrid_lob_export - Export BLOB/CLOB data to file
    • cubrid_lob_get - Get BLOB/CLOB data
    • cubrid_lob_send - Read BLOB/CLOB data and send straight to browser
    • cubrid_lob_size - Get BLOB/CLOB data size
    • cubrid_lock_read - Set a read lock on the given OID
    • cubrid_lock_write - Set a write lock on the given OID
    • cubrid_move_cursor - Move the cursor in the result
    • cubrid_new_glo - Create a glo instance
    • cubrid_next_result - Get result of next query when executing multiple SQL statements
    • cubrid_num_cols - Return the number of columns in the result set
    • cubrid_num_fields - Return the number of columns in the result set
    • cubrid_num_rows - Get the number of rows in the result set
    • cubrid_pconnect - Open a persistent connection to a CUBRID server
    • cubrid_pconnect_with_url - Open a persistent connection to CUBRID server
    • cubrid_ping - Ping a server connection or reconnect if there is no connection
    • cubrid_prepare - Prepare a SQL statement for execution
    • cubrid_put - Update a column using OID
    • cubrid_query - Send a CUBRID query
    • cubrid_real_escape_string - Escape special characters in a string for use in an SQL statement
    • cubrid_result - Return the value of a specific field in a specific row
    • cubrid_rollback - Roll back a transaction
    • cubrid_save_to_glo - Save requested file in a GLO instance
    • cubrid_schema - Get the requested schema information
    • cubrid_send_glo - Read data from glo and send it to std output
    • cubrid_seq_drop - Delete an element from sequence type column using OID
    • cubrid_seq_insert - Insert an element to a sequence type column using OID
    • cubrid_seq_put - Update the element value of sequence type column using OID
    • cubrid_set_add - Insert a single element to set type column using OID
    • cubrid_set_autocommit - Set autocommit mode of the connection
    • cubrid_set_db_parameter - Sets the CUBRID database parameters
    • cubrid_set_drop - Delete an element from set type column using OID
    • cubrid_set_query_timeout - Set the timeout time of query execution
    • cubrid_unbuffered_query - Perform a query without fetching the results into memory
    • cubrid_version - Get the CUBRID PHP module's version
    • CURLFile::getFilename - ファイル名を取得する
    • CURLFile::getMimeType - MIME タイプを取得する
    • CURLFile::getPostFilename - POST 用のファイル名を取得する
    • CURLFile::setMimeType - MIME タイプを設定する
    • CURLFile::setPostFilename - POST 用のファイル名を設定する
    • CURLFile::__construct - CURLFile オブジェクトを作る
    • CURLStringFile::__construct - CURLStringFile オブジェクトを作る
    • curl_close - cURL セッションを閉じる
    • curl_copy_handle - cURL ハンドルを、その設定も含めてコピーする
    • curl_errno - 直近のエラー番号を返す
    • curl_error - 現在のセッションに関する直近のエラー文字列を返す
    • curl_escape - 指定した文字列を URL エンコードする
    • curl_exec - cURL セッションを実行する
    • curl_getinfo - 指定した伝送に関する情報を得る
    • curl_init - cURL セッションを初期化する
    • curl_multi_add_handle - cURL マルチハンドルに、通常の cURL ハンドルを追加する
    • curl_multi_close - cURL ハンドルのセットを閉じる
    • curl_multi_errno - 直近のマルチハンドルに対するエラー番号を返す
    • curl_multi_exec - 現在の cURL ハンドルから、サブ接続を実行する
    • curl_multi_getcontent - CURLOPT_RETURNTRANSFER が設定されている場合に、cURL ハンドルの内容を返す
    • curl_multi_info_read - 現在の転送についての情報を表示する
    • curl_multi_init - 新規 cURL マルチハンドルを返す
    • curl_multi_remove_handle - cURL ハンドルのセットからマルチハンドルを削除する
    • curl_multi_select - curl_multi 接続のアクティビティを待つ
    • curl_multi_setopt - cURL マルチハンドル用のオプションを設定する
    • curl_multi_strerror - エラーの内容を表す文字列を返す
    • curl_pause - 接続の中断と再開をする
    • curl_reset - libcurl セッションハンドルのすべてのオプションをリセットする
    • curl_setopt - cURL 転送用オプションを設定する
    • curl_setopt_array - CURL 転送用の複数のオプションを設定する
    • curl_share_close - cURL 共有ハンドルを閉じる
    • curl_share_errno - 直近の共有ハンドルに対するエラー番号を返す
    • curl_share_init - curl 共有ハンドルを初期化する
    • curl_share_setopt - cURL 共有ハンドルのオプションを設定する
    • curl_share_strerror - 与えられたエラーコードを説明する文字列を返す
    • curl_strerror - エラーコードの説明を返す
    • curl_unescape - URL エンコードされた文字列をデコードする
    • curl_upkeep - 接続を維持するためのチェックを行う
    • curl_version - cURL のバージョンを返す
    • current - 配列内の現在の要素を返す
  • d
    • DatabaseObject::existsInDatabase - オブジェクトがデータベースに存在するかをチェックする
    • DatabaseObject::getName - オブジェクトの名前を取得する
    • DatabaseObject::getSession - セッションの名前を取得する
    • date - Unixタイムスタンプを書式化する
    • DateInterval::createFromDateString - 相対指定文字列から DateInterval を作成する
    • DateInterval::format - 間隔をフォーマットする
    • DateInterval::__construct - 新しい DateInterval オブジェクトを作成する
    • DatePeriod::createFromISO8601String - ISO8601 形式の文字列から、新しい DatePeriod オブジェクトを作成する
    • DatePeriod::getDateInterval - 間隔を取得する
    • DatePeriod::getEndDate - 終了日を取得する
    • DatePeriod::getRecurrences - 繰り返しの数を取得する
    • DatePeriod::getStartDate - 開始日を取得する
    • DatePeriod::__construct - 新しい DatePeriod オブジェクトを作成する
    • DateTime::add - 年月日時分秒の値を加えることで、DateTime オブジェクトを変更する
    • DateTime::createFromFormat - 指定した書式で時刻文字列をパースする
    • DateTime::createFromImmutable - 与えられた DateTimeImmutable オブジェクトをカプセル化した、新しい DateTime のインスタンスを返す
    • DateTime::createFromInterface - 指定された DateTimeInterface オブジェクトをカプセル化した、新しい DateTime オブジェクトを返す
    • DateTime::getLastErrors - DateTimeImmutable::getLastErrors のエイリアス
    • DateTime::modify - タイムスタンプを変更する
    • DateTime::setDate - 日付を設定する
    • DateTime::setISODate - ISO 形式の日付を設定する
    • DateTime::setTime - 時刻を設定する
    • DateTime::setTimestamp - Unix タイムスタンプを用いて日付と時刻を設定する
    • DateTime::setTimezone - DateTime オブジェクトのタイムゾーンを設定する
    • DateTime::sub - 年月日時分秒の値を DateTime オブジェクトから引く
    • DateTime::__construct - 新しい DateTime オブジェクトを返す
    • DateTime::__set_state - __set_state ハンドラ
    • DateTime::__wakeup - __wakeup ハンドラ
    • DateTimeImmutable::add - 年月日時分秒の値を加え、新しいオブジェクトを返す
    • DateTimeImmutable::createFromFormat - 時刻の文字列を指定されたフォーマットに従ってパースする
    • DateTimeImmutable::createFromInterface - 指定された DateTimeInterface オブジェクトをカプセル化した、新しい DateTimeImmutable オブジェクトを返す
    • DateTimeImmutable::createFromMutable - 与えられた DateTime オブジェクトをカプセル化した、新しいDateTimeImmutable のインスタンスを返す
    • DateTimeImmutable::getLastErrors - 警告およびエラーを返す
    • DateTimeImmutable::modify - タイムスタンプを変更した新しいオブジェクトを作る
    • DateTimeImmutable::setDate - 日付を設定する
    • DateTimeImmutable::setISODate - ISO 日付を設定する
    • DateTimeImmutable::setTime - 時刻を設定する
    • DateTimeImmutable::setTimestamp - Unix タイムスタンプを用いて日付と時刻を設定する
    • DateTimeImmutable::setTimezone - タイムゾーンを設定する
    • DateTimeImmutable::sub - 年月日時分秒の値を引く
    • DateTimeImmutable::__construct - 新しい DateTimeImmutable オブジェクトを返す
    • DateTimeImmutable::__set_state - __set_state ハンドラ
    • DateTimeInterface::diff - ふたつの DateTime オブジェクトの差を返す
    • DateTimeInterface::format - 指定した書式でフォーマットした日付を返す
    • DateTimeInterface::getOffset - タイムゾーンのオフセットを返す
    • DateTimeInterface::getTimestamp - Unix タイムスタンプを取得する
    • DateTimeInterface::getTimezone - 指定した DateTime に関連するタイムゾーンを返す
    • DateTimeZone::getLocation - タイムゾーンの位置情報を返す
    • DateTimeZone::getName - タイムゾーンの名前を返す
    • DateTimeZone::getOffset - GMT からのタイムゾーンのオフセットを返す
    • DateTimeZone::getTransitions - タイムゾーンの変遷を返す
    • DateTimeZone::listAbbreviations - 夏時間、オフセットおよびタイムゾーン名を含む連想配列を返す
    • DateTimeZone::listIdentifiers - すべてのタイムゾーン識別子を含む配列を返す
    • DateTimeZone::__construct - 新しい DateTimeZone オブジェクトを作成する
    • date_add - DateTime::add のエイリアス
    • date_create - 新しい DateTime オブジェクトを作成する
    • date_create_from_format - DateTime::createFromFormat のエイリアス
    • date_create_immutable - 新しい DateTimeImmutable オブジェクトを作成する
    • date_create_immutable_from_format - DateTimeImmutable::createFromFormat のエイリアス
    • date_date_set - DateTime::setDate のエイリアス
    • date_default_timezone_get - スクリプト中の日付/時刻関数で使用されるデフォルトタイムゾーンを取得する
    • date_default_timezone_set - スクリプト中の日付/時刻関数で使用されるデフォルトタイムゾーンを設定する
    • date_diff - DateTime::diff のエイリアス
    • date_format - DateTime::format のエイリアス
    • date_get_last_errors - DateTimeImmutable::getLastErrors のエイリアス
    • date_interval_create_from_date_string - DateInterval::createFromDateString のエイリアス
    • date_interval_format - DateInterval::format のエイリアス
    • date_isodate_set - DateTime::setISODate のエイリアス
    • date_modify - DateTime::modify のエイリアス
    • date_offset_get - DateTime::getOffset のエイリアス
    • date_parse - 指定した日付/時刻の詳細な情報を連想配列で返す
    • date_parse_from_format - 指定した書式でフォーマットされた日付についての情報を取得する
    • date_sub - DateTime::sub のエイリアス
    • date_sunrise - 指定した日付と場所についての日の出時刻を返す
    • date_sunset - 指定した日付と場所についての日の入り時刻を返す
    • date_sun_info - 日の出/日の入り時刻と薄明かり (twilight) の開始/終了時刻の情報を含む配列を返す
    • date_timestamp_get - DateTime::getTimestamp のエイリアス
    • date_timestamp_set - DateTime::setTimestamp のエイリアス
    • date_timezone_get - DateTime::getTimezone のエイリアス
    • date_timezone_set - DateTime::setTimezone のエイリアス
    • date_time_set - DateTime::setTime のエイリアス
    • db2_autocommit - データベース接続の AUTOCOMMIT の状態を取得または設定する
    • db2_bind_param - PHP 変数を SQL 文のパラメータにバインドする
    • db2_client_info - DB2 データベースクライアントの情報をプロパティに保持するオブジェクトを返す
    • db2_close - データベース接続を閉じる
    • db2_columns - テーブルのカラムおよび関連するメタデータを含む結果セットを返す
    • db2_column_privileges - テーブルのカラムおよび関連する権限情報を含む結果セットを返す
    • db2_commit - トランザクションをコミットする
    • db2_connect - データベースへの接続を返す
    • db2_conn_error - 直近の接続から返された SQLSTATE を含む文字列を返す
    • db2_conn_errormsg - 直近の接続エラーメッセージおよび SQLCODE を返す
    • db2_cursor_type - ステートメントリソースが使用しているカーソルの型を返す
    • db2_escape_string - 特定の文字をエスケープする
    • db2_exec - SQL 文を直接実行する
    • db2_execute - プリペアドステートメントを実行する
    • db2_fetch_array - 結果セット内の行を表す、カラム位置をインデックスとする配列を返す
    • db2_fetch_assoc - 結果セット内の行を表す、カラム名をインデックスとする配列を返す
    • db2_fetch_both - 結果セット内の行を表す、 カラム位置およびカラム名の両方をインデックスとする配列を返す
    • db2_fetch_object - 結果セット内の行を表す、カラムをプロパティとするオブジェクトを返す
    • db2_fetch_row - 結果セットポインタを次の行あるいは要求された行に設定する
    • db2_field_display_size - カラムを表示するために必要な最大のバイト数を返す
    • db2_field_name - 結果セット内のカラムの名前を返す
    • db2_field_num - 結果セット内の指定したカラムの位置を返す
    • db2_field_precision - 結果セット内の指定したカラムの精度を返す
    • db2_field_scale - 結果セット内の指定したカラムの位取りを返す
    • db2_field_type - 結果セット内の指定したカラムのデータ型を返す
    • db2_field_width - 結果セット内の指定したカラムの現在値の幅を返す
    • db2_foreign_keys - テーブルの外部キーを含む結果セットを返す
    • db2_free_result - 結果セットに関連付けられたリソースを開放する
    • db2_free_stmt - 指定されたステートメントリソースに関連付けられたリソースを開放する
    • db2_get_option - ステートメントリソースあるいは接続リソースからオプションの値を取得する
    • db2_last_insert_id - この接続上で最後に成功した insert クエリが自動生成した ID を返す
    • db2_lob_read - LOB ファイルから、ユーザーが定義したサイズの内容を取得する
    • db2_next_result - ストアドプロシージャから、次の結果セットを要求する
    • db2_num_fields - 結果セットに含まれるフィールドの数を返す
    • db2_num_rows - SQL 文によって変更された行の数を返す
    • db2_pclose - 持続的データベース接続を閉じる
    • db2_pconnect - データベースへの持続的接続を返す
    • db2_prepare - 実行する SQL 文を準備する
    • db2_primary_keys - テーブルの主キーを含む結果セットを返す
    • db2_procedures - データベース内に登録されているストアドプロシージャの一覧を含む結果セットを返す
    • db2_procedure_columns - ストアドプロシージャのパラメータを含む結果セットを返す
    • db2_result - 結果セットの行からひとつのカラムを返す
    • db2_rollback - トランザクションをロールバックする
    • db2_server_info - DB2 データベースサーバーの情報をプロパティに保持するオブジェクトを返す
    • db2_set_option - 接続リソースあるいはステートメントリソースのオプションを設定する
    • db2_special_columns - テーブルのユニーク行 ID カラムを含む結果セットを返す
    • db2_statistics - インデックスの情報およびテーブルの統計情報を含む結果セットを返す
    • db2_stmt_error - SQL 文が返す SQLSTATE を含む文字列を返す
    • db2_stmt_errormsg - 直近の SQL 文のエラーメッセージを含む文字列を返す
    • db2_tables - データベース内のテーブルおよび関連するメタデータを含む結果セットを返す
    • db2_table_privileges - データベース内のテーブルおよび関連する権限情報を含む結果セットを返す
    • dbase_add_record - Adds a record to a database
    • dbase_close - Closes a database
    • dbase_create - Creates a database
    • dbase_delete_record - Deletes a record from a database
    • dbase_get_header_info - Gets the header info of a database
    • dbase_get_record - Gets a record from a database as an indexed array
    • dbase_get_record_with_names - Gets a record from a database as an associative array
    • dbase_numfields - Gets the number of fields of a database
    • dbase_numrecords - Gets the number of records in a database
    • dbase_open - Opens a database
    • dbase_pack - Packs a database
    • dbase_replace_record - Replaces a record in a database
    • dba_close - DBA データベースを閉じる
    • dba_delete - キーが指す DBA エントリを削除する
    • dba_exists - キーが存在するかどうかを確認する
    • dba_fetch - キーが指すデータを取得する
    • dba_firstkey - 最初のキーを取得する
    • dba_handlers - 利用可能なハンドラの一覧を得る
    • dba_insert - エントリを挿入する
    • dba_key_split - 文字列形式のキーを配列形式に分割する
    • dba_list - オープンされている全データベースファイルのリストを得る
    • dba_nextkey - 次のキーを取得する
    • dba_open - データベースをオープンする
    • dba_optimize - データベースを最適化する
    • dba_popen - データベースを持続的にオープンする
    • dba_replace - エントリを置換または挿入する
    • dba_sync - データベースを同期する
    • dcgettext - 単一の参照に関するドメインを上書きする
    • dcngettext - dcgettext の複数形版
    • debug_backtrace - バックトレースを生成する
    • debug_print_backtrace - バックトレースを表示する
    • debug_zval_dump - 内部的な zval を表す文字列をダンプする
    • decbin - 10 進数を 2 進数に変換する
    • dechex - 10 進数を 16 進数に変換する
    • decoct - 10 進数を 8 進数に変換する
    • define - 名前を指定して定数を定義する
    • defined - 指定した名前の定数が存在するかどうかを調べる
    • deflate_add - インクリメンタルにデータを圧縮する
    • deflate_init - インクリメンタルな圧縮コンテキストを初期化する
    • deg2rad - 度単位の数値をラジアン単位に変換する
    • delete - unlink か unset を参照ください
    • dgettext - 現在のドメインを上書きする
    • die - exit と同等
    • dio_close - fd で指定したファイル記述子を閉じる
    • dio_fcntl - fd について C ライブラリの fcntl を実行する
    • dio_open - C ライブラリの入出力ストリーム関数が許すよりも低レベルでファイルをオープンする (必要ならファイルを作成する)
    • dio_read - ファイル記述子からバイトデータを読み込む
    • dio_seek - fd 上で whence から pos に移動する
    • dio_stat - ファイル記述子 fd に関する stat 情報を取得する
    • dio_tcsetattr - シリアルポートの端末属性とボーレートを設定する
    • dio_truncate - ファイル記述子 fd をオフセットバイトへ丸める
    • dio_write - オプションで丸め長さを指定してデータを書き込む
    • dir - ディレクトリクラスのインスタンスを返す
    • Directory::close - ディレクトリハンドルをクローズする
    • Directory::read - ディレクトリハンドルからエントリを読み込む
    • Directory::rewind - ディレクトリハンドルを元に戻す
    • DirectoryIterator::current - 現在の DirectoryIterator アイテムを返す
    • DirectoryIterator::getBasename - 現在の DirectoryIterator のアイテムのベース名を取得する
    • DirectoryIterator::getExtension - ファイルの拡張子を取得する
    • DirectoryIterator::getFilename - 現在の DirectoryIterator アイテムのファイル名を返す
    • DirectoryIterator::isDot - 現在の DirectoryIterator アイテムが '.' もしくは '..' であるかどうかを調べる
    • DirectoryIterator::key - 現在の DirectoryIterator アイテムのキーを返す
    • DirectoryIterator::next - 次の DirectoryIterator アイテムに移動する
    • DirectoryIterator::rewind - DirectoryIterator を最初に巻き戻す
    • DirectoryIterator::seek - DirectoryIterator のアイテムを移動する
    • DirectoryIterator::valid - 現在の DirectoryIterator の位置が有効なファイルであるかどうかチェックする
    • DirectoryIterator::__construct - パスから新規ディレクトリイテレータを生成する
    • DirectoryIterator::__toString - ファイル名を文字列として取得する
    • dirname - 親ディレクトリのパスを返す
    • diskfreespace - disk_free_space のエイリアス
    • disk_free_space - ファイルシステムあるいはディスクパーティション上で利用可能な領域を返す
    • disk_total_space - ファイルシステムあるいはディスクパーティションの全体サイズを返す
    • dl - 実行時に PHP 拡張モジュールをロードする
    • dngettext - dgettext の複数形版
    • dns_check_record - checkdnsrr のエイリアス
    • dns_get_mx - getmxrr のエイリアス
    • dns_get_record - ホスト名に関連する DNS リソースレコードを取得する
    • DocResult::fetchAll - 全ての行を取得する
    • DocResult::fetchOne - 一行取得する
    • DocResult::getWarnings - 直近の操作から発生した警告を取得する
    • DocResult::getWarningsCount - 直近の操作で発生した警告の数を取得する
    • DocResult::__construct - DocResult のコンストラクタ
    • DOMAttr::isId - 属性が定義済みの ID かどうかを調べる
    • DOMAttr::__construct - 新しい DOMAttr オブジェクトを作成する
    • DOMCdataSection::__construct - 新しい DOMCdataSection オブジェクトを作成する
    • DOMCharacterData::after - 文字データの後ろにノードを追加する
    • DOMCharacterData::appendData - ノードの文字データの最後に文字列を追加する
    • DOMCharacterData::before - ノードの前にノードを追加する
    • DOMCharacterData::deleteData - 指定した範囲の文字列をノードから削除する
    • DOMCharacterData::insertData - 指定した 16 ビット単位のオフセットに、文字列を挿入する
    • DOMCharacterData::remove - 文字データを削除する
    • DOMCharacterData::replaceData - DOMCharacterData ノードの文字列の一部を置換する
    • DOMCharacterData::replaceWith - 文字データを新しいノードで置き換える
    • DOMCharacterData::substringData - ノードから指定した範囲のデータを抽出する
    • DOMChildNode::after - ノードの後ろにノードを追加する
    • DOMChildNode::before - ノードの前にノードを追加する
    • DOMChildNode::remove - ノードを削除する
    • DOMChildNode::replaceWith - ノードを新しいノードで置き換える
    • DOMComment::__construct - 新しい DOMComment オブジェクトを作成する
    • DOMDocument::adoptNode - ノードを別のドキュメントに移す
    • DOMDocument::append - 最後の子ノードの後ろにノードを追加する
    • DOMDocument::createAttribute - 新しい属性を作成する
    • DOMDocument::createAttributeNS - 関連付けられた名前空間に新しい属性を作成する
    • DOMDocument::createCDATASection - 新しい cdata ノードを作成する
    • DOMDocument::createComment - 新しい comment ノードを作成する
    • DOMDocument::createDocumentFragment - 新しい文書片を作成する
    • DOMDocument::createElement - 新しい要素ノードを作成する
    • DOMDocument::createElementNS - 関連付けられた名前空間に新しい要素を作成する
    • DOMDocument::createEntityReference - 新しいエンティティ参照ノードを作成する
    • DOMDocument::createProcessingInstruction - 新しい PI ノードを作成する
    • DOMDocument::createTextNode - 新しいテキストノードを作成する
    • DOMDocument::getElementById - id に対応する要素を検索する
    • DOMDocument::getElementsByTagName - 指定したローカルタグ名に対応するすべての要素を検索する
    • DOMDocument::getElementsByTagNameNS - 指定した名前空間で、タグ名に対応するすべての要素を検索する
    • DOMDocument::importNode - 現在のドキュメントにノードをインポートする
    • DOMDocument::load - ファイルから XML を読み込む
    • DOMDocument::loadHTML - 文字列から HTML を読み込む
    • DOMDocument::loadHTMLFile - ファイルから HTML を読み込む
    • DOMDocument::loadXML - 文字列から XML を読み込む
    • DOMDocument::normalizeDocument - ドキュメントを正規化する
    • DOMDocument::prepend - 最初の子ノードの前にノードを追加する
    • DOMDocument::registerNodeClass - 基底ノード型を作成する際に使用する拡張クラスを登録する
    • DOMDocument::relaxNGValidate - ドキュメントを relaxNG で検証する
    • DOMDocument::relaxNGValidateSource - ドキュメントを relaxNG で検証する
    • DOMDocument::replaceChildren - ドキュメントの子を置換する
    • DOMDocument::save - 内部の XML ツリーをファイルに出力する
    • DOMDocument::saveHTML - 内部のドキュメントを HTML 形式の文字列として出力する
    • DOMDocument::saveHTMLFile - 内部のドキュメントを HTML 形式でファイルに出力する
    • DOMDocument::saveXML - 内部の XML ツリーを文字列として出力する
    • DOMDocument::schemaValidate - スキーマに基づいてドキュメントを検証する。XML Schema 1.0 のみサポート。
    • DOMDocument::schemaValidateSource - スキーマに基づいてドキュメントを検証する
    • DOMDocument::validate - DTD に基づいてドキュメントを検証する
    • DOMDocument::xinclude - DOMDocument オブジェクト内の XIncludes を置換する
    • DOMDocument::__construct - 新しい DOMDocument オブジェクトを作成する
    • DOMDocumentFragment::append - 最後の子ノードの後ろにノードを追加する
    • DOMDocumentFragment::appendXML - 生の XML データを追加する
    • DOMDocumentFragment::prepend - 最初の子ノードの前にノードを追加する
    • DOMDocumentFragment::replaceChildren - 文書片の子を置換する
    • DOMDocumentFragment::__construct - DOMDocumentFragment オブジェクトを構築する
    • DOMElement::after - 要素の後ろにノードを追加する
    • DOMElement::append - 最後のノードの後ろにノードを追加する
    • DOMElement::before - 要素の前にノードを追加する
    • DOMElement::getAttribute - 属性の値を返す
    • DOMElement::getAttributeNames - 属性の名前を取得する
    • DOMElement::getAttributeNode - 属性ノードを返す
    • DOMElement::getAttributeNodeNS - 属性ノードを返す
    • DOMElement::getAttributeNS - 属性の値を返す
    • DOMElement::getElementsByTagName - タグ名から要素を取得する
    • DOMElement::getElementsByTagNameNS - 名前空間 URI とローカル名から要素を取得する
    • DOMElement::hasAttribute - 属性が存在するかどうかを調べる
    • DOMElement::hasAttributeNS - 属性が存在するかどうかを調べる
    • DOMElement::insertAdjacentElement - 隣接する要素を挿入する
    • DOMElement::insertAdjacentText - 隣接するテキストを挿入する
    • DOMElement::prepend - 最初の子ノードの前にノードを追加する
    • DOMElement::remove - 要素を削除する
    • DOMElement::removeAttribute - 属性を削除する
    • DOMElement::removeAttributeNode - 属性を削除する
    • DOMElement::removeAttributeNS - 属性を削除する
    • DOMElement::replaceChildren - 要素中の子を置換する
    • DOMElement::replaceWith - 要素を新しいノードで置換する
    • DOMElement::setAttribute - 属性を新しく追加する、または変更する
    • DOMElement::setAttributeNode - 新しい属性ノードを要素に追加する
    • DOMElement::setAttributeNodeNS - 新しい属性ノードを要素に追加する
    • DOMElement::setAttributeNS - 新しい属性を追加する
    • DOMElement::setIdAttribute - ID 型の属性を名前で宣言する
    • DOMElement::setIdAttributeNode - ID 型の属性をノードで宣言する
    • DOMElement::setIdAttributeNS - ID 型の属性をローカル名および名前空間 URI で宣言する
    • DOMElement::toggleAttribute - 属性の値を切り替える
    • DOMElement::__construct - 新しい DOMElement オブジェクトを作成する
    • DOMEntityReference::__construct - 新しい DOMEntityReference オブジェクトを作成する
    • DOMImplementation::createDocument - 指定した型とドキュメント要素の DOMDocument オブジェクトを作成する
    • DOMImplementation::createDocumentType - 空の DOMDocumentType オブジェクトを作成する
    • DOMImplementation::hasFeature - DOM 実装が、指定した機能を実装しているかどうかを調べる
    • DOMImplementation::__construct - 新しい DOMImplementation オブジェクトを作成する
    • DOMNamedNodeMap::count - マップにあるノードの数を取得する
    • DOMNamedNodeMap::getIterator - 外部のイテレータを取得する
    • DOMNamedNodeMap::getNamedItem - 名前で指定されたノードを取得する
    • DOMNamedNodeMap::getNamedItemNS - ローカル名および名前空間 URI で指定したノードを取得する
    • DOMNamedNodeMap::item - インデックスで指定したノードを取得する
    • DOMNode::appendChild - 子要素群の最後に新しい子要素を追加する
    • DOMNode::C14N - ノードを文字列に正規化する
    • DOMNode::C14NFile - ノードをファイルに正規化する
    • DOMNode::cloneNode - ノードを複製する
    • DOMNode::contains - ノードが別のノードを含んでいるかを調べる
    • DOMNode::getLineNo - ノードが存在する行の番号を取得します。
    • DOMNode::getNodePath - ノードの XPath を取得する
    • DOMNode::getRootNode - ルート(根)ノードを取得する
    • DOMNode::hasAttributes - ノードが属性を保持しているかどうかを調べる
    • DOMNode::hasChildNodes - ノードが子を保持しているかどうかを調べる
    • DOMNode::insertBefore - 参照しているノードの前に新しい子を追加する
    • DOMNode::isDefaultNamespace - 指定した namespaceURI がデフォルトの名前空間かどうかを調べる
    • DOMNode::isEqualNode - ノードが等しいかを調べる
    • DOMNode::isSameNode - 2 つのノードが等しいかどうかを調べる
    • DOMNode::isSupported - 指定したバージョンで機能がサポートされているかどうかを調べる
    • DOMNode::lookupNamespaceURI - プレフィックスに基づいて、ノードの名前空間 URI を取得する
    • DOMNode::lookupPrefix - 名前空間 URI に基づいて、ノードの名前空間プレフィックスを取得する
    • DOMNode::normalize - ノードを正規化する
    • DOMNode::removeChild - 子要素群から子要素を削除する
    • DOMNode::replaceChild - 子を置き換える
    • DOMNodeList::count - リストにあるノードの数を取得する
    • DOMNodeList::getIterator - 外部のイテレータを取得する
    • DOMNodelist::item - インデックスで指定したノードを取得する
    • DOMParentNode::append - 最後の子ノードの後ろにノードを追加する
    • DOMParentNode::prepend - 最初の子ノードの前にノードを追加する
    • DOMParentNode::replaceChildren - ノード中の子を置換する
    • DOMProcessingInstruction::__construct - 新しい DOMProcessingInstruction オブジェクトを作成する
    • DOMText::isElementContentWhitespace - このテキストノードが、要素の内容にホワイトスペースが含まれているかを返す
    • DOMText::isWhitespaceInElementContent - このテキストノードが空白を含むかどうかを示す
    • DOMText::splitText - 指定したオフセットでノードを 2 つに分割する
    • DOMText::__construct - 新しい DOMText オブジェクトを作成する
    • DOMXPath::evaluate - 与えられた XPath 式を評価し、可能であれば結果を返す
    • DOMXPath::query - 与えられた XPath 式を評価する
    • DOMXPath::registerNamespace - DOMXPath オブジェクトの名前空間を登録する
    • DOMXPath::registerPhpFunctions - PHP の関数を XPath 関数として登録する
    • DOMXPath::__construct - 新しい DOMXPath オブジェクトを作成する
    • dom_import_simplexml - SimpleXMLElement オブジェクトから DOMElement オブジェクトを取得する
    • dotnet::__construct - dotnet クラスのコンストラクタ
    • doubleval - floatval のエイリアス
    • Ds\Collection::clear - Removes all values
    • Ds\Collection::copy - Returns a shallow copy of the collection
    • Ds\Collection::isEmpty - Returns whether the collection is empty
    • Ds\Collection::toArray - Converts the collection to an array
    • Ds\Deque::allocate - Allocates enough memory for a required capacity
    • Ds\Deque::apply - Updates all values by applying a callback function to each value
    • Ds\Deque::capacity - Returns the current capacity
    • Ds\Deque::clear - Removes all values from the deque
    • Ds\Deque::contains - Determines if the deque contains given values
    • Ds\Deque::copy - Returns a shallow copy of the deque
    • Ds\Deque::count - Returns the number of values in the collection
    • Ds\Deque::filter - Creates a new deque using a callable to determine which values to include
    • Ds\Deque::find - Attempts to find a value's index
    • Ds\Deque::first - Returns the first value in the deque
    • Ds\Deque::get - Returns the value at a given index
    • Ds\Deque::insert - Inserts values at a given index
    • Ds\Deque::isEmpty - Returns whether the deque is empty
    • Ds\Deque::join - Joins all values together as a string
    • Ds\Deque::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\Deque::last - Returns the last value
    • Ds\Deque::map - Returns the result of applying a callback to each value
    • Ds\Deque::merge - Returns the result of adding all given values to the deque
    • Ds\Deque::pop - Removes and returns the last value
    • Ds\Deque::push - Adds values to the end of the deque
    • Ds\Deque::reduce - Reduces the deque to a single value using a callback function
    • Ds\Deque::remove - Removes and returns a value by index
    • Ds\Deque::reverse - Reverses the deque in-place
    • Ds\Deque::reversed - Returns a reversed copy
    • Ds\Deque::rotate - Rotates the deque by a given number of rotations
    • Ds\Deque::set - Updates a value at a given index
    • Ds\Deque::shift - Removes and returns the first value
    • Ds\Deque::slice - Returns a sub-deque of a given range
    • Ds\Deque::sort - Sorts the deque in-place
    • Ds\Deque::sorted - Returns a sorted copy
    • Ds\Deque::sum - Returns the sum of all values in the deque
    • Ds\Deque::toArray - Converts the deque to an array
    • Ds\Deque::unshift - Adds values to the front of the deque
    • Ds\Deque::__construct - Creates a new instance
    • Ds\Hashable::equals - Determines whether an object is equal to the current instance
    • Ds\Hashable::hash - Returns a scalar value to be used as a hash value
    • Ds\Map::allocate - Allocates enough memory for a required capacity
    • Ds\Map::apply - Updates all values by applying a callback function to each value
    • Ds\Map::capacity - Returns the current capacity
    • Ds\Map::clear - Removes all values
    • Ds\Map::copy - Returns a shallow copy of the map
    • Ds\Map::count - Returns the number of values in the map
    • Ds\Map::diff - Creates a new map using keys that aren't in another map
    • Ds\Map::filter - Creates a new map using a callable to determine which pairs to include
    • Ds\Map::first - Returns the first pair in the map
    • Ds\Map::get - Returns the value for a given key
    • Ds\Map::hasKey - Determines whether the map contains a given key
    • Ds\Map::hasValue - Determines whether the map contains a given value
    • Ds\Map::intersect - Creates a new map by intersecting keys with another map
    • Ds\Map::isEmpty - Returns whether the map is empty
    • Ds\Map::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\Map::keys - Returns a set of the map's keys
    • Ds\Map::ksort - Sorts the map in-place by key
    • Ds\Map::ksorted - Returns a copy, sorted by key
    • Ds\Map::last - Returns the last pair of the map
    • Ds\Map::map - Returns the result of applying a callback to each value
    • Ds\Map::merge - Returns the result of adding all given associations
    • Ds\Map::pairs - Returns a sequence containing all the pairs of the map
    • Ds\Map::put - Associates a key with a value
    • Ds\Map::putAll - Associates all key-value pairs of a traversable object or array
    • Ds\Map::reduce - Reduces the map to a single value using a callback function
    • Ds\Map::remove - Removes and returns a value by key
    • Ds\Map::reverse - Reverses the map in-place
    • Ds\Map::reversed - Returns a reversed copy
    • Ds\Map::skip - Returns the pair at a given positional index
    • Ds\Map::slice - Returns a subset of the map defined by a starting index and length
    • Ds\Map::sort - Sorts the map in-place by value
    • Ds\Map::sorted - Returns a copy, sorted by value
    • Ds\Map::sum - Returns the sum of all values in the map
    • Ds\Map::toArray - Converts the map to an array
    • Ds\Map::union - Creates a new map using values from the current instance and another map
    • Ds\Map::values - Returns a sequence of the map's values
    • Ds\Map::xor - Creates a new map using keys of either the current instance or of another map, but not of both
    • Ds\Map::__construct - Creates a new instance
    • Ds\Pair::clear - Removes all values
    • Ds\Pair::copy - Returns a shallow copy of the pair
    • Ds\Pair::isEmpty - Returns whether the pair is empty
    • Ds\Pair::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\Pair::toArray - Converts the pair to an array
    • Ds\Pair::__construct - Creates a new instance
    • Ds\PriorityQueue::allocate - Allocates enough memory for a required capacity
    • Ds\PriorityQueue::capacity - Returns the current capacity
    • Ds\PriorityQueue::clear - Removes all values
    • Ds\PriorityQueue::copy - Returns a shallow copy of the queue
    • Ds\PriorityQueue::count - Returns the number of values in the queue
    • Ds\PriorityQueue::isEmpty - Returns whether the queue is empty
    • Ds\PriorityQueue::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\PriorityQueue::peek - Returns the value at the front of the queue
    • Ds\PriorityQueue::pop - Removes and returns the value with the highest priority
    • Ds\PriorityQueue::push - Pushes values into the queue
    • Ds\PriorityQueue::toArray - Converts the queue to an array
    • Ds\PriorityQueue::__construct - Creates a new instance
    • Ds\Queue::allocate - Allocates enough memory for a required capacity
    • Ds\Queue::capacity - Returns the current capacity
    • Ds\Queue::clear - Removes all values
    • Ds\Queue::copy - Returns a shallow copy of the queue
    • Ds\Queue::count - Returns the number of values in the queue
    • Ds\Queue::isEmpty - Returns whether the queue is empty
    • Ds\Queue::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\Queue::peek - Returns the value at the front of the queue
    • Ds\Queue::pop - Removes and returns the value at the front of the queue
    • Ds\Queue::push - Pushes values into the queue
    • Ds\Queue::toArray - Converts the queue to an array
    • Ds\Queue::__construct - Creates a new instance
    • Ds\Sequence::allocate - Allocates enough memory for a required capacity
    • Ds\Sequence::apply - Updates all values by applying a callback function to each value
    • Ds\Sequence::capacity - Returns the current capacity
    • Ds\Sequence::contains - Determines if the sequence contains given values
    • Ds\Sequence::filter - Creates a new sequence using a callable to determine which values to include
    • Ds\Sequence::find - Attempts to find a value's index
    • Ds\Sequence::first - Returns the first value in the sequence
    • Ds\Sequence::get - Returns the value at a given index
    • Ds\Sequence::insert - Inserts values at a given index
    • Ds\Sequence::join - Joins all values together as a string
    • Ds\Sequence::last - Returns the last value
    • Ds\Sequence::map - Returns the result of applying a callback to each value
    • Ds\Sequence::merge - Returns the result of adding all given values to the sequence
    • Ds\Sequence::pop - Removes and returns the last value
    • Ds\Sequence::push - Adds values to the end of the sequence
    • Ds\Sequence::reduce - Reduces the sequence to a single value using a callback function
    • Ds\Sequence::remove - Removes and returns a value by index
    • Ds\Sequence::reverse - Reverses the sequence in-place
    • Ds\Sequence::reversed - Returns a reversed copy
    • Ds\Sequence::rotate - Rotates the sequence by a given number of rotations
    • Ds\Sequence::set - Updates a value at a given index
    • Ds\Sequence::shift - Removes and returns the first value
    • Ds\Sequence::slice - Returns a sub-sequence of a given range
    • Ds\Sequence::sort - Sorts the sequence in-place
    • Ds\Sequence::sorted - Returns a sorted copy
    • Ds\Sequence::sum - Returns the sum of all values in the sequence
    • Ds\Sequence::unshift - Adds values to the front of the sequence
    • Ds\Set::add - Adds values to the set
    • Ds\Set::allocate - Allocates enough memory for a required capacity
    • Ds\Set::capacity - Returns the current capacity
    • Ds\Set::clear - Removes all values
    • Ds\Set::contains - Determines if the set contains all values
    • Ds\Set::copy - Returns a shallow copy of the set
    • Ds\Set::count - Returns the number of values in the set
    • Ds\Set::diff - Creates a new set using values that aren't in another set
    • Ds\Set::filter - Creates a new set using a callable to determine which values to include
    • Ds\Set::first - Returns the first value in the set
    • Ds\Set::get - Returns the value at a given index
    • Ds\Set::intersect - Creates a new set by intersecting values with another set
    • Ds\Set::isEmpty - Returns whether the set is empty
    • Ds\Set::join - Joins all values together as a string
    • Ds\Set::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\Set::last - Returns the last value in the set
    • Ds\Set::merge - Returns the result of adding all given values to the set
    • Ds\Set::reduce - Reduces the set to a single value using a callback function
    • Ds\Set::remove - Removes all given values from the set
    • Ds\Set::reverse - Reverses the set in-place
    • Ds\Set::reversed - Returns a reversed copy
    • Ds\Set::slice - Returns a sub-set of a given range
    • Ds\Set::sort - Sorts the set in-place
    • Ds\Set::sorted - Returns a sorted copy
    • Ds\Set::sum - Returns the sum of all values in the set
    • Ds\Set::toArray - Converts the set to an array
    • Ds\Set::union - Creates a new set using values from the current instance and another set
    • Ds\Set::xor - Creates a new set using values in either the current instance or in another set, but not in both
    • Ds\Set::__construct - Creates a new instance
    • Ds\Stack::allocate - Allocates enough memory for a required capacity
    • Ds\Stack::capacity - Returns the current capacity
    • Ds\Stack::clear - Removes all values
    • Ds\Stack::copy - Returns a shallow copy of the stack
    • Ds\Stack::count - Returns the number of values in the stack
    • Ds\Stack::isEmpty - Returns whether the stack is empty
    • Ds\Stack::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\Stack::peek - Returns the value at the top of the stack
    • Ds\Stack::pop - Removes and returns the value at the top of the stack
    • Ds\Stack::push - Pushes values onto the stack
    • Ds\Stack::toArray - Converts the stack to an array
    • Ds\Stack::__construct - Creates a new instance
    • Ds\Vector::allocate - Allocates enough memory for a required capacity
    • Ds\Vector::apply - Updates all values by applying a callback function to each value
    • Ds\Vector::capacity - Returns the current capacity
    • Ds\Vector::clear - Removes all values
    • Ds\Vector::contains - Determines if the vector contains given values
    • Ds\Vector::copy - Returns a shallow copy of the vector
    • Ds\Vector::count - Returns the number of values in the collection
    • Ds\Vector::filter - Creates a new vector using a callable to determine which values to include
    • Ds\Vector::find - Attempts to find a value's index
    • Ds\Vector::first - Returns the first value in the vector
    • Ds\Vector::get - Returns the value at a given index
    • Ds\Vector::insert - Inserts values at a given index
    • Ds\Vector::isEmpty - Returns whether the vector is empty
    • Ds\Vector::join - Joins all values together as a string
    • Ds\Vector::jsonSerialize - Returns a representation that can be converted to JSON
    • Ds\Vector::last - Returns the last value
    • Ds\Vector::map - Returns the result of applying a callback to each value
    • Ds\Vector::merge - Returns the result of adding all given values to the vector
    • Ds\Vector::pop - Removes and returns the last value
    • Ds\Vector::push - Adds values to the end of the vector
    • Ds\Vector::reduce - Reduces the vector to a single value using a callback function
    • Ds\Vector::remove - Removes and returns a value by index
    • Ds\Vector::reverse - Reverses the vector in-place
    • Ds\Vector::reversed - Returns a reversed copy
    • Ds\Vector::rotate - Rotates the vector by a given number of rotations
    • Ds\Vector::set - Updates a value at a given index
    • Ds\Vector::shift - Removes and returns the first value
    • Ds\Vector::slice - Returns a sub-vector of a given range
    • Ds\Vector::sort - Sorts the vector in-place
    • Ds\Vector::sorted - Returns a sorted copy
    • Ds\Vector::sum - Returns the sum of all values in the vector
    • Ds\Vector::toArray - Converts the vector to an array
    • Ds\Vector::unshift - Adds values to the front of the vector
    • Ds\Vector::__construct - Creates a new instance
  • e
    • each - 配列から現在のキーと値のペアを返して、カーソルを進める
    • easter_date - 指定した年における復活祭の真夜中のUnix時を得る
    • easter_days - 指定した年において、3 月 21 日から復活祭までの日数を得る
    • echo - 1 つ以上の文字列を出力する
    • eio_busy - 人為的に負荷を高くする。テストやベンチマークなどで有用
    • eio_cancel - リクエストを取り消す
    • eio_chmod - ファイルやディレクトリのパーミッションを変更する
    • eio_chown - ファイルやディレクトリのオーナーを変更する
    • eio_close - ファイルを閉じる
    • eio_custom - eio_* のようなカスタムリクエストを実行する
    • eio_dup2 - ファイルディスクリプタを複製する
    • eio_event_loop - すべてのリクエストを処理し終えるまで libeio をポールする
    • eio_fallocate - 呼び出し元が、ファイルに割り当てられたディスク空間を直接操作できるようにする
    • eio_fchmod - ファイルのパーミッションを変更する
    • eio_fchown - ファイルのオーナーを変更する
    • eio_fdatasync - ファイルのコア内の情報をストレージデバイスに同期させる
    • eio_fstat - ファイルの状態を取得する
    • eio_fstatvfs - ファイルシステムの状態を取得する
    • eio_fsync - メモリ内でのファイルの状態をストレージデバイスに同期させる
    • eio_ftruncate - ファイルを切り詰める
    • eio_futime - ファイルの最終アクセス時刻と変更時刻を変更する
    • eio_get_event_stream - 内部での libeio との通信に使う変数を表すストリームを取得する
    • eio_get_last_error - リクエストリソースに関連づけられた直近のエラーの説明を文字列で返す
    • eio_grp - リクエストグループを作る
    • eio_grp_add - リクエストをリクエストグループに追加する
    • eio_grp_cancel - リクエストグループをキャンセルする
    • eio_grp_limit - グループリミットを設定する
    • eio_init - Eio を初期化する
    • eio_link - ファイルのハードリンクを作る
    • eio_lstat - ファイルの状態を取得する
    • eio_mkdir - ディレクトリを作る
    • eio_mknod - 特殊ファイルあるいは一般ファイルを作る
    • eio_nop - 何もせず、ただリクエストのサイクルを回す
    • eio_npending - 終了したけれども処理されなかったリクエストの数を返す
    • eio_nready - 未処理のリクエスト数を返す
    • eio_nreqs - 処理対象のリクエスト数を返す
    • eio_nthreads - 現在利用中のスレッド数を返す
    • eio_open - ファイルを開く
    • eio_poll - 未処理のリクエストがあるかどうかを調べる
    • eio_read - ファイルを、指定したオフセットから読み込む
    • eio_readahead - ファイルを先読みしてページキャッシュに格納する
    • eio_readdir - ディレクトリ全体を読み込む
    • eio_readlink - シンボリックリンクの値を読む
    • eio_realpath - 正規化された絶対パスを取得する
    • eio_rename - ファイル名や場所を変更する
    • eio_rmdir - ディレクトリを削除する
    • eio_seek - fd で指定したファイル内でのオフセットを、offset と whence に従って移動する
    • eio_sendfile - ファイルディスクリプタ間でデータを転送する
    • eio_set_max_idle - アイドルスレッドの最大数を設定する
    • eio_set_max_parallel - 最大の並列スレッド数を設定する
    • eio_set_max_poll_reqs - 一度のポールで行う最大のリクエスト回数を設定する
    • eio_set_max_poll_time - 最大のポール時間を設定する
    • eio_set_min_parallel - 最小の並列スレッド数を設定する
    • eio_stat - ファイルの状態を取得する
    • eio_statvfs - ファイルシステムの状態を取得する
    • eio_symlink - シンボリックリンクを作る
    • eio_sync - バッファのキャッシュをディスクに書き込む
    • eio_syncfs - Linux の syncfs システムコールが使えれば、それを呼ぶ
    • eio_sync_file_range - ファイルセグメントをディスクに同期する
    • eio_truncate - ファイルを切り詰める
    • eio_unlink - 名前を削除し、その名前で参照しているファイルも削除する
    • eio_utime - ファイルの最終アクセス時刻と変更時刻を変更する
    • eio_write - ファイルに書き込む
    • empty - 変数が空であるかどうかを検査する
    • EmptyIterator::current - current() メソッド
    • EmptyIterator::key - key() メソッド
    • EmptyIterator::next - next() メソッド
    • EmptyIterator::rewind - rewind() メソッド
    • EmptyIterator::valid - 現在の要素が有効かどうかを調べる
    • enchant_broker_describe - Enchant プロバイダを列挙する
    • enchant_broker_dict_exists - 辞書が存在するかどうかを調べる。空でないタグを使用する
    • enchant_broker_free - ブローカーリソースおよびその辞書を開放する
    • enchant_broker_free_dict - 辞書リソースを開放する
    • enchant_broker_get_dict_path - 指定されたバックエンドの辞書のパスを取得する
    • enchant_broker_get_error - ブローカーの直近のエラーを返す
    • enchant_broker_init - 要求を満たすブローカーオブジェクトを作成する
    • enchant_broker_list_dicts - 使用可能な辞書の一覧を返す
    • enchant_broker_request_dict - タグを使用して新しい辞書を作成する
    • enchant_broker_request_pwl_dict - PWL ファイルを使用して辞書を作成する
    • enchant_broker_set_dict_path - 指定されたバックエンドの辞書のパスを設定する
    • enchant_broker_set_ordering - その言語で使用する辞書の優先順位を宣言する
    • enchant_dict_add - 単語リストに単語を追加する
    • enchant_dict_add_to_personal - のエイリアス enchant_dict_add
    • enchant_dict_add_to_session - '単語' を、このスペルチェックセッションに追加する
    • enchant_dict_check - 単語のスペルが正しいかどうかを調べる
    • enchant_dict_describe - 個々の辞書について説明する
    • enchant_dict_get_error - 現在のスペリングセッションの直近のエラーを返す
    • enchant_dict_is_added - 現在のセッションに、単語が存在するかどうかを調べる
    • enchant_dict_is_in_session - のエイリアス enchant_dict_is_added
    • enchant_dict_quick_check - 単語のスペルが正しいかどうかを調べ、修正候補を提供する
    • enchant_dict_store_replacement - 単語の修正候補を追加する
    • enchant_dict_suggest - 修正候補となる値の一覧を返す
    • end - 配列の内部ポインタを最終要素にセットする
    • enum_exists - 列挙型が定義されているかを調べる
    • Error::getCode - エラーコードを取得する
    • Error::getFile - エラーが起きたファイルを取得する
    • Error::getLine - エラーが起きた行番号を取得する
    • Error::getMessage - エラーメッセージを取得する
    • Error::getPrevious - 直前の Throwable を返す
    • Error::getTrace - スタックトレースを取得する
    • Error::getTraceAsString - スタックトレースを文字列として取得する
    • Error::__clone - エラーをクローンする
    • Error::__construct - エラーオブジェクトを生成する
    • Error::__toString - エラーの文字列表現
    • ErrorException::getSeverity - 例外の深刻度を取得する
    • ErrorException::__construct - 例外を作成する
    • error_clear_last - 最も最近のエラーをクリア
    • error_get_last - 最後に発生したエラーを取得する
    • error_log - 定義されたエラー処理ルーチンにエラーメッセージを送信する
    • error_reporting - 出力する PHP エラーの種類を設定する
    • escapeshellarg - シェル引数として使用される文字列をエスケープする
    • escapeshellcmd - シェルのメタ文字をエスケープする
    • Ev::backend - libev が使うバックエンドを表す整数値を返す
    • Ev::depth - 再帰の深さを返す
    • Ev::embeddableBackends - 他のイベントループに埋め込めるバックエンド群を返す
    • Ev::feedSignal - シグナルイベントを Ev に送る
    • Ev::feedSignalEvent - シグナルイベントの情報をデフォルトループに送る
    • Ev::iteration - デフォルトのイベントループが新しいイベントをポーリングした回数を返す
    • Ev::now - デフォルトのイベントループで直近の処理が始まった時刻を返す
    • Ev::nowUpdate - カーネルに問い合わせて現在時刻を確認し、処理中の Ev::now が返す時刻を更新する
    • Ev::recommendedBackends - 現在のプラットフォーム上でおすすめのバックエンドのビットマスクを返す
    • Ev::resume - 一時停止していたデフォルトのイベントループを再開させる
    • Ev::run - イベントのチェックとデフォルトループのコールバックの呼び出しを開始する
    • Ev::sleep - 指定した秒数だけプロセスをブロックする
    • Ev::stop - デフォルトのイベントループを止める
    • Ev::supportedBackends - 現在の libev の構成でサポートするバックエンド群を返す
    • Ev::suspend - デフォルトのイベントループを一時停止する
    • Ev::time - epoch から現在時刻までの秒数を返す
    • Ev::verify - 内部の整合性をチェックする (デバッグ用)
    • eval - 文字列を PHP コードとして評価する
    • EvCheck::createStopped - 停止した EvCheck ウォッチャーのインスタンスを作る
    • EvCheck::__construct - EvCheck ウォッチャーオブジェクトを作る
    • EvChild::createStopped - 停止した EvChild ウォッチャーのインスタンスを作る
    • EvChild::set - ウォッチャーを設定する
    • EvChild::__construct - EvChild ウォッチャーオブジェクトを作る
    • EvEmbed::createStopped - 停止した EvEmbed ウォッチャーのインスタンスを作る
    • EvEmbed::set - ウォッチャーを設定する
    • EvEmbed::sweep - 埋め込んだループに対して単一の非ブロックスイープを行う
    • EvEmbed::__construct - EvEmbed オブジェクトを作る
    • Event::add - Makes event pending
    • Event::addSignal - のエイリアス Event::add
    • Event::addTimer - のエイリアス Event::add
    • Event::del - Makes event non-pending
    • Event::delSignal - のエイリアス Event::del
    • Event::delTimer - のエイリアス Event::del
    • Event::free - Make event non-pending and free resources allocated for this event
    • Event::getSupportedMethods - Returns array with of the names of the methods supported in this version of Libevent
    • Event::pending - Detects whether event is pending or scheduled
    • Event::set - Re-configures event
    • Event::setPriority - Set event priority
    • Event::setTimer - Re-configures timer event
    • Event::signal - Constructs signal event object
    • Event::timer - Constructs timer event object
    • Event::__construct - Constructs Event object
    • EventBase::dispatch - Dispatch pending events
    • EventBase::exit - Stop dispatching events
    • EventBase::free - Free resources allocated for this event base
    • EventBase::getFeatures - Returns bitmask of features supported
    • EventBase::getMethod - Returns event method in use
    • EventBase::getTimeOfDayCached - Returns the current event base time
    • EventBase::gotExit - Checks if the event loop was told to exit
    • EventBase::gotStop - Checks if the event loop was told to exit
    • EventBase::loop - Dispatch pending events
    • EventBase::priorityInit - Sets number of priorities per event base
    • EventBase::reInit - Re-initialize event base(after a fork)
    • EventBase::stop - Tells event_base to stop dispatching events
    • EventBase::__construct - Constructs EventBase object
    • EventBuffer::add - Append data to the end of an event buffer
    • EventBuffer::addBuffer - Move all data from a buffer provided to the current instance of EventBuffer
    • EventBuffer::appendFrom - Moves the specified number of bytes from a source buffer to the end of the current buffer
    • EventBuffer::copyout - Copies out specified number of bytes from the front of the buffer
    • EventBuffer::drain - Removes specified number of bytes from the front of the buffer without copying it anywhere
    • EventBuffer::enableLocking - 説明
    • EventBuffer::expand - Reserves space in buffer
    • EventBuffer::freeze - Prevent calls that modify an event buffer from succeeding
    • EventBuffer::lock - Acquires a lock on buffer
    • EventBuffer::prepend - Prepend data to the front of the buffer
    • EventBuffer::prependBuffer - Moves all data from source buffer to the front of current buffer
    • EventBuffer::pullup - Linearizes data within buffer and returns it's contents as a string
    • EventBuffer::read - Read data from an evbuffer and drain the bytes read
    • EventBuffer::readFrom - Read data from a file onto the end of the buffer
    • EventBuffer::readLine - Extracts a line from the front of the buffer
    • EventBuffer::search - Scans the buffer for an occurrence of a string
    • EventBuffer::searchEol - Scans the buffer for an occurrence of an end of line
    • EventBuffer::substr - Substracts a portion of the buffer data
    • EventBuffer::unfreeze - Re-enable calls that modify an event buffer
    • EventBuffer::unlock - Releases lock acquired by EventBuffer::lock
    • EventBuffer::write - Write contents of the buffer to a file or socket
    • EventBuffer::__construct - Constructs EventBuffer object
    • EventBufferEvent::close - Closes file descriptor associated with the current buffer event
    • EventBufferEvent::connect - Connect buffer event's file descriptor to given address or UNIX socket
    • EventBufferEvent::connectHost - Connects to a hostname with optionally asyncronous DNS resolving
    • EventBufferEvent::createPair - Creates two buffer events connected to each other
    • EventBufferEvent::disable - Disable events read, write, or both on a buffer event
    • EventBufferEvent::enable - Enable events read, write, or both on a buffer event
    • EventBufferEvent::free - Free a buffer event
    • EventBufferEvent::getDnsErrorString - Returns string describing the last failed DNS lookup attempt
    • EventBufferEvent::getEnabled - Returns bitmask of events currently enabled on the buffer event
    • EventBufferEvent::getInput - Returns underlying input buffer associated with current buffer event
    • EventBufferEvent::getOutput - Returns underlying output buffer associated with current buffer event
    • EventBufferEvent::read - Read buffer's data
    • EventBufferEvent::readBuffer - Drains the entire contents of the input buffer and places them into buf
    • EventBufferEvent::setCallbacks - Assigns read, write and event(status) callbacks
    • EventBufferEvent::setPriority - Assign a priority to a bufferevent
    • EventBufferEvent::setTimeouts - Set the read and write timeout for a buffer event
    • EventBufferEvent::setWatermark - Adjusts read and/or write watermarks
    • EventBufferEvent::sslError - Returns most recent OpenSSL error reported on the buffer event
    • EventBufferEvent::sslFilter - Create a new SSL buffer event to send its data over another buffer event
    • EventBufferEvent::sslGetCipherInfo - Returns a textual description of the cipher
    • EventBufferEvent::sslGetCipherName - Returns the current cipher name of the SSL connection
    • EventBufferEvent::sslGetCipherVersion - Returns version of cipher used by current SSL connection
    • EventBufferEvent::sslGetProtocol - Returns the name of the protocol used for current SSL connection
    • EventBufferEvent::sslRenegotiate - Tells a bufferevent to begin SSL renegotiation
    • EventBufferEvent::sslSocket - Creates a new SSL buffer event to send its data over an SSL on a socket
    • EventBufferEvent::write - Adds data to a buffer event's output buffer
    • EventBufferEvent::writeBuffer - Adds contents of the entire buffer to a buffer event's output buffer
    • EventBufferEvent::__construct - Constructs EventBufferEvent object
    • EventConfig::avoidMethod - Tells libevent to avoid specific event method
    • EventConfig::requireFeatures - Enters a required event method feature that the application demands
    • EventConfig::setFlags - Sets one or more flags to configure the eventual EventBase will be initialized
    • EventConfig::setMaxDispatchInterval - Prevents priority inversion
    • EventConfig::__construct - Constructs EventConfig object
    • EventDnsBase::addNameserverIp - Adds a nameserver to the DNS base
    • EventDnsBase::addSearch - Adds a domain to the list of search domains
    • EventDnsBase::clearSearch - Removes all current search suffixes
    • EventDnsBase::countNameservers - Gets the number of configured nameservers
    • EventDnsBase::loadHosts - Loads a hosts file (in the same format as /etc/hosts) from hosts file
    • EventDnsBase::parseResolvConf - Scans the resolv.conf-formatted file
    • EventDnsBase::setOption - Set the value of a configuration option
    • EventDnsBase::setSearchNdots - Set the 'ndots' parameter for searches
    • EventDnsBase::__construct - Constructs EventDnsBase object
    • EventHttp::accept - Makes an HTTP server accept connections on the specified socket stream or resource
    • EventHttp::addServerAlias - Adds a server alias to the HTTP server object
    • EventHttp::bind - Binds an HTTP server on the specified address and port
    • EventHttp::removeServerAlias - Removes server alias
    • EventHttp::setAllowedMethods - Sets the what HTTP methods are supported in requests accepted by this server, and passed to user callbacks
    • EventHttp::setCallback - Sets a callback for specified URI
    • EventHttp::setDefaultCallback - Sets default callback to handle requests that are not caught by specific callbacks
    • EventHttp::setMaxBodySize - Sets maximum request body size
    • EventHttp::setMaxHeadersSize - Sets maximum HTTP header size
    • EventHttp::setTimeout - Sets the timeout for an HTTP request
    • EventHttp::__construct - Constructs EventHttp object (the HTTP server)
    • EventHttpConnection::getBase - Returns event base associated with the connection
    • EventHttpConnection::getPeer - Gets the remote address and port associated with the connection
    • EventHttpConnection::makeRequest - Makes an HTTP request over the specified connection
    • EventHttpConnection::setCloseCallback - Set callback for connection close
    • EventHttpConnection::setLocalAddress - Sets the IP address from which HTTP connections are made
    • EventHttpConnection::setLocalPort - Sets the local port from which connections are made
    • EventHttpConnection::setMaxBodySize - Sets maximum body size for the connection
    • EventHttpConnection::setMaxHeadersSize - Sets maximum header size
    • EventHttpConnection::setRetries - Sets the retry limit for the connection
    • EventHttpConnection::setTimeout - Sets the timeout for the connection
    • EventHttpConnection::__construct - Constructs EventHttpConnection object
    • EventHttpRequest::addHeader - Adds an HTTP header to the headers of the request
    • EventHttpRequest::cancel - Cancels a pending HTTP request
    • EventHttpRequest::clearHeaders - Removes all output headers from the header list of the request
    • EventHttpRequest::closeConnection - Closes associated HTTP connection
    • EventHttpRequest::findHeader - Finds the value belonging a header
    • EventHttpRequest::free - Frees the object and removes associated events
    • EventHttpRequest::getBufferEvent - Returns EventBufferEvent object
    • EventHttpRequest::getCommand - Returns the request command(method)
    • EventHttpRequest::getConnection - Returns EventHttpConnection object
    • EventHttpRequest::getHost - Returns the request host
    • EventHttpRequest::getInputBuffer - Returns the input buffer
    • EventHttpRequest::getInputHeaders - Returns associative array of the input headers
    • EventHttpRequest::getOutputBuffer - Returns the output buffer of the request
    • EventHttpRequest::getOutputHeaders - Returns associative array of the output headers
    • EventHttpRequest::getResponseCode - Returns the response code
    • EventHttpRequest::getUri - Returns the request URI
    • EventHttpRequest::removeHeader - Removes an HTTP header from the headers of the request
    • EventHttpRequest::sendError - Send an HTML error message to the client
    • EventHttpRequest::sendReply - Send an HTML reply to the client
    • EventHttpRequest::sendReplyChunk - Send another data chunk as part of an ongoing chunked reply
    • EventHttpRequest::sendReplyEnd - Complete a chunked reply, freeing the request as appropriate
    • EventHttpRequest::sendReplyStart - Initiate a chunked reply
    • EventHttpRequest::__construct - Constructs EventHttpRequest object
    • EventListener::disable - Disables an event connect listener object
    • EventListener::enable - Enables an event connect listener object
    • EventListener::getBase - Returns event base associated with the event listener
    • EventListener::getSocketName - Retreives the current address to which the listener's socket is bound
    • EventListener::setCallback - The setCallback purpose
    • EventListener::setErrorCallback - Set event listener's error callback
    • EventListener::__construct - Creates new connection listener associated with an event base
    • EventSslContext::__construct - Constructs an OpenSSL context for use with Event classes
    • EventUtil::getLastSocketErrno - Returns the most recent socket error number
    • EventUtil::getLastSocketError - Returns the most recent socket error
    • EventUtil::getSocketFd - Returns numeric file descriptor of a socket, or stream
    • EventUtil::getSocketName - Retreives the current address to which the socket is bound
    • EventUtil::setSocketOption - Sets socket options
    • EventUtil::sslRandPoll - Generates entropy by means of OpenSSL's RAND_poll()
    • EventUtil::__construct - The abstract constructor
    • EvFork::createStopped - 停止した EvFork ウォッチャーのインスタンスを作る
    • EvFork::__construct - EvFork ウォッチャーオブジェクトを作る
    • EvIdle::createStopped - Creates instance of a stopped EvIdle watcher object
    • EvIdle::__construct - Constructs the EvIdle watcher object
    • EvIo::createStopped - Create stopped EvIo watcher object
    • EvIo::set - Configures the watcher
    • EvIo::__construct - Constructs EvIo watcher object
    • EvLoop::backend - Returns an integer describing the backend used by libev
    • EvLoop::check - Creates EvCheck object associated with the current event loop instance
    • EvLoop::child - Creates EvChild object associated with the current event loop
    • EvLoop::defaultLoop - Returns or creates the default event loop
    • EvLoop::embed - Creates an instance of EvEmbed watcher associated with the current EvLoop object
    • EvLoop::fork - Creates EvFork watcher object associated with the current event loop instance
    • EvLoop::idle - Creates EvIdle watcher object associated with the current event loop instance
    • EvLoop::invokePending - Invoke all pending watchers while resetting their pending state
    • EvLoop::io - Create EvIo watcher object associated with the current event loop instance
    • EvLoop::loopFork - Must be called after a fork
    • EvLoop::now - Returns the current "event loop time"
    • EvLoop::nowUpdate - Establishes the current time by querying the kernel, updating the time returned by EvLoop::now in the progress
    • EvLoop::periodic - Creates EvPeriodic watcher object associated with the current event loop instance
    • EvLoop::prepare - Creates EvPrepare watcher object associated with the current event loop instance
    • EvLoop::resume - Resume previously suspended default event loop
    • EvLoop::run - Begin checking for events and calling callbacks for the loop
    • EvLoop::signal - Creates EvSignal watcher object associated with the current event loop instance
    • EvLoop::stat - Creates EvStat watcher object associated with the current event loop instance
    • EvLoop::stop - Stops the event loop
    • EvLoop::suspend - Suspend the loop
    • EvLoop::timer - Creates EvTimer watcher object associated with the current event loop instance
    • EvLoop::verify - Performs internal consistency checks(for debugging)
    • EvLoop::__construct - Constructs the event loop object
    • EvPeriodic::again - Simply stops and restarts the periodic watcher again
    • EvPeriodic::at - Returns the absolute time that this watcher is supposed to trigger next
    • EvPeriodic::createStopped - Create a stopped EvPeriodic watcher
    • EvPeriodic::set - Configures the watcher
    • EvPeriodic::__construct - Constructs EvPeriodic watcher object
    • EvPrepare::createStopped - 停止した EvPrepare ウォッチャーのインスタンスを作る
    • EvPrepare::__construct - EvPrepare ウォッチャーオブジェクトを作る
    • EvSignal::createStopped - Create stopped EvSignal watcher object
    • EvSignal::set - Configures the watcher
    • EvSignal::__construct - Constructs EvSignal watcher object
    • EvStat::attr - Returns the values most recently detected by Ev
    • EvStat::createStopped - Create a stopped EvStat watcher object
    • EvStat::prev - Returns the previous set of values returned by EvStat::attr
    • EvStat::set - Configures the watcher
    • EvStat::stat - Initiates the stat call
    • EvStat::__construct - Constructs EvStat watcher object
    • EvTimer::again - Restarts the timer watcher
    • EvTimer::createStopped - Creates EvTimer stopped watcher object
    • EvTimer::set - Configures the watcher
    • EvTimer::__construct - Constructs an EvTimer watcher object
    • EvWatcher::clear - Clear watcher pending status
    • EvWatcher::feed - Feeds the given revents set into the event loop
    • EvWatcher::getLoop - Returns the loop responsible for the watcher
    • EvWatcher::invoke - Invokes the watcher callback with the given received events bit mask
    • EvWatcher::keepalive - Configures whether to keep the loop from returning
    • EvWatcher::setCallback - Sets new callback for the watcher
    • EvWatcher::start - Starts the watcher
    • EvWatcher::stop - Stops the watcher
    • EvWatcher::__construct - Abstract constructor of a watcher object
    • Exception::getCode - 例外コードを取得する
    • Exception::getFile - 例外が作られたファイルを取得する
    • Exception::getLine - 例外が作られた行を取得する
    • Exception::getMessage - 例外メッセージを取得する
    • Exception::getPrevious - 前の例外(Throwable)を返す
    • Exception::getTrace - スタックトレースを取得する
    • Exception::getTraceAsString - スタックトレースを文字列で取得する
    • Exception::__clone - 例外をコピーする
    • Exception::__construct - 例外を作成する
    • Exception::__toString - 例外の文字列表現
    • exec - 外部プログラムを実行する
    • Executable::execute - ステートメントを実行する
    • ExecutionStatus::__construct - ExecutionStatus のコンストラクタ
    • exif_imagetype - イメージの型を定義する
    • exif_read_data - 画像ファイルから EXIF ヘッダを読み込む
    • exif_tagname - インデックスに対応するヘッダ名を取得する
    • exif_thumbnail - 画像に埋め込まれたサムネイルを取得する
    • exit - メッセージを出力し、現在のスクリプトを終了する
    • exp - e の累乗を計算する
    • expect_expectl - プロセスの出力がパターンに一致する・指定した時間が経過する・ あるいは EOF に達するのいずれかにあてはまるまで待ち続ける
    • expect_popen - Bourne シェル経由でコマンドを実行し、プロセスへの PTY ストリームをオープンする
    • explode - 文字列を文字列により分割する
    • expm1 - 値がゼロに近い時にでも精度を保つために exp(number) - 1 を返す
    • expression - プリペアドステートメントの変数をパラメータとしてバインドする
    • Expression::__construct - Expression のコンストラクタ
    • extension_loaded - ある拡張モジュールがロードされているかどうかを調べる
    • extract - 配列からシンボルテーブルに変数をインポートする
    • ezmlm_hash - EZMLM で必要なハッシュ値を計算する
  • f
    • FANNConnection::getFromNeuron - Returns the postions of starting neuron
    • FANNConnection::getToNeuron - Returns the postions of terminating neuron
    • FANNConnection::getWeight - Returns the connection weight
    • FANNConnection::setWeight - Sets the connections weight
    • FANNConnection::__construct - The connection constructor
    • fann_cascadetrain_on_data - Trains on an entire dataset, for a period of time using the Cascade2 training algorithm
    • fann_cascadetrain_on_file - Trains on an entire dataset read from file, for a period of time using the Cascade2 training algorithm
    • fann_clear_scaling_params - Clears scaling parameters
    • fann_copy - Creates a copy of a fann structure
    • fann_create_from_file - Constructs a backpropagation neural network from a configuration file
    • fann_create_shortcut - Creates a standard backpropagation neural network which is not fully connectected and has shortcut connections
    • fann_create_shortcut_array - Creates a standard backpropagation neural network which is not fully connectected and has shortcut connections
    • fann_create_sparse - Creates a standard backpropagation neural network, which is not fully connected
    • fann_create_sparse_array - Creates a standard backpropagation neural network, which is not fully connected using an array of layer sizes
    • fann_create_standard - Creates a standard fully connected backpropagation neural network
    • fann_create_standard_array - Creates a standard fully connected backpropagation neural network using an array of layer sizes
    • fann_create_train - Creates an empty training data struct
    • fann_create_train_from_callback - Creates the training data struct from a user supplied function
    • fann_descale_input - Scale data in input vector after get it from ann based on previously calculated parameters
    • fann_descale_output - Scale data in output vector after get it from ann based on previously calculated parameters
    • fann_descale_train - Descale input and output data based on previously calculated parameters
    • fann_destroy - Destroys the entire network and properly freeing all the associated memory
    • fann_destroy_train - Destructs the training data
    • fann_duplicate_train_data - Returns an exact copy of a fann train data
    • fann_get_activation_function - Returns the activation function
    • fann_get_activation_steepness - Returns the activation steepness for supplied neuron and layer number
    • fann_get_bias_array - Get the number of bias in each layer in the network
    • fann_get_bit_fail - The number of fail bits
    • fann_get_bit_fail_limit - Returns the bit fail limit used during training
    • fann_get_cascade_activation_functions - Returns the cascade activation functions
    • fann_get_cascade_activation_functions_count - Returns the number of cascade activation functions
    • fann_get_cascade_activation_steepnesses - Returns the cascade activation steepnesses
    • fann_get_cascade_activation_steepnesses_count - The number of activation steepnesses
    • fann_get_cascade_candidate_change_fraction - Returns the cascade candidate change fraction
    • fann_get_cascade_candidate_limit - Return the candidate limit
    • fann_get_cascade_candidate_stagnation_epochs - Returns the number of cascade candidate stagnation epochs
    • fann_get_cascade_max_cand_epochs - Returns the maximum candidate epochs
    • fann_get_cascade_max_out_epochs - Returns the maximum out epochs
    • fann_get_cascade_min_cand_epochs - Returns the minimum candidate epochs
    • fann_get_cascade_min_out_epochs - Returns the minimum out epochs
    • fann_get_cascade_num_candidates - Returns the number of candidates used during training
    • fann_get_cascade_num_candidate_groups - Returns the number of candidate groups
    • fann_get_cascade_output_change_fraction - Returns the cascade output change fraction
    • fann_get_cascade_output_stagnation_epochs - Returns the number of cascade output stagnation epochs
    • fann_get_cascade_weight_multiplier - Returns the weight multiplier
    • fann_get_connection_array - Get connections in the network
    • fann_get_connection_rate - Get the connection rate used when the network was created
    • fann_get_errno - Returns the last error number
    • fann_get_errstr - Returns the last errstr
    • fann_get_layer_array - Get the number of neurons in each layer in the network
    • fann_get_learning_momentum - Returns the learning momentum
    • fann_get_learning_rate - Returns the learning rate
    • fann_get_MSE - Reads the mean square error from the network
    • fann_get_network_type - Get the type of neural network it was created as
    • fann_get_num_input - Get the number of input neurons
    • fann_get_num_layers - Get the number of layers in the neural network
    • fann_get_num_output - Get the number of output neurons
    • fann_get_quickprop_decay - Returns the decay which is a factor that weights should decrease in each iteration during quickprop training
    • fann_get_quickprop_mu - Returns the mu factor
    • fann_get_rprop_decrease_factor - Returns the increase factor used during RPROP training
    • fann_get_rprop_delta_max - Returns the maximum step-size
    • fann_get_rprop_delta_min - Returns the minimum step-size
    • fann_get_rprop_delta_zero - Returns the initial step-size
    • fann_get_rprop_increase_factor - Returns the increase factor used during RPROP training
    • fann_get_sarprop_step_error_shift - Returns the sarprop step error shift
    • fann_get_sarprop_step_error_threshold_factor - Returns the sarprop step error threshold factor
    • fann_get_sarprop_temperature - Returns the sarprop temperature
    • fann_get_sarprop_weight_decay_shift - Returns the sarprop weight decay shift
    • fann_get_total_connections - Get the total number of connections in the entire network
    • fann_get_total_neurons - Get the total number of neurons in the entire network
    • fann_get_training_algorithm - Returns the training algorithm
    • fann_get_train_error_function - Returns the error function used during training
    • fann_get_train_stop_function - Returns the stop function used during training
    • fann_init_weights - Initialize the weights using Widrow + Nguyen’s algorithm
    • fann_length_train_data - Returns the number of training patterns in the train data
    • fann_merge_train_data - Merges the train data
    • fann_num_input_train_data - Returns the number of inputs in each of the training patterns in the train data
    • fann_num_output_train_data - Returns the number of outputs in each of the training patterns in the train data
    • fann_print_error - Prints the error string
    • fann_randomize_weights - Give each connection a random weight between min_weight and max_weight
    • fann_read_train_from_file - Reads a file that stores training data
    • fann_reset_errno - Resets the last error number
    • fann_reset_errstr - Resets the last error string
    • fann_reset_MSE - Resets the mean square error from the network
    • fann_run - Will run input through the neural network
    • fann_save - Saves the entire network to a configuration file
    • fann_save_train - Save the training structure to a file
    • fann_scale_input - Scale data in input vector before feed it to ann based on previously calculated parameters
    • fann_scale_input_train_data - Scales the inputs in the training data to the specified range
    • fann_scale_output - Scale data in output vector before feed it to ann based on previously calculated parameters
    • fann_scale_output_train_data - Scales the outputs in the training data to the specified range
    • fann_scale_train - Scale input and output data based on previously calculated parameters
    • fann_scale_train_data - Scales the inputs and outputs in the training data to the specified range
    • fann_set_activation_function - Sets the activation function for supplied neuron and layer
    • fann_set_activation_function_hidden - Sets the activation function for all of the hidden layers
    • fann_set_activation_function_layer - Sets the activation function for all the neurons in the supplied layer
    • fann_set_activation_function_output - Sets the activation function for the output layer
    • fann_set_activation_steepness - Sets the activation steepness for supplied neuron and layer number
    • fann_set_activation_steepness_hidden - Sets the steepness of the activation steepness for all neurons in the all hidden layers
    • fann_set_activation_steepness_layer - Sets the activation steepness for all of the neurons in the supplied layer number
    • fann_set_activation_steepness_output - Sets the steepness of the activation steepness in the output layer
    • fann_set_bit_fail_limit - Set the bit fail limit used during training
    • fann_set_callback - Sets the callback function for use during training
    • fann_set_cascade_activation_functions - Sets the array of cascade candidate activation functions
    • fann_set_cascade_activation_steepnesses - Sets the array of cascade candidate activation steepnesses
    • fann_set_cascade_candidate_change_fraction - Sets the cascade candidate change fraction
    • fann_set_cascade_candidate_limit - Sets the candidate limit
    • fann_set_cascade_candidate_stagnation_epochs - Sets the number of cascade candidate stagnation epochs
    • fann_set_cascade_max_cand_epochs - Sets the max candidate epochs
    • fann_set_cascade_max_out_epochs - Sets the maximum out epochs
    • fann_set_cascade_min_cand_epochs - Sets the min candidate epochs
    • fann_set_cascade_min_out_epochs - Sets the minimum out epochs
    • fann_set_cascade_num_candidate_groups - Sets the number of candidate groups
    • fann_set_cascade_output_change_fraction - Sets the cascade output change fraction
    • fann_set_cascade_output_stagnation_epochs - Sets the number of cascade output stagnation epochs
    • fann_set_cascade_weight_multiplier - Sets the weight multiplier
    • fann_set_error_log - Sets where the errors are logged to
    • fann_set_input_scaling_params - Calculate input scaling parameters for future use based on training data
    • fann_set_learning_momentum - Sets the learning momentum
    • fann_set_learning_rate - Sets the learning rate
    • fann_set_output_scaling_params - Calculate output scaling parameters for future use based on training data
    • fann_set_quickprop_decay - Sets the quickprop decay factor
    • fann_set_quickprop_mu - Sets the quickprop mu factor
    • fann_set_rprop_decrease_factor - Sets the decrease factor used during RPROP training
    • fann_set_rprop_delta_max - Sets the maximum step-size
    • fann_set_rprop_delta_min - Sets the minimum step-size
    • fann_set_rprop_delta_zero - Sets the initial step-size
    • fann_set_rprop_increase_factor - Sets the increase factor used during RPROP training
    • fann_set_sarprop_step_error_shift - Sets the sarprop step error shift
    • fann_set_sarprop_step_error_threshold_factor - Sets the sarprop step error threshold factor
    • fann_set_sarprop_temperature - Sets the sarprop temperature
    • fann_set_sarprop_weight_decay_shift - Sets the sarprop weight decay shift
    • fann_set_scaling_params - Calculate input and output scaling parameters for future use based on training data
    • fann_set_training_algorithm - Sets the training algorithm
    • fann_set_train_error_function - Sets the error function used during training
    • fann_set_train_stop_function - Sets the stop function used during training
    • fann_set_weight - Set a connection in the network
    • fann_set_weight_array - Set connections in the network
    • fann_shuffle_train_data - Shuffles training data, randomizing the order
    • fann_subset_train_data - Returns an copy of a subset of the train data
    • fann_test - Test with a set of inputs, and a set of desired outputs
    • fann_test_data - Test a set of training data and calculates the MSE for the training data
    • fann_train - Train one iteration with a set of inputs, and a set of desired outputs
    • fann_train_epoch - Train one epoch with a set of training data
    • fann_train_on_data - Trains on an entire dataset for a period of time
    • fann_train_on_file - Trains on an entire dataset, which is read from file, for a period of time
    • fastcgi_finish_request - すべてのレスポンスデータをクライアントにフラッシュする
    • fbird_add_user - のエイリアス ibase_add_user
    • fbird_affected_rows - のエイリアス ibase_affected_rows
    • fbird_backup - のエイリアス ibase_backup
    • fbird_blob_add - のエイリアス ibase_blob_add
    • fbird_blob_cancel - Cancel creating blob
    • fbird_blob_close - のエイリアス ibase_blob_close
    • fbird_blob_create - のエイリアス ibase_blob_create
    • fbird_blob_echo - のエイリアス ibase_blob_echo
    • fbird_blob_get - のエイリアス ibase_blob_get
    • fbird_blob_import - のエイリアス ibase_blob_import
    • fbird_blob_info - のエイリアス ibase_blob_info
    • fbird_blob_open - のエイリアス ibase_blob_open
    • fbird_close - のエイリアス ibase_close
    • fbird_commit - のエイリアス ibase_commit
    • fbird_commit_ret - のエイリアス ibase_commit_ret
    • fbird_connect - のエイリアス ibase_connect
    • fbird_db_info - のエイリアス ibase_db_info
    • fbird_delete_user - のエイリアス ibase_delete_user
    • fbird_drop_db - のエイリアス ibase_drop_db
    • fbird_errcode - のエイリアス ibase_errcode
    • fbird_errmsg - のエイリアス ibase_errmsg
    • fbird_execute - のエイリアス ibase_execute
    • fbird_fetch_assoc - のエイリアス ibase_fetch_assoc
    • fbird_fetch_object - のエイリアス ibase_fetch_object
    • fbird_fetch_row - のエイリアス ibase_fetch_row
    • fbird_field_info - のエイリアス ibase_field_info
    • fbird_free_event_handler - のエイリアス ibase_free_event_handler
    • fbird_free_query - のエイリアス ibase_free_query
    • fbird_free_result - のエイリアス ibase_free_result
    • fbird_gen_id - のエイリアス ibase_gen_id
    • fbird_maintain_db - のエイリアス ibase_maintain_db
    • fbird_modify_user - のエイリアス ibase_modify_user
    • fbird_name_result - のエイリアス ibase_name_result
    • fbird_num_fields - のエイリアス ibase_num_fields
    • fbird_num_params - のエイリアス ibase_num_params
    • fbird_param_info - のエイリアス ibase_param_info
    • fbird_pconnect - のエイリアス ibase_pconnect
    • fbird_prepare - のエイリアス ibase_prepare
    • fbird_query - のエイリアス ibase_query
    • fbird_restore - のエイリアス ibase_restore
    • fbird_rollback - のエイリアス ibase_rollback
    • fbird_rollback_ret - のエイリアス ibase_rollback_ret
    • fbird_server_info - のエイリアス ibase_server_info
    • fbird_service_attach - のエイリアス ibase_service_attach
    • fbird_service_detach - のエイリアス ibase_service_detach
    • fbird_set_event_handler - のエイリアス ibase_set_event_handler
    • fbird_trans - のエイリアス ibase_trans
    • fbird_wait_event - のエイリアス ibase_wait_event
    • fclose - オープンされたファイルポインタをクローズする
    • fdatasync - データをファイルに同期する(但しメタデータは除く)
    • fdf_add_doc_javascript - FDF ドキュメントに javascript コードを追加する
    • fdf_add_template - テンプレートを FDF ドキュメントに追加する
    • fdf_close - FDF ドキュメントを閉じる
    • fdf_create - 新規 FDF ドキュメントを作成する
    • fdf_enum_values - 各ドキュメントの値に対してユーザー定義関数をコールする
    • fdf_errno - 直近の fdf 操作に関するエラーコードを返す
    • fdf_error - 直近の fdf エラーコードについての説明を返す
    • fdf_get_ap - フィールドの外観を取得する
    • fdf_get_attachment - FDF に埋め込まれている、アップロードされたファイルを展開する
    • fdf_get_encoding - /Encoding キーの値を取得する
    • fdf_get_file - /F キーの値を得る
    • fdf_get_flags - フィールドのフラグを取得する
    • fdf_get_opt - フィールドのオプション配列から値を取得する
    • fdf_get_status - /STATUS キーの値を得る
    • fdf_get_value - フィールドの値を得る
    • fdf_get_version - FDF API あるいはファイルのバージョンを取得する
    • fdf_header - FDF 固有の出力ヘッダをセットする
    • fdf_next_field_name - 次のフィールド名を得る
    • fdf_open - FDF ドキュメントをオープンする
    • fdf_open_string - 文字列から FDF ドキュメントを読み込む
    • fdf_remove_item - フォームのターゲットフレームを設定する
    • fdf_save - FDF ドキュメントを保存する
    • fdf_save_string - FDF ドキュメントを文字列として返す
    • fdf_set_ap - フィールドの外観を設定する
    • fdf_set_encoding - FDF 文字エンコーディングを設定する
    • fdf_set_file - FDF データを表示する PDF ドキュメントを設定する
    • fdf_set_flags - フィールドのフラグを設定する
    • fdf_set_javascript_action - フィールドの javascript アクションを設定する
    • fdf_set_on_import_javascript - Acrobat が FDF をオープンした際に実行される javascript のコードを追加する
    • fdf_set_opt - フィールドのオプションを設定する
    • fdf_set_status - /STATUS キーの値を設定する
    • fdf_set_submit_form_action - フィールドの投稿フォームアクションを設定する
    • fdf_set_target_frame - フォームの表示対象となるフレームを設定する
    • fdf_set_value - フィールドの値を設定する
    • fdf_set_version - FDF ファイルのバージョン番号を設定する
    • fdiv - IEEE 754 に従い、数値の除算を行う
    • feof - ファイルポインタがファイル終端に達しているかどうか調べる
    • FFI::addr - Creates an unmanaged pointer to C data
    • FFI::alignof - Gets the alignment
    • FFI::arrayType - Dynamically constructs a new C array type
    • FFI::cast - Performs a C type cast
    • FFI::cdef - Creates a new FFI object
    • FFI::free - Releases an unmanaged data structure
    • FFI::isNull - Checks whether a FFI\CData is a null pointer
    • FFI::load - Loads C declarations from a C header file
    • FFI::memcmp - Compares memory areas
    • FFI::memcpy - Copies one memory area to another
    • FFI::memset - Fills a memory area
    • FFI::new - Creates a C data structure
    • FFI::scope - Instantiates an FFI object with C declarations parsed during preloading
    • FFI::sizeof - Gets the size of C data or types
    • FFI::string - Creates a PHP string from a memory area
    • FFI::type - Creates an FFI\CType object from a C declaration
    • FFI::typeof - Gets the FFI\CType of FFI\CData
    • FFI\CType::getAlignment - Description
    • FFI\CType::getArrayElementType - Description
    • FFI\CType::getArrayLength - Description
    • FFI\CType::getAttributes - Description
    • FFI\CType::getEnumKind - Description
    • FFI\CType::getFuncABI - Description
    • FFI\CType::getFuncParameterCount - Description
    • FFI\CType::getFuncParameterType - Description
    • FFI\CType::getFuncReturnType - Description
    • FFI\CType::getKind - Description
    • FFI\CType::getName - Description
    • FFI\CType::getPointerType - Description
    • FFI\CType::getSize - Description
    • FFI\CType::getStructFieldNames - Description
    • FFI\CType::getStructFieldOffset - Description
    • FFI\CType::getStructFieldType - Description
    • fflush - 出力をファイルにフラッシュする
    • fgetc - ファイルポインタから1文字取り出す
    • fgetcsv - ファイルポインタから行を取得し、CSVフィールドを処理する
    • fgets - ファイルポインタから 1 行取得する
    • fgetss - ファイルポインタから 1 行取り出し、HTML タグを取り除く
    • Fiber::getCurrent - 現在実行中のファイバーのインスタンスを取得する
    • Fiber::getReturn - ファイバーが返した値を取得する
    • Fiber::isRunning - ファイバーが実行中かどうかを調べる
    • Fiber::isStarted - ファイバーが開始したかどうかを調べる
    • Fiber::isSuspended - ファイバーが停止中かどうかを調べる
    • Fiber::isTerminated - ファイバーが終了しているかを調べる
    • Fiber::resume - 値を渡して、ファイバーの実行を再開させる
    • Fiber::start - ファイバーの実行を開始する
    • Fiber::suspend - 現在実行中のファイバーを停止する
    • Fiber::throw - ファイバーの実行を、例外をスローすることで再開する
    • Fiber::__construct - 新しいファイバーのインスタンスを構築する
    • FiberError::__construct - インスタンス化を禁止するためのコンストラクタ
    • file - ファイル全体を読み込んで配列に格納する
    • fileatime - ファイルの最終アクセス時刻を取得する
    • filectime - ファイルの inode 変更時刻を取得する
    • filegroup - ファイルのグループを取得する
    • fileinode - ファイルの inode を取得する
    • filemtime - ファイルの更新時刻を取得する
    • fileowner - ファイルの所有者を取得する
    • fileperms - ファイルのパーミッションを取得する
    • filesize - ファイルのサイズを取得する
    • FilesystemIterator::current - 現在のファイル
    • FilesystemIterator::getFlags - 処理フラグを取得する
    • FilesystemIterator::key - 現在のファイルのキーを取得する
    • FilesystemIterator::next - 次のファイルに移動する
    • FilesystemIterator::rewind - 先頭に巻き戻す
    • FilesystemIterator::setFlags - 処理フラグを設定する
    • FilesystemIterator::__construct - 新しい filesystem イテレータを作成する
    • filetype - ファイルタイプを取得する
    • file_exists - ファイルまたはディレクトリが存在するかどうか調べる
    • file_get_contents - ファイルの内容を全て文字列に読み込む
    • file_put_contents - データをファイルに書き込む
    • FilterIterator::accept - イテレータの現在の要素がフィルタを満たすかどうかを調べる
    • FilterIterator::current - 現在の要素の値を取得する
    • FilterIterator::key - 現在のキーを取得する
    • FilterIterator::next - イテレータを前に移動する
    • FilterIterator::rewind - イテレータを巻き戻す
    • FilterIterator::valid - 現在の要素が有効かどうかをチェックする
    • FilterIterator::__construct - filterIterator を作成する
    • filter_has_var - 指定した型の変数が存在するかどうかを調べる
    • filter_id - フィルタの名前からフィルタ ID を返す
    • filter_input - 指定した名前の変数を外部から受け取り、オプションでそれをフィルタリングする
    • filter_input_array - 外部から変数を受け取り、オプションでそれらをフィルタリングする
    • filter_list - サポートされるフィルタの一覧を返す
    • filter_var - 指定したフィルタでデータをフィルタリングする
    • filter_var_array - 複数の変数を受け取り、オプションでそれらをフィルタリングする
    • finfo::buffer - finfo_buffer() のエイリアス
    • finfo::file - finfo_file() のエイリアス
    • finfo::set_flags - finfo_set_flags() のエイリアス
    • finfo::__construct - finfo_open のエイリアス
    • finfo_buffer - 文字列バッファの情報を返す
    • finfo_close - fileinfo インスタンスを閉じる
    • finfo_file - ファイルについての情報を返す
    • finfo_open - 新しい fileinfo インスタンスを作成する
    • finfo_set_flags - libmagic のオプションを設定する
    • floatval - 変数の float 値を取得する
    • flock - 汎用のファイルロックを行う
    • floor - 端数の切り捨て
    • flush - システム出力バッファをフラッシュする
    • fmod - 引数で除算をした際の剰余を返す
    • fnmatch - ファイル名がパターンにマッチするか調べる
    • fopen - ファイルまたは URL をオープンする
    • forward_static_call - static メソッドをコールする
    • forward_static_call_array - static メソッドをコールし、引数を配列で渡す
    • fpassthru - ファイルポインタ上に残っているすべてのデータを出力する
    • fpm_get_status - 現在の FPMプール の状態を返す
    • fprintf - フォーマットされた文字列をストリームに書き込む
    • fputcsv - 行を CSV 形式にフォーマットし、ファイルポインタに書き込む
    • fputs - fwrite のエイリアス
    • fread - バイナリセーフなファイルの読み込み
    • frenchtojd - フランス革命暦をユリウス積算日に変換する
    • fscanf - フォーマットに基づきファイルからの入力を処理する
    • fseek - ファイルポインタを移動する
    • fsockopen - インターネット接続もしくは Unix ドメインソケット接続をオープンする
    • fstat - オープンしたファイルポインタからファイルに関する情報を取得する
    • fsync - データをファイルに同期する(メタデータも含む)
    • ftell - ファイルの読み書き用ポインタの現在位置を返す
    • ftok - パス名とプロジェクト ID を、System V IPC キーに変換する
    • ftp_alloc - アップロードされるファイルのためのスペースを確保する
    • ftp_append - ファイルの内容をFTPサーバー上の別のファイルに追加する
    • ftp_cdup - 親ディレクトリに移動する
    • ftp_chdir - FTP サーバー上でディレクトリを移動する
    • ftp_chmod - FTP 経由でファイルのパーミッションを設定する
    • ftp_close - FTP 接続を閉じる
    • ftp_connect - FTP 接続をオープンする
    • ftp_delete - FTP サーバー上のファイルを削除する
    • ftp_exec - FTP サーバー上でのコマンドの実行をリクエストする
    • ftp_fget - FTP サーバーからファイルをダウンロードし、オープン中のファイルに保存する
    • ftp_fput - オープン中のファイルを FTP サーバーにアップロードする
    • ftp_get - FTP サーバーからファイルをダウンロードする
    • ftp_get_option - カレントの FTP 接続での種々の実行時動作を取得する
    • ftp_login - FTP 接続にログインする
    • ftp_mdtm - 指定したファイルが最後に更新された時刻を返す
    • ftp_mkdir - ディレクトリを作成する
    • ftp_mlsd - ディレクトリに存在するファイルの一覧を返す
    • ftp_nb_continue - ファイルの取得/送信を継続する（非ブロッキング）
    • ftp_nb_fget - FTP サーバーからファイルをダウンロードし、オープン中のファイルに保存する（非ブロッキング）
    • ftp_nb_fput - オープン中のファイルを FTP サーバーに保存する（非ブロッキング）
    • ftp_nb_get - FTP サーバーからファイルを取得し、ローカルファイルに書き込む（非ブロッキング）
    • ftp_nb_put - FTP サーバーにファイルを保存する（非ブロッキング）
    • ftp_nlist - 指定したディレクトリのファイルの一覧を返す
    • ftp_pasv - パッシブモードをオンまたはオフにする
    • ftp_put - FTP サーバーにファイルをアップロードする
    • ftp_pwd - カレントのディレクトリ名を返す
    • ftp_quit - ftp_close のエイリアス
    • ftp_raw - FTP サーバーに任意のコマンドを送信する
    • ftp_rawlist - 指定したディレクトリの詳細なファイル一覧を返す
    • ftp_rename - FTP サーバー上のファイルまたはディレクトリの名前を変更する
    • ftp_rmdir - ディレクトリを削除する
    • ftp_set_option - さまざまな FTP 実行時オプションを設定する
    • ftp_site - SITEコマンドをサーバーに送信する
    • ftp_size - 指定したファイルのサイズを返す
    • ftp_ssl_connect - セキュアな SSL-FTP 接続をオープンする
    • ftp_systype - リモート FTP サーバーのシステム型 ID を返す
    • ftruncate - ファイルを指定した長さに丸める
    • function_exists - 指定した関数が定義されている場合に true を返す
    • func_get_arg - 引数のリストから要素をひとつ返す
    • func_get_args - 関数の引数リストを配列として返す
    • func_num_args - 関数に渡された引数の数を返す
    • fwrite - バイナリセーフなファイル書き込み処理
  • g
    • gc_collect_cycles - すべての既存ガベージサイクルを強制的に収集する
    • gc_disable - 循環参照コレクタを無効にする
    • gc_enable - 循環参照コレクタを有効にする
    • gc_enabled - 循環参照コレクタの状態を返す
    • gc_mem_caches - Zend Engine のメモリーマネージャによって使用されたメモリーを再利用する
    • gc_status - ガベージコレクタに関する情報を取得する
    • gd_info - 現在インストールされているGDライブラリに関する情報を取得する
    • GearmanClient::addOptions - Add client options
    • GearmanClient::addServer - Add a job server to the client
    • GearmanClient::addServers - Add a list of job servers to the client
    • GearmanClient::addTask - Add a task to be run in parallel
    • GearmanClient::addTaskBackground - Add a background task to be run in parallel
    • GearmanClient::addTaskHigh - Add a high priority task to run in parallel
    • GearmanClient::addTaskHighBackground - Add a high priority background task to be run in parallel
    • GearmanClient::addTaskLow - Add a low priority task to run in parallel
    • GearmanClient::addTaskLowBackground - Add a low priority background task to be run in parallel
    • GearmanClient::addTaskStatus - Add a task to get status
    • GearmanClient::clearCallbacks - Clear all task callback functions
    • GearmanClient::clone - Create a copy of a GearmanClient object
    • GearmanClient::context - Get the application context
    • GearmanClient::data - Get the application data (deprecated)
    • GearmanClient::do - Run a single task and return a result [deprecated]
    • GearmanClient::doBackground - Run a task in the background
    • GearmanClient::doHigh - Run a single high priority task
    • GearmanClient::doHighBackground - Run a high priority task in the background
    • GearmanClient::doJobHandle - Get the job handle for the running task
    • GearmanClient::doLow - Run a single low priority task
    • GearmanClient::doLowBackground - Run a low priority task in the background
    • GearmanClient::doNormal - Run a single task and return a result
    • GearmanClient::doStatus - Get the status for the running task
    • GearmanClient::echo - Send data to all job servers to see if they echo it back [deprecated]
    • GearmanClient::error - Returns an error string for the last error encountered
    • GearmanClient::getErrno - Get an errno value
    • GearmanClient::jobStatus - Get the status of a background job
    • GearmanClient::ping - Send data to all job servers to see if they echo it back
    • GearmanClient::removeOptions - Remove client options
    • GearmanClient::returnCode - Get the last Gearman return code
    • GearmanClient::runTasks - Run a list of tasks in parallel
    • GearmanClient::setClientCallback - Callback function when there is a data packet for a task (deprecated)
    • GearmanClient::setCompleteCallback - Set a function to be called on task completion
    • GearmanClient::setContext - Set application context
    • GearmanClient::setCreatedCallback - Set a callback for when a task is queued
    • GearmanClient::setData - Set application data (deprecated)
    • GearmanClient::setDataCallback - Callback function when there is a data packet for a task
    • GearmanClient::setExceptionCallback - Set a callback for worker exceptions
    • GearmanClient::setFailCallback - Set callback for job failure
    • GearmanClient::setOptions - Set client options
    • GearmanClient::setStatusCallback - Set a callback for collecting task status
    • GearmanClient::setTimeout - Set socket I/O activity timeout
    • GearmanClient::setWarningCallback - Set a callback for worker warnings
    • GearmanClient::setWorkloadCallback - Set a callback for accepting incremental data updates
    • GearmanClient::timeout - Get current socket I/O activity timeout value
    • GearmanClient::wait - Wait for I/O activity on all connections in a client
    • GearmanClient::__construct - Create a GearmanClient instance
    • GearmanJob::complete - Send the result and complete status (deprecated)
    • GearmanJob::data - Send data for a running job (deprecated)
    • GearmanJob::exception - Send exception for running job (deprecated)
    • GearmanJob::fail - Send fail status (deprecated)
    • GearmanJob::functionName - Get function name
    • GearmanJob::handle - Get the job handle
    • GearmanJob::returnCode - Get last return code
    • GearmanJob::sendComplete - Send the result and complete status
    • GearmanJob::sendData - Send data for a running job
    • GearmanJob::sendException - Send exception for running job (exception)
    • GearmanJob::sendFail - Send fail status
    • GearmanJob::sendStatus - Send status
    • GearmanJob::sendWarning - Send a warning
    • GearmanJob::setReturn - Set a return value
    • GearmanJob::status - Send status (deprecated)
    • GearmanJob::unique - Get the unique identifier
    • GearmanJob::warning - Send a warning (deprecated)
    • GearmanJob::workload - Get workload
    • GearmanJob::workloadSize - Get size of work load
    • GearmanJob::__construct - Create a GearmanJob instance
    • GearmanTask::create - Create a task (deprecated)
    • GearmanTask::data - Get data returned for a task
    • GearmanTask::dataSize - Get the size of returned data
    • GearmanTask::function - Get associated function name (deprecated)
    • GearmanTask::functionName - Get associated function name
    • GearmanTask::isKnown - Determine if task is known
    • GearmanTask::isRunning - Test whether the task is currently running
    • GearmanTask::jobHandle - Get the job handle
    • GearmanTask::recvData - Read work or result data into a buffer for a task
    • GearmanTask::returnCode - Get the last return code
    • GearmanTask::sendData - Send data for a task (deprecated)
    • GearmanTask::sendWorkload - Send data for a task
    • GearmanTask::taskDenominator - Get completion percentage denominator
    • GearmanTask::taskNumerator - Get completion percentage numerator
    • GearmanTask::unique - Get the unique identifier for a task
    • GearmanTask::uuid - Get the unique identifier for a task (deprecated)
    • GearmanTask::__construct - Create a GearmanTask instance
    • GearmanWorker::addFunction - Register and add callback function
    • GearmanWorker::addOptions - Add worker options
    • GearmanWorker::addServer - Add a job server
    • GearmanWorker::addServers - Add job servers
    • GearmanWorker::clone - Create a copy of the worker
    • GearmanWorker::echo - Test job server response
    • GearmanWorker::error - Get the last error encountered
    • GearmanWorker::getErrno - Get errno
    • GearmanWorker::options - Get worker options
    • GearmanWorker::register - Register a function with the job server
    • GearmanWorker::removeOptions - Remove worker options
    • GearmanWorker::returnCode - Get last Gearman return code
    • GearmanWorker::setId - Give the worker an identifier so it can be tracked when asking gearmand for the list of available workers
    • GearmanWorker::setOptions - Set worker options
    • GearmanWorker::setTimeout - Set socket I/O activity timeout
    • GearmanWorker::timeout - Get socket I/O activity timeout
    • GearmanWorker::unregister - Unregister a function name with the job servers
    • GearmanWorker::unregisterAll - Unregister all function names with the job servers
    • GearmanWorker::wait - Wait for activity from one of the job servers
    • GearmanWorker::work - Wait for and perform jobs
    • GearmanWorker::__construct - Create a GearmanWorker instance
    • Gender\Gender::connect - 外部の名前ディレクトリに接続する
    • Gender\Gender::country - 国を表すテキストを取得する
    • Gender\Gender::get - 性別を取得する
    • Gender\Gender::isNick - name0 が name1 のエイリアスかどうかを調べる
    • Gender\Gender::similarNames - 似た名前を取得する
    • Gender\Gender::__construct - Gender オブジェクトを作る
    • Generator::current - yield した値を取得する
    • Generator::getReturn - ジェネレータの戻り値を取得する
    • Generator::key - yield したキーを取得する
    • Generator::next - ジェネレータを続行する
    • Generator::rewind - イテレータを巻き戻す
    • Generator::send - 値をジェネレータに送る
    • Generator::throw - 例外をジェネレータにスローする
    • Generator::valid - イテレータが終了したかどうかを調べる
    • Generator::__wakeup - シリアライズのコールバック
    • geoip_asnum_by_name - AS番号(ASN) を取得する
    • geoip_continent_code_by_name - 二文字の大陸コードを取得する
    • geoip_country_code3_by_name - 三文字の国コードを取得する
    • geoip_country_code_by_name - 二文字の国コードを取得する
    • geoip_country_name_by_name - 完全な国名を取得する
    • geoip_database_info - GeoIP データベースの情報を取得する
    • geoip_db_avail - GeoIP データベースが使用可能かどうかを調べる
    • geoip_db_filename - 対応する GeoIP データベースのファイル名を返す
    • geoip_db_get_all_info - すべての GeoIP データベース形式についての詳細情報を返す
    • geoip_domain_by_name - セカンドレベルドメインの名前を取得する
    • geoip_id_by_name - インターネット接続方式を取得する
    • geoip_isp_by_name - インターネットサービスプロバイダ (ISP) 名を取得する
    • geoip_netspeedcell_by_name - インターネットへの接続速度を取得する
    • geoip_org_by_name - 組織名を取得する
    • geoip_record_by_name - GeoIP データベースで見つかった詳細な都市情報を返す
    • geoip_region_by_name - 国コードおよび地域を取得する
    • geoip_region_name_by_code - 国コードと地域コードから地域名を返す
    • geoip_setup_custom_directory - GeoIP データベースのカスタムディレクトリを設定する
    • geoip_time_zone_by_country_and_region - 国コードと地域コードからタイムゾーンを返す
    • getallheaders - 全てのHTTPリクエストヘッダを取得する
    • getcwd - カレントのワーキングディレクトリを取得する
    • getdate - 日付/時刻情報を取得する
    • getenv - 環境変数の値をひとつ、または全て取得する
    • gethostbyaddr - 指定した IP アドレスに対応するインターネットホスト名を取得する
    • gethostbyname - インターネットホスト名に対応するIPv4アドレスを取得する
    • gethostbynamel - 指定したインターネットホスト名に対応するIPv4アドレスのリストを取得する
    • gethostname - ホスト名を取得する
    • getimagesize - 画像の大きさを取得する
    • getimagesizefromstring - 画像の大きさを文字列から取得する
    • getlastmod - 最終更新時刻を取得する
    • getmxrr - 指定したインターネットホスト名に対応する MX レコードを取得する
    • getmygid - PHP スクリプトの所有者の GID を得る
    • getmyinode - 現在のスクリプトの inode を取得する
    • getmypid - PHP のプロセス ID を取得する
    • getmyuid - PHP スクリプト所有者のユーザー ID を取得する
    • getopt - コマンドライン引数のリストからオプションを取得する
    • getprotobyname - プロトコル名のプロトコル番号を得る
    • getprotobynumber - プロトコル番号が指すプロトコル名を取得する
    • getrandmax - 乱数の最大値を取得する
    • getrusage - 現在のリソース使用状況を取得する
    • getservbyname - インターネットサービスおよびプロトコルが関連するポート番号を取得する
    • getservbyport - ポートおよびプロトコルに対応するインターネットサービスを得る
    • getSession - MySQL サーバーに接続する
    • gettext - 現在のドメインのメッセージを参照する
    • gettimeofday - 現在の時間を得る
    • gettype - 変数の型を取得する
    • get_browser - ユーザーのブラウザの機能を取得する
    • get_called_class - "遅延静的束縛" のクラス名
    • get_cfg_var - PHP 設定オプションの値を取得する
    • get_class - オブジェクトのクラス名を返す
    • get_class_methods - クラスメソッドの名前を取得する
    • get_class_vars - クラスのデフォルトプロパティを取得する
    • get_current_user - 現在の PHP スクリプトの所有者の名前を取得する
    • get_debug_type - 変数の型名をデバッグしやすい形で取得する
    • get_declared_classes - 定義済のクラスの名前を配列として返す
    • get_declared_interfaces - 宣言されている全てのインターフェイスの配列を返す
    • get_declared_traits - 宣言されているすべてのトレイトの配列を返す
    • get_defined_constants - すべての定数の名前とその値を連想配列として返す
    • get_defined_functions - 定義済みの全ての関数を配列で返す
    • get_defined_vars - 全ての定義済の変数を配列で返す
    • get_extension_funcs - あるモジュールの関数名を配列として返す
    • get_headers - HTTP リクエストに対するレスポンス内で サーバーによって送出された全てのヘッダを取得する
    • get_html_translation_table - htmlspecialchars および htmlentities で使用される変換テーブルを返す
    • get_included_files - include または require で読み込まれたファイルの名前を配列として返す
    • get_include_path - 現在の include_path 設定オプションを取得する
    • get_loaded_extensions - コンパイル/ロードされている全てのモジュールの名前を配列として返す
    • get_magic_quotes_gpc - magic_quotes_gpc の現在の設定を得る
    • get_magic_quotes_runtime - magic_quotes_runtime の現在アクティブな設定値を取得する
    • get_mangled_object_vars - マングリングされたオブジェクトのプロパティを配列で返す
    • get_meta_tags - ファイル上のすべてのメタタグ情報を配列に展開する
    • get_object_vars - 指定したオブジェクトのプロパティを取得する
    • get_parent_class - オブジェクトの親クラスの名前を取得する
    • get_required_files - get_included_files のエイリアス
    • get_resources - アクティブなリソースを返す
    • get_resource_id - 指定されたリソースの、数値の識別子を返す
    • get_resource_type - リソース型を返す
    • glob - パターンにマッチするパス名を探す
    • GlobIterator::count - ディレクトリやファイルの数を取得する
    • GlobIterator::__construct - glob を使うディレクトリを作成する
    • Gmagick::addimage - 新しい画像を Gmagick オブジェクトの画像リストに追加する
    • Gmagick::addnoiseimage - ランダムなノイズを画像に追加する
    • Gmagick::annotateimage - 画像にテキストによる注記を加える
    • Gmagick::blurimage - blur (にじみ) フィルタを画像に追加する
    • Gmagick::borderimage - 画像の周りを枠線で囲む
    • Gmagick::charcoalimage - 木炭画をシミュレートする
    • Gmagick::chopimage - 画像の一部を取り除き、切り詰める
    • Gmagick::clear - Gmagick オブジェクトに関連付けられたすべてのリソースをクリアする
    • Gmagick::commentimage - コメントを画像に追加する
    • Gmagick::compositeimage - ある画像を別の画像に合成する
    • Gmagick::cropimage - 画像の一部を抽出する
    • Gmagick::cropthumbnailimage - 切り取ってサムネイルを作成する
    • Gmagick::current - 現在の Gmagick オブジェクトへの参照を返す
    • Gmagick::cyclecolormapimage - 画像のカラーマップを移動する
    • Gmagick::deconstructimages - 画像間の特定のピクセルの差を返す
    • Gmagick::despeckleimage - 画像内のスペックルノイズを軽減する
    • Gmagick::destroy - Gmagick オブジェクトを破棄する
    • Gmagick::drawimage - 現在の画像上の GmagickDraw オブジェクトをレンダリングする
    • Gmagick::edgeimage - 画像の輪郭を強調する
    • Gmagick::embossimage - グレースケール画像に三次元効果を施して返す
    • Gmagick::enhanceimage - ノイジーな画像の品質を向上させる
    • Gmagick::equalizeimage - 画像ヒストグラムを均等化する
    • Gmagick::flipimage - 垂直方向に反転した画像を作成する
    • Gmagick::flopimage - 水平方向に反転した画像を作成する
    • Gmagick::frameimage - 三次元の枠線をシミュレートする
    • Gmagick::gammaimage - 画像をガンマ補正する
    • Gmagick::getcopyright - GraphicsMagick API の著作権情報を文字列で返す
    • Gmagick::getfilename - 画像シーケンスに関連付けられたファイル名を取得する
    • Gmagick::getimagebackgroundcolor - 画像の背景色を返す
    • Gmagick::getimageblueprimary - 青が一番強い点を返す
    • Gmagick::getimagebordercolor - 画像の前景色を返す
    • Gmagick::getimagechanneldepth - 特定の画像チャネルの深度を返す
    • Gmagick::getimagecolors - 指定した色マップインデックスの色を返す
    • Gmagick::getimagecolorspace - 画像の色空間を取得する
    • Gmagick::getimagecompose - 画像の合成演算子を返す
    • Gmagick::getimagedelay - 画像の遅延を取得する
    • Gmagick::getimagedepth - 画像の深度を取得する
    • Gmagick::getimagedispose - 画像の配置方法を取得する
    • Gmagick::getimageextrema - 画像の極値を取得する
    • Gmagick::getimagefilename - シーケンス内の特定の画像のファイル名を返す
    • Gmagick::getimageformat - シーケンス内の特定の画像のフォーマットを返す
    • Gmagick::getimagegamma - 画像のガンマを取得する
    • Gmagick::getimagegreenprimary - 緑が一番強い点を返す
    • Gmagick::getimageheight - 画像の高さを返す
    • Gmagick::getimagehistogram - 画像のヒストグラムを取得する
    • Gmagick::getimageindex - 現在アクティブな画像のインデックスを取得する
    • Gmagick::getimageinterlacescheme - 画像のインターレース手法を取得する
    • Gmagick::getimageiterations - 画像の反復を取得する
    • Gmagick::getimagematte - 画像がマットチャネルを持っているかどうかを調べる
    • Gmagick::getimagemattecolor - 画像のマット色を返す
    • Gmagick::getimageprofile - 指定した名前の画像プロファイルを返す
    • Gmagick::getimageredprimary - 赤が一番強い点を返す
    • Gmagick::getimagerenderingintent - 画像のレンダリング方向を取得する
    • Gmagick::getimageresolution - 画像の X 方向と Y 方向の解像度を取得する
    • Gmagick::getimagescene - 画像のシーンを取得する
    • Gmagick::getimagesignature - SHA-256 メッセージダイジェストを生成する
    • Gmagick::getimagetype - 画像の型を取得する
    • Gmagick::getimageunits - 画像の解像度の単位を取得する
    • Gmagick::getimagewhitepoint - 色度が白い点を返す
    • Gmagick::getimagewidth - 画像の幅を返す
    • Gmagick::getpackagename - GraphicsMagick パッケージ名を返す
    • Gmagick::getquantumdepth - Gmagick quantum depth を返す
    • Gmagick::getreleasedate - GraphicsMagick のリリース日を返す
    • Gmagick::getsamplingfactors - 水平方向および垂直方向のサンプリング係数を取得する
    • Gmagick::getsize - Gmagick オブジェクトのサイズを取得する
    • Gmagick::getversion - GraphicsMagick API のバージョンを返す
    • Gmagick::hasnextimage - オブジェクトが次の画像を保持しているかどうかを調べる
    • Gmagick::haspreviousimage - オブジェクトが前の画像を保持しているかどうかを調べる
    • Gmagick::implodeimage - 新しい画像をコピーとして作成する
    • Gmagick::labelimage - ラベルを画像に追加する
    • Gmagick::levelimage - 画像のレベルを調節する
    • Gmagick::magnifyimage - 画像を二倍に比例拡大する
    • Gmagick::mapimage - 画像の色を、参照画像の中の最も近い色に置き換える
    • Gmagick::medianfilterimage - デジタルフィルタを適用する
    • Gmagick::minifyimage - 画像をその半分のサイズに比例縮小する
    • Gmagick::modulateimage - 明度、彩度、色相を制御する
    • Gmagick::motionblurimage - モーションブラーをシミュレートする
    • Gmagick::newimage - 新しい画像を作成する
    • Gmagick::nextimage - 次の画像に移動する
    • Gmagick::normalizeimage - カラー画像のコントラストを強調する
    • Gmagick::oilpaintimage - 油絵をシミュレートする
    • Gmagick::previousimage - オブジェクト内の前の画像に移動する
    • Gmagick::profileimage - 画像のプロファイルを追加あるいは削除する
    • Gmagick::quantizeimage - 参照画像内の色を解析する
    • Gmagick::quantizeimages - 画像シーケンス内の色を解析する
    • Gmagick::queryfontmetrics - フォントメトリクスを表す配列を返す
    • Gmagick::queryfonts - 設定したフォントを返す
    • Gmagick::queryformats - Gmagick がサポートするフォーマットを返す
    • Gmagick::radialblurimage - 画像にラジアルブラーを施す
    • Gmagick::raiseimage - 三次元のボタン風の効果をシミュレートする
    • Gmagick::read - ファイルから画像を読み込む
    • Gmagick::readimage - ファイルから画像を読み込む
    • Gmagick::readimageblob - バイナリ文字列から画像を読み込む
    • Gmagick::readimagefile - オープンしているファイルハンドルから画像を読み込む
    • Gmagick::reducenoiseimage - 画像の輪郭をなめらかにする
    • Gmagick::removeimage - 画像リストから画像を削除する
    • Gmagick::removeimageprofile - 指定した名前の画像プロファイルを削除して返す
    • Gmagick::resampleimage - 画像を指定した解像度にリサンプリングする
    • Gmagick::resizeimage - 画像のサイズを変更する
    • Gmagick::rollimage - 画像を補正する
    • Gmagick::rotateimage - 画像を回転する
    • Gmagick::scaleimage - 画像のサイズを変更する
    • Gmagick::separateimagechannel - 画像からチャネルを分離する
    • Gmagick::setCompressionQuality - オブジェクトのデフォルトの圧縮クオリティを設定する
    • Gmagick::setfilename - 画像を読み書きする前にファイル名を設定する
    • Gmagick::setimagebackgroundcolor - 画像の背景色を設定する
    • Gmagick::setimageblueprimary - 青が一番強い点を設定する
    • Gmagick::setimagebordercolor - 画像の枠線の色を設定する
    • Gmagick::setimagechanneldepth - 特定の画像チャネルの深度を設定する
    • Gmagick::setimagecolorspace - 画像の色空間を設定する
    • Gmagick::setimagecompose - 画像の合成演算子を設定する
    • Gmagick::setimagedelay - 画像の遅延を設定する
    • Gmagick::setimagedepth - 画像の深度を設定する
    • Gmagick::setimagedispose - 画像の配置方法を設定する
    • Gmagick::setimagefilename - シーケンス内の特定の画像のファイル名を設定する
    • Gmagick::setimageformat - 特定の画像のフォーマットを設定する
    • Gmagick::setimagegamma - 画像のガンマを設定する
    • Gmagick::setimagegreenprimary - 緑が一番強い点を設定する
    • Gmagick::setimageindex - 画像リスト内でのイテレータの位置を、index パラメータで指定した場所に設定する
    • Gmagick::setimageinterlacescheme - 画像のインターレース手法を設定する
    • Gmagick::setimageiterations - 画像の反復を設定する
    • Gmagick::setimageprofile - 指定した名前の画像プロファイルを Gmagick オブジェクトに追加する
    • Gmagick::setimageredprimary - 赤が一番強い点を設定する
    • Gmagick::setimagerenderingintent - 画像のレンダリング方向を設定する
    • Gmagick::setimageresolution - 画像の解像度を設定する
    • Gmagick::setimagescene - 画像のシーンを設定する
    • Gmagick::setimagetype - 画像の型を設定する
    • Gmagick::setimageunits - 画像の解像度の単位を設定する
    • Gmagick::setimagewhitepoint - 画像の色度が白い点を設定する
    • Gmagick::setsamplingfactors - 画像のサンプリング係数を設定する
    • Gmagick::setsize - Gmagick オブジェクトのサイズを設定する
    • Gmagick::shearimage - 平行四辺形を作成する
    • Gmagick::solarizeimage - 画像にソラリゼーション効果を適用する
    • Gmagick::spreadimage - ブロック内の各ピクセルをランダムに移動する
    • Gmagick::stripimage - 画像からすべてのプロパティやコメントを除去する
    • Gmagick::swirlimage - 画像の中心から、ピクセルを渦巻状にする
    • Gmagick::thumbnailimage - 画像のサイズを変更する
    • Gmagick::trimimage - 画像の輪郭を削除する
    • Gmagick::write - Gmagick::writeimage のエイリアス
    • Gmagick::writeimage - 画像を指定したファイル名で書き出す
    • Gmagick::__construct - Gmagick のコンストラクタ
    • GmagickDraw::annotate - 画像の上にテキストを描画する
    • GmagickDraw::arc - 弧を描く
    • GmagickDraw::bezier - ベジエ曲線を描く
    • GmagickDraw::ellipse - 楕円を画像上に描く
    • GmagickDraw::getfillcolor - 塗りつぶし色を返す
    • GmagickDraw::getfillopacity - 描画に使う不透明度を返す
    • GmagickDraw::getfont - フォントを返す
    • GmagickDraw::getfontsize - フォントのポイント数を返す
    • GmagickDraw::getfontstyle - フォントスタイルを返す
    • GmagickDraw::getfontweight - フォントのウェイトを返す
    • GmagickDraw::getstrokecolor - オブジェクトの輪郭の描画に使う色を返す
    • GmagickDraw::getstrokeopacity - オブジェクトの輪郭の不透明度を返す
    • GmagickDraw::getstrokewidth - オブジェクトの輪郭の描画に使う線の幅を返す
    • GmagickDraw::gettextdecoration - テキストのデコレーションを返す
    • GmagickDraw::gettextencoding - テキストのアノテーションで使うコードセットを返す
    • GmagickDraw::line - 直線を描く
    • GmagickDraw::point - 点を描く
    • GmagickDraw::polygon - 多角形を描く
    • GmagickDraw::polyline - ポリラインを描く
    • GmagickDraw::rectangle - 矩形を描く
    • GmagickDraw::rotate - 指定した回転角を現在の座標空間に適用する
    • GmagickDraw::roundrectangle - 角が丸い矩形を描く
    • GmagickDraw::scale - 倍率を調整する
    • GmagickDraw::setfillcolor - オブジェクトの塗りつぶしに使う色を設定する
    • GmagickDraw::setfillopacity - 不透明度を設定する
    • GmagickDraw::setfont - テキストのアノテーションで使うフォントの完全な名前を設定する
    • GmagickDraw::setfontsize - テキストのアノテーションで使うフォントのポイント数を設定する
    • GmagickDraw::setfontstyle - テキストのアノテーションで使うフォントのスタイルを設定する
    • GmagickDraw::setfontweight - フォントのウェイトを設定する
    • GmagickDraw::setstrokecolor - オブジェクトの輪郭の描画に使う色を設定する
    • GmagickDraw::setstrokeopacity - オブジェクトの輪郭の不透明度を設定する
    • GmagickDraw::setstrokewidth - オブジェクトの輪郭の描画に使う線の幅を設定する
    • GmagickDraw::settextdecoration - デコレーションを設定する
    • GmagickDraw::settextencoding - テキストのコードセットを設定する
    • GmagickPixel::getcolor - 色を返す
    • GmagickPixel::getcolorcount - この色の色カウントを返す
    • GmagickPixel::getcolorvalue - 指定した色チャネルの正規化した値を取得する
    • GmagickPixel::setcolor - 色を設定する
    • GmagickPixel::setcolorvalue - 色チャネルの正規化した値を設定する
    • GmagickPixel::__construct - GmagickPixel のコンストラクタ
    • gmdate - GMT/UTC の日付/時刻を書式化する
    • gmmktime - GMT 日付から Unix タイムスタンプを取得する
    • GMP::__construct - GMP数を作成する
    • GMP::__serialize - GMP オブジェクトをシリアライズする
    • GMP::__unserialize - data 引数をGMP オブジェクトとして復元する
    • gmp_abs - 絶対値
    • gmp_add - 数値を加算する
    • gmp_and - ビット AND を計算する
    • gmp_binomial - 二項係数を計算する
    • gmp_clrbit - ビットをクリアする
    • gmp_cmp - 数を比較する
    • gmp_com - 1 の補数を計算する
    • gmp_div - gmp_div_q のエイリアス
    • gmp_divexact - 正確な除算
    • gmp_div_q - 数値を除算する
    • gmp_div_qr - 除算を行い、商と余りを得る
    • gmp_div_r - 除算の余りを計算する
    • gmp_export - バイナリ文字列にエクスポートする
    • gmp_fact - 階乗
    • gmp_gcd - 最大公約数を計算する
    • gmp_gcdext - 最大公約数と乗数を計算する
    • gmp_hamdist - ハミング距離
    • gmp_import - バイナリ文字列からインポートする
    • gmp_init - GMP 数を作成する
    • gmp_intval - GMP 数を整数に変換する
    • gmp_invert - 法による逆
    • gmp_jacobi - ヤコビ記号
    • gmp_kronecker - クロネッカーの記号を計算する
    • gmp_lcm - 最小公倍数を計算する
    • gmp_legendre - ルジェンドル記号
    • gmp_mod - モジュロ演算
    • gmp_mul - 数値を乗算する
    • gmp_neg - 符号を反転する
    • gmp_nextprime - 次の素数を見つける
    • gmp_or - ビット OR を計算する
    • gmp_perfect_power - 累乗数かどうかを調べる
    • gmp_perfect_square - 平方数かどうかを調べる
    • gmp_popcount - セットされているビットの数
    • gmp_pow - べき乗を計算する
    • gmp_powm - べき乗とモジュロを計算する
    • gmp_prob_prime - 数が"おそらく素数"であるかどうかを調べる
    • gmp_random - 乱数を生成する
    • gmp_random_bits - 乱数を生成する
    • gmp_random_range - 等確率に選ばれた整数を取得する
    • gmp_random_seed - 乱数シードを設定する
    • gmp_root - n乗根の整数部を返す
    • gmp_rootrem - n乗根の整数部分と小数部分を返す
    • gmp_scan0 - 0 を探す
    • gmp_scan1 - 1 を探す
    • gmp_setbit - ビットを設定する
    • gmp_sign - 数の符号
    • gmp_sqrt - 平方根を計算する
    • gmp_sqrtrem - 余りつきの平方根
    • gmp_strval - GMP 数を文字列に変換する
    • gmp_sub - 数値の減算
    • gmp_testbit - ビットが設定されているかどうかを調べる
    • gmp_xor - ビット XOR を計算する
    • gmstrftime - ロケールの設定に基づいて GMT/UTC 時刻/日付をフォーマットする
    • gnupg_adddecryptkey - 復号のためのキーを追加する
    • gnupg_addencryptkey - 暗号化のためのキーを追加する
    • gnupg_addsignkey - 署名のためのキーを追加する
    • gnupg_cleardecryptkeys - 事前に復号のために設定されたすべてのキーを削除する
    • gnupg_clearencryptkeys - 事前に暗号化のために設定されたすべてのキーを削除する
    • gnupg_clearsignkeys - 事前に署名のために設定されたすべてのキーを削除する
    • gnupg_decrypt - 指定されたテキストを復号する
    • gnupg_decryptverify - 指定されたテキストを復号し、検証する
    • gnupg_deletekey - キーを削除する
    • gnupg_encrypt - 指定したテキストを暗号化する
    • gnupg_encryptsign - 指定したテキストを暗号化し、署名する
    • gnupg_export - キーをエクスポートする
    • gnupg_getengineinfo - 暗号化エンジンの情報を返す
    • gnupg_geterror - 関数が失敗した場合にエラー文字列を返す
    • gnupg_geterrorinfo - エラー情報を返す
    • gnupg_getprotocol - すべての操作で現在アクティブなプロトコルを返す
    • gnupg_gettrustlist - 信頼済みのアイテムを検索する
    • gnupg_import - キーをインポートする
    • gnupg_init - 接続を初期化する
    • gnupg_keyinfo - 指定したパターンに一致するすべてのキーについての情報を配列で返す
    • gnupg_listsignatures - キーの署名の一覧を返す
    • gnupg_setarmor - armor 形式を切り替える
    • gnupg_seterrormode - エラー報告モードを設定する
    • gnupg_setsignmode - 署名方式を設定する
    • gnupg_sign - 指定したテキストに署名する
    • gnupg_verify - 署名済みテキストを検証する
    • grapheme_extract - デフォルトの書記素クラスタシーケンスをテキストバッファから取り出す関数。 テキストは UTF-8 でエンコードされている必要があります
    • grapheme_stripos - 大文字小文字を区別せず、文字列内で最初にあらわれる場所の (書記素単位の) 位置を見つける
    • grapheme_stristr - 大文字小文字を区別せず、haystack 文字列の中で needle が最初に登場した場所以降の部分文字列を返す
    • grapheme_strlen - 書記素単位で文字列の長さを取得する
    • grapheme_strpos - 文字列内で最初にあらわれる場所の (書記素単位の) 位置を見つける
    • grapheme_strripos - 大文字小文字を区別せず、文字列内で最後にあらわれる場所の (書記素単位の) 位置を見つける
    • grapheme_strrpos - 文字列内で最後にあらわれる場所の (書記素単位の) 位置を見つける
    • grapheme_strstr - haystack 文字列の中で、needle が最初に登場した場所以降の部分文字列を返す
    • grapheme_substr - 部分文字列を返す
    • gregoriantojd - グレゴリウス日をユリウス積算日に変換する
    • gzclose - 開かれたgzファイルへのポインタを閉じる
    • gzcompress - 文字列を圧縮する
    • gzdecode - gzip 圧縮された文字列をデコードする
    • gzdeflate - 文字列を deflate 圧縮する
    • gzencode - gzip 圧縮された文字列を作成する
    • gzeof - gz ファイルポインタが EOF かどうか調べる
    • gzfile - gzファイル全体を配列に読み込む
    • gzgetc - gz ファイルへのポインタから文字を得る
    • gzgets - ファイルポインタから 1 行を得る
    • gzgetss - gzファイルへのポインタから1行を得て、HTMLタグを取り除く
    • gzinflate - deflate圧縮された文字列を解凍する
    • gzopen - gz ファイルを開く
    • gzpassthru - gzファイルへのポインタから残りのデータ全部を出力する
    • gzputs - gzwrite のエイリアス
    • gzread - バイナリ対応のgzファイル読み込み
    • gzrewind - gz ファイルポインタの示す位置を元に戻す
    • gzseek - gz ファイルポインタの位置を移動する
    • gztell - gz ファイルポインタの読み込み/書き込み位置を返します
    • gzuncompress - 圧縮された文字列を解凍する
    • gzwrite - バイナリセーフな gz ファイル書き込み
  • h
    • hash - ハッシュ値 (メッセージダイジェスト) を生成する
    • HashContext::__construct - private なコンストラクタのため、直接インスタンス化できません
    • HashContext::__serialize - HashContext オブジェクトをシリアライズする
    • HashContext::__unserialize - data を HashContext オブジェクト に復元する
    • hash_algos - 登録されているハッシュアルゴリズムの一覧を返す
    • hash_copy - ハッシュコンテキストをコピーする
    • hash_equals - タイミング攻撃に対しても安全な文字列比較
    • hash_file - ファイルの内容から、ハッシュ値を生成する
    • hash_final - 段階的なハッシュ処理を終了し、出来上がったダイジェストを返す
    • hash_hkdf - 与えられたキーから導出されるHKDFキーを生成する
    • hash_hmac - HMAC 方式を使用してハッシュ値を生成する
    • hash_hmac_algos - hash_hmac に合うハッシュアルゴリズムの一覧を返す
    • hash_hmac_file - HMAC 方式を使用して、指定されたファイルの内容からハッシュ値を生成する
    • hash_init - 段階的なハッシュコンテキストを初期化する
    • hash_pbkdf2 - PBKDF2 を使ってパスワードからキーを生成する
    • hash_update - アクティブなハッシュコンテキストにデータを投入する
    • hash_update_file - アクティブなハッシュコンテキストに、ファイルからデータを投入する
    • hash_update_stream - アクティブなハッシュコンテキストに、オープンしているストリームから データを投入する
    • header - 生の HTTP ヘッダを送信する
    • headers_list - 送信した (もしくは送信される予定の) レスポンスヘッダの一覧を返す
    • headers_sent - ヘッダが既に送信されているかどうかを調べる
    • header_register_callback - ヘッダ用の関数を登録する
    • header_remove - 以前に設定したHTTPヘッダを削除する
    • hebrev - 論理表記のヘブライ語を物理表記に変換する
    • hebrevc - 論理表記のヘブライ語を、改行の変換も含めて物理表記に変換する
    • hex2bin - 16進エンコードされたバイナリ文字列をデコードする
    • hexdec - 16 進数を 10 進数に変換する
    • highlight_file - ファイルの構文ハイライト表示
    • highlight_string - 文字列の構文ハイライト表示
    • hrtime - システムの高精度な時刻を取得する
    • HRTime\PerformanceCounter::getFrequency - Timer frequency in ticks per second
    • HRTime\PerformanceCounter::getTicks - Current ticks from the system
    • HRTime\PerformanceCounter::getTicksSince - Ticks elapsed since the given value
    • HRTime\StopWatch::getElapsedTicks - Get elapsed ticks for all intervals
    • HRTime\StopWatch::getElapsedTime - Get elapsed time for all intervals
    • HRTime\StopWatch::getLastElapsedTicks - Get elapsed ticks for the last interval
    • HRTime\StopWatch::getLastElapsedTime - Get elapsed time for the last interval
    • HRTime\StopWatch::isRunning - Whether the measurement is running
    • HRTime\StopWatch::start - Start time measurement
    • HRTime\StopWatch::stop - Stop time measurement
    • htmlentities - 適用可能な文字を全て HTML エンティティに変換する
    • htmlspecialchars - 特殊文字を HTML エンティティに変換する
    • htmlspecialchars_decode - 特殊な HTML エンティティを文字に戻す
    • html_entity_decode - HTML エンティティを対応する文字に変換する
    • http_build_query - URL エンコードされたクエリ文字列を生成する
    • http_response_code - HTTP レスポンスコードを取得または設定
    • hypot - 直角三角形の斜辺の長さを計算する
  • i
    • ibase_add_user - Add a user to a security database
    • ibase_affected_rows - 直近のクエリで変更された行の数を返す
    • ibase_backup - Initiates a backup task in the service manager and returns immediately
    • ibase_blob_add - 生成された blob にデータを追加する
    • ibase_blob_cancel - blob の生成を取り消す
    • ibase_blob_close - blob を閉じる
    • ibase_blob_create - データを追加するために blob を生成する
    • ibase_blob_echo - ブラウザに blob の内容を出力する
    • ibase_blob_get - オープンした blob から len バイト分のデータを取得する
    • ibase_blob_import - blob を生成し、ファイルをコピーし、閉じる
    • ibase_blob_info - blob の長さと他の便利な情報を返す
    • ibase_blob_open - データの一部を取得するために blob をオープンする
    • ibase_close - InterBase データベースへの接続を閉じる
    • ibase_commit - トランザクションをコミットする
    • ibase_commit_ret - トランザクションを閉じずにコミットする
    • ibase_connect - データベースへの接続をオープンする
    • ibase_db_info - データベースについての統計情報を要求する
    • ibase_delete_user - Delete a user from a security database
    • ibase_drop_db - データベースを削除する
    • ibase_errcode - エラーコードを返す
    • ibase_errmsg - エラーメッセージを返す
    • ibase_execute - 準備されたクエリを実行する
    • ibase_fetch_assoc - クエリの結果から、行を連想配列として取得する
    • ibase_fetch_object - InterBase データベースからオブジェクトを得る
    • ibase_fetch_row - InterBase データベースから 1 行分の結果を取得する
    • ibase_field_info - フィールドに関する情報を得る
    • ibase_free_event_handler - 登録済みのイベントハンドラをキャンセルする
    • ibase_free_query - プリペアドクエリにより確保されたメモリを解放する
    • ibase_free_result - 結果セットを解放する
    • ibase_gen_id - 指定した名前のジェネレータをひとつ加算し、その新しい値を返す
    • ibase_maintain_db - データベースサーバーでメンテナンスコマンドを実行する
    • ibase_modify_user - Modify a user to a security database
    • ibase_name_result - 結果セットに名前を割り当てる
    • ibase_num_fields - 結果セットにおけるフィールド数を得る
    • ibase_num_params - プリペアドクエリのパラメータ数を返す
    • ibase_param_info - プリペアドクエリのパラメータに関する情報を返す
    • ibase_pconnect - InterBase データベースへの持続的接続をオープンする
    • ibase_prepare - Prepare a query for later binding of parameter placeholders and execution
    • ibase_query - InterBase データベースでクエリを実行する
    • ibase_restore - Initiates a restore task in the service manager and returns immediately
    • ibase_rollback - トランザクションをロールバックする
    • ibase_rollback_ret - トランザクションを閉じずにロールバックする
    • ibase_server_info - データベースサーバーについての情報を要求する
    • ibase_service_attach - サービスマネージャに接続する
    • ibase_service_detach - サービスマネージャとの接続を切断する
    • ibase_set_event_handler - イベントが発生した際にコールされるコールバック関数を登録する
    • ibase_trans - トランザクションを開始する
    • ibase_wait_event - データベースでイベントが発生するのを待つ
    • iconv - ある文字エンコーディングの文字列を、別の文字エンコーディングに変換する
    • iconv_get_encoding - iconv 拡張モジュールの内部設定変数を取得する
    • iconv_mime_decode - MIME ヘッダフィールドをデコードする
    • iconv_mime_decode_headers - 複数の MIME ヘッダフィールドを一度にデコードする
    • iconv_mime_encode - MIME ヘッダフィールドを作成する
    • iconv_set_encoding - 文字エンコーディング変換用の設定を行なう
    • iconv_strlen - 文字列の文字数を返す
    • iconv_strpos - 文字列が最初に現れる場所を見つける
    • iconv_strrpos - 文字列が最後に現れる場所を見つける
    • iconv_substr - 文字列の一部を切り出す
    • idate - ローカルな時刻/日付の一部を整数として整形する
    • idn_to_ascii - ドメイン名をIDNAのASCII形式に変換する
    • idn_to_utf8 - IDNAのASCII方式でエンコードされたドメイン名をUnicodeに変換する
    • igbinary_serialize - コンパクト、かつ保存可能な値のバイナリ表現を生成する
    • igbinary_unserialize - igbinary_serialize によって保存されたバイナリ表現から、PHP の値を復元する
    • ignore_user_abort - クライアントの接続が切断された際にスクリプトの実行を終了するかどうかを設定する
    • image2wbmp - 画像をブラウザあるいはファイルに出力する
    • imageaffine - 元の画像を、オプションのクリッピング領域を使ってアフィン変換した画像を返す
    • imageaffinematrixconcat - 二つのアフィン変換行列を連結する
    • imageaffinematrixget - アフィン変換行列を取得する
    • imagealphablending - イメージのブレンドモードを設定する
    • imageantialias - アンチエイリアス機能を使用すべきかどうかを判断する
    • imagearc - 部分楕円を描画する
    • imageavif - 画像をブラウザあるいはファイルに出力する
    • imagebmp - ビットマップ画像をブラウザかファイルに出力する
    • imagechar - 水平に文字を描画する
    • imagecharup - 垂直に文字を描画する
    • imagecolorallocate - 画像で使用する色を作成する
    • imagecolorallocatealpha - 画像で使用する色を透過度を指定して作成する
    • imagecolorat - ピクセルの色のインデックスを取得する
    • imagecolorclosest - 指定した色に最も近い色のインデックスを取得する
    • imagecolorclosestalpha - 指定した色+アルファ値に最も近い色のインデックスを取得する
    • imagecolorclosesthwb - 色合い、白、黒を有する色のインデックスを得る
    • imagecolordeallocate - イメージの色リソースを開放する
    • imagecolorexact - 指定した色のインデックスを取得する
    • imagecolorexactalpha - 指定した色+アルファ値のインデックスを取得する
    • imagecolormatch - パレットイメージの色を True カラーイメージに近づける
    • imagecolorresolve - 指定した色または出来るだけ近い色のインデックスを得る
    • imagecolorresolvealpha - 指定した色+アルファ値または最も近い色のインデックスを取得する
    • imagecolorset - 指定したパレットインデックスの色を設定する
    • imagecolorsforindex - カラーインデックスからカラーを取得する
    • imagecolorstotal - 画像パレットの色数を検出する
    • imagecolortransparent - 透明色を定義する
    • imageconvolution - div および offset の係数を使用し、3x3 の畳み込み配列を適用する
    • imagecopy - 画像の一部をコピーする
    • imagecopymerge - イメージの一部をコピー、マージする
    • imagecopymergegray - グレースケールでイメージの一部をコピー、マージする
    • imagecopyresampled - 再サンプリングを行いイメージの一部をコピー、伸縮する
    • imagecopyresized - 画像の一部をコピーしサイズを変更する
    • imagecreate - パレットを使用する新規画像を作成する
    • imagecreatefromavif - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefrombmp - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefromgd - GD ファイルまたは URL から新規イメージを生成する
    • imagecreatefromgd2 - GD2 ファイルまたは URL から新規イメージを生成する
    • imagecreatefromgd2part - GD2 ファイルまたは URL の指定した部分から新規イメージを生成する
    • imagecreatefromgif - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefromjpeg - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefrompng - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefromstring - 文字列の中のイメージストリームから新規イメージを作成する
    • imagecreatefromtga - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefromwbmp - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefromwebp - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefromxbm - 新しい画像をファイルあるいは URL から作成する
    • imagecreatefromxpm - 新しい画像をファイルあるいは URL から作成する
    • imagecreatetruecolor - TrueColor イメージを新規に作成する
    • imagecrop - 指定した矩形に画像をクロップする
    • imagecropauto - 利用可能なモードを指定して、画像を自動的にクロップする
    • imagedashedline - 破線を描画する
    • imagedestroy - 画像を破棄する
    • imageellipse - 楕円を描画する
    • imagefill - 塗り潰す
    • imagefilledarc - 楕円弧を描画し、塗りつぶす
    • imagefilledellipse - 塗りつぶされた楕円を描画する
    • imagefilledpolygon - 塗りつぶした多角形を描画する
    • imagefilledrectangle - 塗りつぶした矩形を描画する
    • imagefilltoborder - 特定色で塗りつぶす
    • imagefilter - 画像にフィルタを適用する
    • imageflip - 指定したモードで画像を反転させる
    • imagefontheight - フォントの高さを取得する
    • imagefontwidth - フォントの幅を取得する
    • imageftbbox - freetype2 によるフォントを用いたテキストを囲む箱を取得する
    • imagefttext - FreeType 2 によるフォントを用いてイメージにテキストを描画する
    • imagegammacorrect - GD イメージにガンマ補正を適用する
    • imagegd - GD イメージをブラウザまたはファイルに出力する
    • imagegd2 - GD2 イメージをブラウザまたはファイルに出力する
    • imagegetclip - 長方形を切り取り、画像として取得する
    • imagegetinterpolation - 補間方法を取得する
    • imagegif - 画像をブラウザあるいはファイルに出力する
    • imagegrabscreen - 画面全体をキャプチャする
    • imagegrabwindow - ウィンドウをキャプチャする
    • imageinterlace - インターレースを有効もしくは無効にする
    • imageistruecolor - 画像が truecolor かどうか調べる
    • imagejpeg - 画像をブラウザあるいはファイルに出力する
    • imagelayereffect - アルファブレンディングフラグを設定し、レイヤ効果を使用する
    • imageline - 直線を描画する
    • imageloadfont - 新しいフォントを読み込む
    • imageopenpolygon - オープンポリゴンを描画する
    • imagepalettecopy - あるイメージから他のイメージにパレットをコピーする
    • imagepalettetotruecolor - パレット形式の画像を true color に変換する
    • imagepng - PNG イメージをブラウザまたはファイルに出力する
    • imagepolygon - 多角形を描画する
    • imagerectangle - 矩形を描画する
    • imageresolution - 画像の解像度を取得/設定する
    • imagerotate - 指定された角度で画像を回転する
    • imagesavealpha - 画像を保存する際に、完全なアルファチャネル情報を保存するかどうかを指定する
    • imagescale - 幅と高さを指定して、画像の縮尺を変更する
    • imagesetbrush - 線の描画用にブラシイメージを設定する
    • imagesetclip - 切り取る長方形を設定する
    • imagesetinterpolation - 補間方法を設定する
    • imagesetpixel - 点を生成する
    • imagesetstyle - 線描画用のスタイルを設定する
    • imagesetthickness - 線描画用の線幅を設定する
    • imagesettile - 塗りつぶし用のイメージを設定する
    • imagestring - 文字列を水平に描画する
    • imagestringup - 文字列を垂直に描画する
    • imagesx - 画像の幅を取得する
    • imagesy - 画像の高さを取得する
    • imagetruecolortopalette - TrueColor イメージをパレットイメージに変換する
    • imagettfbbox - TypeType フォントを使用したテキストの bounding box を生成する
    • imagettftext - TrueType フォントを使用してテキストを画像に書き込む
    • imagetypes - この PHP がサポートしている画像形式を返す
    • imagewbmp - 画像をブラウザあるいはファイルに出力する
    • imagewebp - WebP 画像をブラウザあるいはファイルに出力する
    • imagexbm - XBM 画像をブラウザあるいはファイルに出力する
    • image_type_to_extension - 画像形式からファイルの拡張子を取得する
    • image_type_to_mime_type - getimagesize, exif_read_data, exif_thumbnail, exif_imagetypeから返される 画像形式のMIMEタイプを取得する
    • Imagick::adaptiveBlurImage - adaptive blur (順応性にじみ) フィルタを画像に追加する
    • Imagick::adaptiveResizeImage - データに依存する三角測量にもとづいて画像のサイズを変更する
    • Imagick::adaptiveSharpenImage - 順応して画像をシャープにする
    • Imagick::adaptiveThresholdImage - 輝度の範囲にもとづいて各ピクセルの閾値を選択する
    • Imagick::addImage - 新しい画像を Imagick オブジェクトの画像リストに追加する
    • Imagick::addNoiseImage - ランダムなノイズを画像に追加する
    • Imagick::affineTransformImage - 画像を変換する
    • Imagick::animateImages - 画像を動かす
    • Imagick::annotateImage - 画像にテキストによる注記を加える
    • Imagick::appendImages - 画像群を追加する
    • Imagick::autoLevelImage - Adjusts the levels of a particular image channel
    • Imagick::averageImages - 画像群を平均化する
    • Imagick::blackThresholdImage - 閾値に満たないすべてのピクセルを黒にする
    • Imagick::blueShiftImage - Mutes the colors of the image
    • Imagick::blurImage - blur (にじみ) フィルタを画像に追加する
    • Imagick::borderImage - 画像の周りを枠線で囲む
    • Imagick::brightnessContrastImage - Change the brightness and/or contrast of an image
    • Imagick::charcoalImage - 木炭画をシミュレートする
    • Imagick::chopImage - 画像の一部を取り除き、切り詰める
    • Imagick::clampImage - Restricts the color range from 0 to the quantum depth.
    • Imagick::clear - Imagick オブジェクトに関連付けられたすべてのリソースをクリアする
    • Imagick::clipImage - 8BIM プロファイルの最初のパスにそって切り取る
    • Imagick::clipImagePath - Clips along the named paths from the 8BIM profile, if present
    • Imagick::clipPathImage - 8BIM プロファイルの指定した名前のパスにそって切り取る
    • Imagick::clone - Imagick オブジェクトの完全なコピーを作成する
    • Imagick::clutImage - 画像の色を置き換える
    • Imagick::coalesceImages - 複数の画像を合成する
    • Imagick::colorFloodfillImage - 対象にマッチする任意の点の色の値を変更する
    • Imagick::colorizeImage - 塗りつぶし色と画像を混合する
    • Imagick::colorMatrixImage - Apply color transformation to an image
    • Imagick::combineImages - ひとつあるいは複数の画像をひとつにまとめる
    • Imagick::commentImage - コメントを画像に追加する
    • Imagick::compareImageChannels - ひとつあるいは複数の画像の差を返す
    • Imagick::compareImageLayers - 複数の画像の中で最大の境界範囲を返す
    • Imagick::compareImages - ある画像を再構築された画像と比較する
    • Imagick::compositeImage - ある画像を別の画像に合成する
    • Imagick::contrastImage - 画像のコントラストを変更する
    • Imagick::contrastStretchImage - カラー画像のコントラストを強調する
    • Imagick::convolveImage - 独自の畳み込み関数を画像に適用する
    • Imagick::count - Get the number of images
    • Imagick::cropImage - 画像の一部を抽出する
    • Imagick::cropThumbnailImage - 切り取ってサムネイルを作成する
    • Imagick::current - 現在の Imagick オブジェクトへの参照を返す
    • Imagick::cycleColormapImage - 画像のカラーマップを移動する
    • Imagick::decipherImage - 画像を復号する
    • Imagick::deconstructImages - 画像間の特定のピクセルの差を返す
    • Imagick::deleteImageArtifact - 画像のアーチファクトを削除する
    • Imagick::deleteImageProperty - Deletes an image property
    • Imagick::deskewImage - 傾きを除去する
    • Imagick::despeckleImage - 画像内のスペックルノイズを軽減する
    • Imagick::destroy - Imagick オブジェクトを破棄する
    • Imagick::displayImage - 画像を表示する
    • Imagick::displayImages - 画像あるいは画像シーケンスを表示する
    • Imagick::distortImage - さまざまな方式で画像を歪める
    • Imagick::drawImage - 現在の画像上の ImagickDraw オブジェクトをレンダリングする
    • Imagick::edgeImage - 画像の輪郭を強調する
    • Imagick::embossImage - グレースケール画像に三次元効果を施して返す
    • Imagick::encipherImage - 画像を暗号化する
    • Imagick::enhanceImage - ノイジーな画像の品質を向上させる
    • Imagick::equalizeImage - 画像ヒストグラムを均等化する
    • Imagick::evaluateImage - 式を画像に適用する
    • Imagick::exportImagePixels - 画像の生のピクセルをエクスポートする
    • Imagick::extentImage - 画像のサイズを設定する
    • Imagick::filter - Applies a custom convolution kernel to the image
    • Imagick::flattenImages - 画像シーケンスをマージする
    • Imagick::flipImage - 垂直方向に反転した画像を作成する
    • Imagick::floodFillPaintImage - 対象にマッチする任意のピクセルの値を変更する
    • Imagick::flopImage - 水平方向に反転した画像を作成する
    • Imagick::forwardFourierTransformImage - Implements the discrete Fourier transform (DFT)
    • Imagick::frameImage - 三次元の枠線をシミュレートする
    • Imagick::functionImage - 画像に関数を適用する
    • Imagick::fxImage - 式を画像の各ピクセルに適用する
    • Imagick::gammaImage - 画像をガンマ補正する
    • Imagick::gaussianBlurImage - 画像をぼかす
    • Imagick::getColorspace - 色空間を取得する
    • Imagick::getCompression - オブジェクトの圧縮形式を取得する
    • Imagick::getCompressionQuality - オブジェクトの圧縮品質を取得する
    • Imagick::getCopyright - ImageMagick API の著作権情報を文字列で返す
    • Imagick::getFilename - 画像シーケンスに関連付けられたファイル名を取得する
    • Imagick::getFont - フォントを取得する
    • Imagick::getFormat - Imagick オブジェクトのフォーマットを取得する
    • Imagick::getGravity - gravity を取得する
    • Imagick::getHomeURL - ImageMagick のホーム URL を返す
    • Imagick::getImage - 新しい Imagick オブジェクトを返す
    • Imagick::getImageAlphaChannel - 画像がアルファチャネルを持つかを調べる
    • Imagick::getImageArtifact - 画像のアーチファクトを取得する
    • Imagick::getImageAttribute - Returns a named attribute
    • Imagick::getImageBackgroundColor - 画像の背景色を返す
    • Imagick::getImageBlob - 画像シーケンスを blob で返す
    • Imagick::getImageBluePrimary - 青が一番強い点を返す
    • Imagick::getImageBorderColor - 画像の前景色を返す
    • Imagick::getImageChannelDepth - 特定の画像チャネルの深度を返す
    • Imagick::getImageChannelDistortion - 画像のチャネルを再構築した画像と比較する
    • Imagick::getImageChannelDistortions - チャネルの歪みを取得する
    • Imagick::getImageChannelExtrema - ひとつあるいは複数の画像チャネルの極値を取得する
    • Imagick::getImageChannelKurtosis - getImageChannelKurtosis
    • Imagick::getImageChannelMean - 平均値と標準偏差を取得する
    • Imagick::getImageChannelRange - チャネルの範囲を取得する
    • Imagick::getImageChannelStatistics - 画像の各チャネルの統計情報を返す
    • Imagick::getImageClipMask - 画像のクリップマスクを取得する
    • Imagick::getImageColormapColor - 指定したインデックスに対応する色マップ上の色を返す
    • Imagick::getImageColors - 画像で使われている色の数を取得する
    • Imagick::getImageColorspace - 画像の色空間を取得する
    • Imagick::getImageCompose - 画像の合成演算子を返す
    • Imagick::getImageCompression - 現在の画像の圧縮形式を取得する
    • Imagick::getImageCompressionQuality - 現在の画像の圧縮品質を取得する
    • Imagick::getImageDelay - 画像の遅延を取得する
    • Imagick::getImageDepth - 画像の深度を取得する
    • Imagick::getImageDispose - 画像の配置方法を取得する
    • Imagick::getImageDistortion - ある画像と再構築した画像を比較する
    • Imagick::getImageExtrema - 画像の極値を取得する
    • Imagick::getImageFilename - シーケンス内の特定の画像のファイル名を返す
    • Imagick::getImageFormat - シーケンス内の特定の画像のフォーマットを返す
    • Imagick::getImageGamma - 画像のガンマを取得する
    • Imagick::getImageGeometry - 幅と高さを連想配列で取得する
    • Imagick::getImageGravity - 画像の gravity を取得する
    • Imagick::getImageGreenPrimary - 緑が一番強い点を返す
    • Imagick::getImageHeight - 画像の高さを返す
    • Imagick::getImageHistogram - 画像のヒストグラムを取得する
    • Imagick::getImageIndex - 現在アクティブな画像のインデックスを取得する
    • Imagick::getImageInterlaceScheme - 画像のインターレース手法を取得する
    • Imagick::getImageInterpolateMethod - 画像の補間方式を返す
    • Imagick::getImageIterations - 画像の反復を取得する
    • Imagick::getImageLength - 画像の長さをバイト数で取得する
    • Imagick::getImageMatte - 画像がマットチャネルを持っているかどうかを返す
    • Imagick::getImageMatteColor - 画像のマット色を返す
    • Imagick::getImageMimeType - Returns the image mime-type
    • Imagick::getImageOrientation - 画像の方向を取得する
    • Imagick::getImagePage - ページのジオメトリを返す
    • Imagick::getImagePixelColor - 指定したピクセルの色を返す
    • Imagick::getImageProfile - 指定した名前の画像プロファイルを返す
    • Imagick::getImageProfiles - 画像プロファイルを返す
    • Imagick::getImageProperties - 画像のプロパティを返す
    • Imagick::getImageProperty - 指定した名前の画像のプロパティを返す
    • Imagick::getImageRedPrimary - 赤が一番強い点を返す
    • Imagick::getImageRegion - 画像の一部を抽出する
    • Imagick::getImageRenderingIntent - 画像のレンダリング方向を取得する
    • Imagick::getImageResolution - 画像の X 方向と Y 方向の解像度を取得する
    • Imagick::getImagesBlob - すべての画像シーケンスを blob で返す
    • Imagick::getImageScene - 画像のシーンを取得する
    • Imagick::getImageSignature - SHA-256 メッセージダイジェストを生成する
    • Imagick::getImageSize - 画像の長さをバイト数で返す
    • Imagick::getImageTicksPerSecond - 画像の ticks-per-second を取得する
    • Imagick::getImageTotalInkDensity - 画像の総インク密度を取得する
    • Imagick::getImageType - 画像の型を取得する
    • Imagick::getImageUnits - 画像の解像度の単位を取得する
    • Imagick::getImageVirtualPixelMethod - 仮想ピクセルメソッドを取得する
    • Imagick::getImageWhitePoint - 色度が白い点を返す
    • Imagick::getImageWidth - 画像の幅を返す
    • Imagick::getInterlaceScheme - オブジェクトのインターレース方式を取得する
    • Imagick::getIteratorIndex - 現在アクティブな画像のインデックスを取得する
    • Imagick::getNumberImages - オブジェクト内の画像の数を返す
    • Imagick::getOption - 指定したキーに対応する値を返す
    • Imagick::getPackageName - ImageMagick パッケージ名を返す
    • Imagick::getPage - ページのジオメトリを返す
    • Imagick::getPixelIterator - MagickPixelIterator を返す
    • Imagick::getPixelRegionIterator - 画像セクションの ImagickPixelIterator を取得する
    • Imagick::getPointSize - ポイントサイズを取得する
    • Imagick::getQuantum - Returns the ImageMagick quantum range
    • Imagick::getQuantumDepth - quantum depth を取得する
    • Imagick::getQuantumRange - Imagick quantum range を返す
    • Imagick::getRegistry - Get a StringRegistry entry
    • Imagick::getReleaseDate - ImageMagick のリリース日を返す
    • Imagick::getResource - 指定したリソースのメモリ使用状況を返す
    • Imagick::getResourceLimit - 指定したリソースの制限を返す
    • Imagick::getSamplingFactors - 水平方向および垂直方向のサンプリング係数を取得する
    • Imagick::getSize - Returns the size associated with the Imagick object
    • Imagick::getSizeOffset - サイズのオフセットを返す
    • Imagick::getVersion - ImageMagick API のバージョンを返す
    • Imagick::haldClutImage - 画像内の色を置換する
    • Imagick::hasNextImage - オブジェクトが次の画像を保持しているかどうかを調べる
    • Imagick::hasPreviousImage - オブジェクトが前の画像を保持しているかどうかを調べる
    • Imagick::identifyFormat - Formats a string with image details
    • Imagick::identifyImage - 画像を識別し、属性を取得する
    • Imagick::implodeImage - 新しい画像をコピーとして作成する
    • Imagick::importImagePixels - 画像のピクセルをインポートする
    • Imagick::inverseFourierTransformImage - Implements the inverse discrete Fourier transform (DFT)
    • Imagick::labelImage - ラベルを画像に追加する
    • Imagick::levelImage - 画像のレベルを調節する
    • Imagick::linearStretchImage - 画像の輝度を引き伸ばして飽和させる
    • Imagick::liquidRescaleImage - 画像を動かす
    • Imagick::listRegistry - List all the registry settings
    • Imagick::magnifyImage - 画像を 2 倍に比例拡大する
    • Imagick::mapImage - 画像の色を、参照画像の中の最も近い色に置き換える
    • Imagick::matteFloodfillImage - 色の透明度を変更する
    • Imagick::medianFilterImage - デジタルフィルタを適用する
    • Imagick::mergeImageLayers - 画像のレイヤーをマージする
    • Imagick::minifyImage - 画像をその半分のサイズに比例縮小する
    • Imagick::modulateImage - 明度、飽和度、色相を制御する
    • Imagick::montageImage - 合成画像を作成する
    • Imagick::morphImages - 複数の画像をモーフィングする
    • Imagick::morphology - Applies a user supplied kernel to the image according to the given morphology method.
    • Imagick::mosaicImages - 画像からモザイクを作成する
    • Imagick::motionBlurImage - モーションブラーをシミュレートする
    • Imagick::negateImage - 画像の色を打ち消す
    • Imagick::newImage - 新しい画像を作成する
    • Imagick::newPseudoImage - 新しい画像を作成する
    • Imagick::nextImage - 次の画像に移動する
    • Imagick::normalizeImage - カラー画像のコントラストを強調する
    • Imagick::oilPaintImage - 油絵をシミュレートする
    • Imagick::opaquePaintImage - 対象にマッチする任意のピクセルの色を変更する
    • Imagick::optimizeImageLayers - 画像の繰り返し部分を削除して最適化する
    • Imagick::orderedPosterizeImage - 配列ディザリングを行う
    • Imagick::paintFloodfillImage - 色にマッチするピクセルを変更する
    • Imagick::paintOpaqueImage - 色にマッチするピクセルを変更する
    • Imagick::paintTransparentImage - 色にマッチするピクセルを塗りつぶし色に変更する
    • Imagick::pingImage - 画像の基本属性を取得する
    • Imagick::pingImageBlob - 手早く属性を取得する
    • Imagick::pingImageFile - 画像の基本属性を手軽に取得する
    • Imagick::polaroidImage - ポラロイド写真をシミュレートする
    • Imagick::posterizeImage - 指定した色数まで画像を減色する
    • Imagick::previewImages - 画像処理用の適切なパラメータを手早く取得する
    • Imagick::previousImage - オブジェクト内の前の画像に移動する
    • Imagick::profileImage - 画像のプロファイルを追加あるいは削除する
    • Imagick::quantizeImage - 参照画像内の色を解析する
    • Imagick::quantizeImages - 画像シーケンス内の色を解析する
    • Imagick::queryFontMetrics - フォントメトリクスを表す配列を返す
    • Imagick::queryFonts - 設定したフォントを返す
    • Imagick::queryFormats - Imagick がサポートするフォーマットを返す
    • Imagick::radialBlurImage - 画像にラジアルブラーを施す
    • Imagick::raiseImage - 三次元のボタン風の効果をシミュレートする
    • Imagick::randomThresholdImage - コントラストの高い 2 色の画像を作成する
    • Imagick::readImage - ファイルから画像を読み込む
    • Imagick::readImageBlob - バイナリ文字列から画像を読み込む
    • Imagick::readImageFile - オープンしているファイルハンドルから画像を読み込む
    • Imagick::readimages - Reads image from an array of filenames
    • Imagick::recolorImage - 画像の色を変更する
    • Imagick::reduceNoiseImage - 画像の輪郭をなめらかにする
    • Imagick::remapImage - 画像の色を再配置する
    • Imagick::removeImage - 画像リストから画像を削除する
    • Imagick::removeImageProfile - 指定した名前の画像プロファイルを削除してそれを返す
    • Imagick::render - それまでのすべての描画コマンドをレンダリングする
    • Imagick::resampleImage - 画像を指定した解像度にリサンプリングする
    • Imagick::resetImagePage - 画像のページをリセットする
    • Imagick::resizeImage - 画像のサイズを変更する
    • Imagick::rollImage - 画像を補正する
    • Imagick::rotateImage - 画像を回転する
    • Imagick::rotationalBlurImage - Rotational blurs an image
    • Imagick::roundCorners - 画像の角を丸める
    • Imagick::sampleImage - ピクセルのサンプリングによって画像の倍率を変更する
    • Imagick::scaleImage - 画像のサイズを変更する
    • Imagick::segmentImage - 画像を分割する
    • Imagick::selectiveBlurImage - Selectively blur an image within a contrast threshold
    • Imagick::separateImageChannel - 画像からチャネルを分離する
    • Imagick::sepiaToneImage - 画像をセピア調にする
    • Imagick::setBackgroundColor - オブジェクトのデフォルト背景色を設定する
    • Imagick::setColorspace - 色空間を設定する
    • Imagick::setCompression - オブジェクトのデフォルトの圧縮方式を設定する
    • Imagick::setCompressionQuality - オブジェクトのデフォルトの圧縮品質を設定する
    • Imagick::setFilename - 画像を読み書きする前にファイル名を設定する
    • Imagick::setFirstIterator - Imagick イテレータを最初の画像に設定する
    • Imagick::setFont - フォントを設定する
    • Imagick::setFormat - Imagick オブジェクトのフォーマットを設定する
    • Imagick::setGravity - gravity を設定する
    • Imagick::setImage - オブジェクト内の画像を置き換える
    • Imagick::setImageAlphaChannel - 画像のアルファチャネルを設定する
    • Imagick::setImageArtifact - 画像のアーチファクトを設定する
    • Imagick::setImageAttribute - Sets an image attribute
    • Imagick::setImageBackgroundColor - 画像の背景色を設定する
    • Imagick::setImageBias - 画像を折りたたむ任意のメソッドについて画像のバイアスを設定する
    • Imagick::setImageBiasQuantum - Sets the image bias
    • Imagick::setImageBluePrimary - 青が一番強い点を設定する
    • Imagick::setImageBorderColor - 画像の前景色を設定する
    • Imagick::setImageChannelDepth - 特定の画像チャネルの深度を設定する
    • Imagick::setImageClipMask - 画像のクリップマスクを設定する
    • Imagick::setImageColormapColor - 指定した色マップインデックスの色を設定する
    • Imagick::setImageColorspace - 画像の色空間を設定する
    • Imagick::setImageCompose - 画像の合成演算子を設定する
    • Imagick::setImageCompression - 画像の圧縮を設定する
    • Imagick::setImageCompressionQuality - 画像の圧縮品質を設定する
    • Imagick::setImageDelay - 画像の遅延を設定する
    • Imagick::setImageDepth - 画像の深度を設定する
    • Imagick::setImageDispose - 画像の配置方法を設定する
    • Imagick::setImageExtent - 画像のサイズを設定する
    • Imagick::setImageFilename - 特定の画像のファイル名を設定する
    • Imagick::setImageFormat - 特定の画像のフォーマットを設定する
    • Imagick::setImageGamma - 画像のガンマを設定する
    • Imagick::setImageGravity - 画像の gravity を設定する
    • Imagick::setImageGreenPrimary - 緑が一番強い点を設定する
    • Imagick::setImageIndex - イテレータの位置を設定する
    • Imagick::setImageInterlaceScheme - 画像のインターレース手法を設定する
    • Imagick::setImageInterpolateMethod - 画像のピクセル補間方式を設定する
    • Imagick::setImageIterations - 画像の反復を設定する
    • Imagick::setImageMatte - 画像のマットチャネルを設定する
    • Imagick::setImageMatteColor - 画像のマット色を設定する
    • Imagick::setImageOpacity - 画像の不透明度を設定する
    • Imagick::setImageOrientation - 画像の方向を設定する
    • Imagick::setImagePage - 画像のページのジオメトリを設定する
    • Imagick::setImageProfile - 指定した名前の画像プロファイルを Imagick オブジェクトに追加する
    • Imagick::setImageProperty - 画像のプロパティを設定する
    • Imagick::setImageRedPrimary - 赤が一番強い点を設定する
    • Imagick::setImageRenderingIntent - 画像のレンダリング方向を設定する
    • Imagick::setImageResolution - 画像の解像度を設定する
    • Imagick::setImageScene - 画像のシーンを設定する
    • Imagick::setImageTicksPerSecond - 画像の ticks-per-second を設定する
    • Imagick::setImageType - 画像の型を設定する
    • Imagick::setImageUnits - 画像の解像度の単位を設定する
    • Imagick::setImageVirtualPixelMethod - 画像の仮想ピクセルメソッドを設定する
    • Imagick::setImageWhitePoint - 画像の色度が白い点を設定する
    • Imagick::setInterlaceScheme - 画像の圧縮を設定する
    • Imagick::setIteratorIndex - イテレータの位置を設定する
    • Imagick::setLastIterator - Imagick イテレータを最後の画像に設定する
    • Imagick::setOption - オプションを設定する
    • Imagick::setPage - Imagick オブジェクトのページジオメトリを設定する
    • Imagick::setPointSize - ポイントサイズを設定する
    • Imagick::setProgressMonitor - Set a callback to be called during processing
    • Imagick::setRegistry - Sets the ImageMagick registry entry named key to value
    • Imagick::setResolution - 画像の解像度を設定する
    • Imagick::setResourceLimit - 特定のリソースの制限を設定する
    • Imagick::setSamplingFactors - 画像のサンプリング係数を設定する
    • Imagick::setSize - Imagick オブジェクトのサイズを設定する
    • Imagick::setSizeOffset - Imagick オブジェクトのサイズのオフセットを設定する
    • Imagick::setType - 画像タイプ属性を設定する
    • Imagick::shadeImage - 3D 効果を作成する
    • Imagick::shadowImage - 画像の影をシミュレートする
    • Imagick::sharpenImage - 画像をシャープにする
    • Imagick::shaveImage - 画像の輪郭からピクセルを刈り取る
    • Imagick::shearImage - 平行四辺形を作成する
    • Imagick::sigmoidalContrastImage - 画像のコントラストを調整する
    • Imagick::sketchImage - 鉛筆画をシミュレートする
    • Imagick::smushImages - Takes all images from the current image pointer to the end of the image list and smushs them
    • Imagick::solarizeImage - 画像にソラリゼーション効果を適用する
    • Imagick::sparseColorImage - 色を補間する
    • Imagick::spliceImage - 無地の画像を作成する
    • Imagick::spreadImage - ブロック内の各ピクセルをランダムに移動する
    • Imagick::statisticImage - Modifies image using a statistics function
    • Imagick::steganoImage - デジタル透かしを画像に埋め込む
    • Imagick::stereoImage - ふたつの画像を合成する
    • Imagick::stripImage - 画像からすべてのプロパティやコメントを除去する
    • Imagick::subImageMatch - Searches for a subimage in the current image and returns a similarity image
    • Imagick::swirlImage - 画像の中心から、ピクセルを渦巻状にする
    • Imagick::textureImage - テクスチャ画像をタイル状に並べる
    • Imagick::thresholdImage - 閾値にもとづいて個々のピクセルの値を変更する
    • Imagick::thumbnailImage - 画像のサイズを変更する
    • Imagick::tintImage - 色ベクトルを画像の各ピクセルに適用する
    • Imagick::transformImage - 切り取るサイズと画像のジオメトリを設定する便利なメソッド
    • Imagick::transformImageColorspace - Transforms an image to a new colorspace
    • Imagick::transparentPaintImage - ピクセルを透過させる
    • Imagick::transposeImage - 垂直方向に反転させた画像を作成する
    • Imagick::transverseImage - 水平方向に反転させた画像を作成する
    • Imagick::trimImage - 画像の輪郭を削除する
    • Imagick::uniqueImageColors - ある 1 色以外のすべての色のピクセルを削除する
    • Imagick::unsharpMaskImage - 画像をシャープにする
    • Imagick::valid - 現在のアイテムが有効かどうかを調べる
    • Imagick::vignetteImage - ビネットフィルタを画像に追加する
    • Imagick::waveImage - ウェーブフィルタを画像に適用する
    • Imagick::whiteThresholdImage - 閾値に満たないすべてのピクセルを白にする
    • Imagick::writeImage - 指定した名前で画像を書き込む
    • Imagick::writeImageFile - 画像をファイルハンドルに書き出す
    • Imagick::writeImages - 画像あるいは画像シーケンスを書き込む
    • Imagick::writeImagesFile - フレームをファイルハンドルに書き出す
    • Imagick::__construct - Imagick のコンストラクタ
    • Imagick::__toString - Returns the image as a string
    • ImagickDraw::affine - 現在のアフィン変換行列を設定する
    • ImagickDraw::annotation - 画像上にテキストを描画する
    • ImagickDraw::arc - 円弧を描画する
    • ImagickDraw::bezier - ベジエ曲線を描画する
    • ImagickDraw::circle - 円を描画する
    • ImagickDraw::clear - ImagickDraw をクリアする
    • ImagickDraw::clone - 指定した ImagickDraw オブジェクトの完全なコピーを作成する
    • ImagickDraw::color - 画像上に色を描画する
    • ImagickDraw::comment - コメントを追加する
    • ImagickDraw::composite - 現在の画像上に別の画像を合成する
    • ImagickDraw::destroy - 関連付けられたすべてのリソースを開放する
    • ImagickDraw::ellipse - 画像上に楕円を描画する
    • ImagickDraw::getClipPath - 現在のクリッピングパスの ID を取得する
    • ImagickDraw::getClipRule - 現在の多角形塗りつぶしルールを返す
    • ImagickDraw::getClipUnits - クリップパスの単位の解釈を返す
    • ImagickDraw::getFillColor - 塗りつぶし色を返す
    • ImagickDraw::getFillOpacity - 描画時の透過度を返す
    • ImagickDraw::getFillRule - 塗りつぶしルールを返す
    • ImagickDraw::getFont - フォントを返す
    • ImagickDraw::getFontFamily - フォントファミリーを返す
    • ImagickDraw::getFontSize - フォントのポイント数を返す
    • ImagickDraw::getFontStretch - Gets the font stretch to use when annotating with text
    • ImagickDraw::getFontStyle - フォントのスタイルを返す
    • ImagickDraw::getFontWeight - フォントの重さを返す
    • ImagickDraw::getGravity - テキストの配置時の gravity を返す
    • ImagickDraw::getStrokeAntialias - 現在の縁取りのアンチエイリアス設定を返す
    • ImagickDraw::getStrokeColor - オブジェクトの縁取りに使用する色を返す
    • ImagickDraw::getStrokeDashArray - パスの描画に使用する破線のパターンを表す配列を返す
    • ImagickDraw::getStrokeDashOffset - 破線パターンにおける破線の開始オフセットを返す
    • ImagickDraw::getStrokeLineCap - 開かれたサブパスを描画する際に使用する端点の形状を返す
    • ImagickDraw::getStrokeLineJoin - パスの角を描画する際に使用する形状を返す
    • ImagickDraw::getStrokeMiterLimit - マイターリミットを返す
    • ImagickDraw::getStrokeOpacity - オブジェクトの枠線の透明度を返す
    • ImagickDraw::getStrokeWidth - オブジェクトの枠線の描画に使用する線の幅を返す
    • ImagickDraw::getTextAlignment - テキストの配置を返す
    • ImagickDraw::getTextAntialias - 現在のテキストのアンチエイリアス設定を返す
    • ImagickDraw::getTextDecoration - テキストの装飾を返す
    • ImagickDraw::getTextEncoding - テキストによる注記の際に使用するコードセットを返す
    • ImagickDraw::getTextInterlineSpacing - Gets the text interword spacing
    • ImagickDraw::getTextInterwordSpacing - Gets the text interword spacing
    • ImagickDraw::getTextKerning - Gets the text kerning
    • ImagickDraw::getTextUnderColor - テキストの背景色を返す
    • ImagickDraw::getVectorGraphics - ベクターグラフィックを含む文字列を返す
    • ImagickDraw::line - 直線を描画する
    • ImagickDraw::matte - 画像の opacity チャネル上に描画する
    • ImagickDraw::pathClose - パス要素を現在のパスに追加する
    • ImagickDraw::pathCurveToAbsolute - 三次ベジエ曲線を描画する
    • ImagickDraw::pathCurveToQuadraticBezierAbsolute - 二次ベジエ曲線を描画する
    • ImagickDraw::pathCurveToQuadraticBezierRelative - 二次ベジエ曲線を描画する
    • ImagickDraw::pathCurveToQuadraticBezierSmoothAbsolute - 二次ベジエ曲線を描画する
    • ImagickDraw::pathCurveToQuadraticBezierSmoothRelative - 二次ベジエ曲線を描画する
    • ImagickDraw::pathCurveToRelative - 三次ベジエ曲線を描画する
    • ImagickDraw::pathCurveToSmoothAbsolute - 三次ベジエ曲線を描画する
    • ImagickDraw::pathCurveToSmoothRelative - 三次ベジエ曲線を描画する
    • ImagickDraw::pathEllipticArcAbsolute - 楕円弧を描画する
    • ImagickDraw::pathEllipticArcRelative - 楕円弧を描画する
    • ImagickDraw::pathFinish - 現在のパスを終了する
    • ImagickDraw::pathLineToAbsolute - 直線パスを描画する
    • ImagickDraw::pathLineToHorizontalAbsolute - 水平直線パスを描画する
    • ImagickDraw::pathLineToHorizontalRelative - 水平直線パスを描画する
    • ImagickDraw::pathLineToRelative - 直線パスを描画する
    • ImagickDraw::pathLineToVerticalAbsolute - 垂直直線パスを描画する
    • ImagickDraw::pathLineToVerticalRelative - 垂直直線パスを描画する
    • ImagickDraw::pathMoveToAbsolute - 新しいサブパスを開始する
    • ImagickDraw::pathMoveToRelative - 新しいサブパスを開始する
    • ImagickDraw::pathStart - パス描画リストの開始を宣言する
    • ImagickDraw::point - 点を描画する
    • ImagickDraw::polygon - 多角形を描画する
    • ImagickDraw::polyline - 線分群を描画する
    • ImagickDraw::pop - スタック内の現在の ImagickDraw を破棄し、事前に push された ImagickDraw を返す
    • ImagickDraw::popClipPath - クリップパスの定義を終了する
    • ImagickDraw::popDefs - 定義リストを終了する
    • ImagickDraw::popPattern - パターン定義を終了する
    • ImagickDraw::push - 現在の ImagickDraw をコピーしてスタックに格納する
    • ImagickDraw::pushClipPath - クリップパスの定義を開始する
    • ImagickDraw::pushDefs - 後に続くコマンドが、処理の前に名前つき要素を作成することを示す
    • ImagickDraw::pushPattern - 後に続く ImagickDraw::opPattern() までのコマンドが、名前付きパターンを構成することを示す
    • ImagickDraw::rectangle - 矩形を描画する
    • ImagickDraw::render - これまでのすべての描画コマンドを画像上にレンダリングする
    • ImagickDraw::resetVectorGraphics - Resets the vector graphics
    • ImagickDraw::rotate - 指定した回転を現在の座標空間に適用する
    • ImagickDraw::roundRectangle - 角が丸い矩形を描画する
    • ImagickDraw::scale - 倍率を調整する
    • ImagickDraw::setClipPath - 指定した名前のクリッピングパスを画像に関連付ける
    • ImagickDraw::setClipRule - クリッピングパスで使用する多角形塗りつぶしルールを設定する
    • ImagickDraw::setClipUnits - クリップパスの単位の解釈を設定する
    • ImagickDraw::setFillAlpha - 色やテクスチャによる塗りつぶしの際の透過度を設定する
    • ImagickDraw::setFillColor - オブジェクトの塗りつぶしに使用する色を設定する
    • ImagickDraw::setFillOpacity - 色やテクスチャによる塗りつぶしの際の透過度を設定する
    • ImagickDraw::setFillPatternURL - オブジェクトの塗りつぶしパターンとして使用する URL を設定する
    • ImagickDraw::setFillRule - 多角形の描画時に使用する塗りつぶしルールを設定する
    • ImagickDraw::setFont - テキストによる注記を行う際に使用するフォントを設定する
    • ImagickDraw::setFontFamily - テキストによる注記を行う際に使用するフォントファミリーを設定する
    • ImagickDraw::setFontSize - テキストによる注記を行う際に使用するフォントのポイント数を設定する
    • ImagickDraw::setFontStretch - テキストによる注記を行う際に使用するフォントの伸縮を設定する
    • ImagickDraw::setFontStyle - テキストによる注記を行う際に使用するフォントのスタイルを設定する
    • ImagickDraw::setFontWeight - フォントの重さを設定する
    • ImagickDraw::setGravity - テキストの配置時の gravity を設定する
    • ImagickDraw::setResolution - Sets the resolution
    • ImagickDraw::setStrokeAlpha - オブジェクトの枠線の透明度を指定する
    • ImagickDraw::setStrokeAntialias - 縁取りの枠線をアンチエイリアス処理するかどうかを制御する
    • ImagickDraw::setStrokeColor - オブジェクトの縁取りに使用する色を設定する
    • ImagickDraw::setStrokeDashArray - パスの描画に使用する破線のパターンを指定する
    • ImagickDraw::setStrokeDashOffset - 破線パターンにおける破線の開始オフセットを指定する
    • ImagickDraw::setStrokeLineCap - 開かれたサブパスを描画する際に使用する端点の形状を指定する
    • ImagickDraw::setStrokeLineJoin - パスの角を描画する際に使用する形状を指定する
    • ImagickDraw::setStrokeMiterLimit - マイターリミットを指定する
    • ImagickDraw::setStrokeOpacity - オブジェクトの枠線の透明度を指定する
    • ImagickDraw::setStrokePatternURL - オブジェクトの枠線の描画に使用するパターンを設定する
    • ImagickDraw::setStrokeWidth - オブジェクトの枠線の描画に使用する線の幅を設定する
    • ImagickDraw::setTextAlignment - テキストの配置を指定する
    • ImagickDraw::setTextAntialias - テキストをアンチエイリアス処理するかどうかを制御する
    • ImagickDraw::setTextDecoration - 装飾を指定する
    • ImagickDraw::setTextEncoding - テキストのコードセットを指定する
    • ImagickDraw::setTextInterlineSpacing - Sets the text interline spacing
    • ImagickDraw::setTextInterwordSpacing - Sets the text interword spacing
    • ImagickDraw::setTextKerning - Sets the text kerning
    • ImagickDraw::setTextUnderColor - 背景の矩形の色を指定する
    • ImagickDraw::setVectorGraphics - ベクターグラフィックを設定する
    • ImagickDraw::setViewbox - キャンバス全体の大きさを設定する
    • ImagickDraw::skewX - 現在の座標系を水平方向に傾ける
    • ImagickDraw::skewY - 現在の座標系を垂直方向に傾ける
    • ImagickDraw::translate - 現在の座標系に変換を適用する
    • ImagickDraw::__construct - ImagickDraw コンストラクタ
    • ImagickKernel::addKernel - Attach another kernel to a kernel list
    • ImagickKernel::addUnityKernel - Adds a Unity Kernel to the kernel list
    • ImagickKernel::fromBuiltIn - Create a kernel from a builtin in kernel
    • ImagickKernel::fromMatrix - Create a kernel from a 2d matrix of values
    • ImagickKernel::getMatrix - Get the 2d matrix of values used in this kernel
    • ImagickKernel::scale - Scales a kernel list by the given amount
    • ImagickKernel::separate - Separates a linked set of kernels and returns an array of ImagickKernels
    • ImagickPixel::clear - このオブジェクトに関連付けられたリソースを消去する
    • ImagickPixel::destroy - このオブジェクトに関連付けられているリソースの割り当てを解除する
    • ImagickPixel::getColor - 色を返す
    • ImagickPixel::getColorAsString - 色を文字列で返す
    • ImagickPixel::getColorCount - この色に関連付けられている色カウントを返す
    • ImagickPixel::getColorQuantum - Returns the color of the pixel in an array as Quantum values
    • ImagickPixel::getColorValue - 指定した色チャネルの値を正規化したものを取得する
    • ImagickPixel::getColorValueQuantum - Gets the quantum value of a color in the ImagickPixel
    • ImagickPixel::getHSL - ImagickPixel オブジェクトの HSL カラーを正規化したものを返す
    • ImagickPixel::getIndex - Gets the colormap index of the pixel wand
    • ImagickPixel::isPixelSimilar - Check the distance between this color and another
    • ImagickPixel::isPixelSimilarQuantum - Returns whether two colors differ by less than the specified distance
    • ImagickPixel::isSimilar - この色と別の色の差を調べる
    • ImagickPixel::setColor - 色を設定する
    • ImagickPixel::setColorCount - Sets the color count associated with this color
    • ImagickPixel::setColorValue - 指定したチャネルの正規化した値を設定する
    • ImagickPixel::setColorValueQuantum - Sets the quantum value of a color element of the ImagickPixel
    • ImagickPixel::setHSL - 正規化した HSL カラーを設定する
    • ImagickPixel::setIndex - Sets the colormap index of the pixel wand
    • ImagickPixel::__construct - ImagickPixel のコンストラクタ
    • ImagickPixelIterator::clear - PixelIterator に関連付けられたリソースを消去する
    • ImagickPixelIterator::destroy - PixelIterator に関連付けられているリソースの割り当てを解除する
    • ImagickPixelIterator::getCurrentIteratorRow - ImagickPixel オブジェクトの現在の行を返す
    • ImagickPixelIterator::getIteratorRow - pixel iterator の現在の行を返す
    • ImagickPixelIterator::getNextIteratorRow - pixel iterator の次の行を返す
    • ImagickPixelIterator::getPreviousIteratorRow - 前の行を返す
    • ImagickPixelIterator::newPixelIterator - 新しい pixel iterator を返す
    • ImagickPixelIterator::newPixelRegionIterator - 新しい pixel iterator を返す
    • ImagickPixelIterator::resetIterator - pixel iterator をリセットする
    • ImagickPixelIterator::setIteratorFirstRow - pixel iterator を最初の行に設定する
    • ImagickPixelIterator::setIteratorLastRow - pixel iterator を最後の行に設定する
    • ImagickPixelIterator::setIteratorRow - pixel iterator の行を設定する
    • ImagickPixelIterator::syncIterator - pixel iterator を同期する
    • ImagickPixelIterator::__construct - ImagickPixelIterator のコンストラクタ
    • imap_8bit - 8 ビット文字列を quoted-printable 文字列に変換する
    • imap_alerts - 発生した IMAP 警告メッセージを返す
    • imap_append - 指定されたメールボックスに文字列メッセージを追加する
    • imap_base64 - BASE64 でエンコードされたテキストをデコードする
    • imap_binary - 8 ビット文字列を base64 文字列に変換する
    • imap_body - メッセージ本文を読む
    • imap_bodystruct - 指定したメッセージの指定した body セクションの構造を読み込む
    • imap_check - 現在のメールボックスをチェックする
    • imap_clearflag_full - メッセージのフラグをクリアする
    • imap_close - IMAP ストリームをクローズする
    • imap_create - imap_createmailbox のエイリアス
    • imap_createmailbox - 新しいメールボックスを作る
    • imap_delete - 現在のメールボックスから削除するメッセージに印を付ける
    • imap_deletemailbox - メールボックスを削除する
    • imap_errors - 発生したすべての IMAP エラーを返す
    • imap_expunge - 削除用にマークされたすべてのメッセージを削除する
    • imap_fetchbody - メッセージ本文中の特定のセクションを取り出す
    • imap_fetchheader - メッセージのヘッダを返す
    • imap_fetchmime - メッセージの特定のセクションに対する MIME ヘッダを取り出します
    • imap_fetchstructure - 特定のメッセージの構造を読み込む
    • imap_fetchtext - imap_body のエイリアス
    • imap_fetch_overview - 指定したメッセージのヘッダ情報の概要を読む
    • imap_gc - IMAP キャッシュをクリアする
    • imap_getacl - 与えられたメールボックスの ACL を取得する
    • imap_getmailboxes - メールボックスのリストを読み込み、各ボックスに関する詳細な情報を返す
    • imap_getsubscribed - 購読中の全メールボックスの一覧を取得する
    • imap_get_quota - クオータレベルの設定、メールボックス毎の使用状況を取得する
    • imap_get_quotaroot - ユーザー単位のクォータ設定を取得する
    • imap_header - imap_headerinfo のエイリアス
    • imap_headerinfo - メッセージヘッダを読み込む
    • imap_headers - メールボックス内のすべてのメッセージのヘッダを返す
    • imap_is_open - IMAP ストリームがまだ有効かを調べる
    • imap_last_error - ページリクエスト時に生じた直近の IMAP エラーを返す
    • imap_list - メールボックスのリストを読み込む
    • imap_listmailbox - imap_list のエイリアス
    • imap_listscan - 指定したテキストにマッチするメールボックスの一覧を返す
    • imap_listsubscribed - imap_lsub のエイリアス
    • imap_lsub - 購読しているすべてのメールボックスの一覧を得る
    • imap_mail - e-mail メッセージを送信する
    • imap_mailboxmsginfo - 現在のメールボックスに関する情報を得る
    • imap_mail_compose - 指定したエンベロープおよびボディセクションに基づいて MIME メッセージを作成する
    • imap_mail_copy - 指定されたメッセージをメールボックスにコピーする
    • imap_mail_move - 指定されたメッセージをメールボックスに移動する
    • imap_mime_header_decode - MIME ヘッダ要素をデコードする
    • imap_msgno - 指定した UID のメッセージ番号を返す
    • imap_mutf7_to_utf8 - 修正UTF-7文字列をUTF-8にデコードする
    • imap_num_msg - 現在のメールボックスのメッセージ数を取得する
    • imap_num_recent - 現在のメールボックスにある新規メッセージ数を取得する
    • imap_open - メールボックスへの IMAP ストリームをオープンする
    • imap_ping - IMAP ストリームがアクティブかどうかを調べる
    • imap_qprint - quoted-printable 文字列を 8 ビット文字列に変換する
    • imap_rename - imap_renamemailbox のエイリアス
    • imap_renamemailbox - メールボックスの名前を変更する
    • imap_reopen - 新規メールボックスへの IMAP ストリームを再度オープンする
    • imap_rfc822_parse_adrlist - アドレス文字列を解釈します
    • imap_rfc822_parse_headers - 文字列からメールヘッダを解釈する
    • imap_rfc822_write_address - 指定したメールボックス、ホスト、個人情報を、 電子メールアドレスとして適当な形式にして返す
    • imap_savebody - 指定した本文部をファイルに保存する
    • imap_scan - imap_listscan のエイリアス
    • imap_scanmailbox - imap_listscan のエイリアス
    • imap_search - 指定した検索条件にマッチするメッセージを配列として返す
    • imap_setacl - 指定したメールボックスの ACL を設定する
    • imap_setflag_full - メッセージにフラグをセットする
    • imap_set_quota - 指定したメールボックスにクォータを設定する
    • imap_sort - メッセージヘッダの配列をソートする
    • imap_status - 現在のメールボックス以外のメールボックスのステータス情報を返す
    • imap_subscribe - メールボックスを購読する
    • imap_thread - スレッド化したメッセージのツリーを返す
    • imap_timeout - imap タイムアウトを設定あるいは取得する
    • imap_uid - 指定したメッセージシーケンス番号の UID を返す
    • imap_undelete - 削除マークがついているメッセージのマークをはずす
    • imap_unsubscribe - メールボックスの購読をやめる
    • imap_utf7_decode - 修正版 UTF-7 エンコードされた文字列をデコードする
    • imap_utf7_encode - ISO-8859-1 文字列を修正版 UTF-7 テキストに変換する
    • imap_utf8 - MIME エンコードされたテキストを UTF-8 に変換する
    • imap_utf8_to_mutf7 - UTF-8 文字列を修正UTF-7にエンコードする
    • implode - 配列要素を文字列により連結する
    • inet_ntop - パックされたインターネットアドレスを、人間が読める形式に変換する
    • inet_pton - 人間が読める形式の IP アドレスを、パックされた in_addr 形式に変換する
    • InfiniteIterator::next - 内部イテレータを次に移動するか、巻き戻す
    • InfiniteIterator::__construct - InfiniteIterator を作成する
    • inflate_add - インクリメンタルにエンコードされたデータを解凍する
    • inflate_get_read_len - これまでに読み取ったバイト数を得る
    • inflate_get_status - 解凍の状態を取得する
    • inflate_init - インクリメンタルな解凍コンテキストを初期化する
    • ini_alter - ini_set のエイリアス
    • ini_get - 設定オプションの値を得る
    • ini_get_all - すべての設定オプションを得る
    • ini_parse_quantity - ini ディレクティブの省略形を解釈し、サイズを取得する
    • ini_restore - 設定オプションの値を元に戻す
    • ini_set - 設定オプションの値を設定する
    • inotify_add_watch - 初期化済みの inotify インスタンスに監視対象を追加する
    • inotify_init - inotify インスタンスを初期化する
    • inotify_queue_len - 待機中のイベントがある場合に正の数を返す
    • inotify_read - inotify インスタンスからイベントを読み込む
    • inotify_rm_watch - 既存の監視を inotify インスタンスから削除する
    • intdiv - 整数値の除算
    • interface_exists - インターフェイスが宣言されているかどうかを確認する
    • InternalIterator::current - 現在の要素を返す
    • InternalIterator::key - 現在の要素のキーを返す
    • InternalIterator::next - 次の要素に進む
    • InternalIterator::rewind - イテレータの最初の要素に巻き戻す
    • InternalIterator::valid - 現在位置が有効かどうかを調べる
    • InternalIterator::__construct - private なコンストラクタのため、直接インスタンス化できません
    • IntlBreakIterator::createCharacterInstance - 文字シーケンスの組み合わせの境界用にイテレータを作る
    • IntlBreakIterator::createCodePointInstance - コードポイントの境界用にイテレータを作る
    • IntlBreakIterator::createLineInstance - 論理的に可能な改行用にイテレータを作る
    • IntlBreakIterator::createSentenceInstance - 文末用にイテレータを作る
    • IntlBreakIterator::createTitleInstance - タイトル文字の区切り用にイテレータを作る
    • IntlBreakIterator::createWordInstance - 単語の区切り用にイテレータを作る
    • IntlBreakIterator::current - 現在位置のインデックスを取得する
    • IntlBreakIterator::first - テキスト内の最初の文字を場所を取得する
    • IntlBreakIterator::following - 指定したオフセット以降の最初の境界までイテレータを進める
    • IntlBreakIterator::getErrorCode - このオブジェクトの直近のエラーコードを取得する
    • IntlBreakIterator::getErrorMessage - このオブジェクトの直近のエラーメッセージを取得する
    • IntlBreakIterator::getLocale - このオブジェクトに関連づけられたロケールを取得する
    • IntlBreakIterator::getPartsIterator - 境界と境界の間の navigating fragments 用にイテレータを作る
    • IntlBreakIterator::getText - スキャンするテキストを取得する
    • IntlBreakIterator::isBoundary - あるオフセットが境界のオフセットかどうかを調べる
    • IntlBreakIterator::last - イテレータの位置を、最後の文字より後に設定する
    • IntlBreakIterator::next - イテレータを次の境界まで進める
    • IntlBreakIterator::preceding - イテレータの位置を、指定したオフセット以前の最初の境界に設定する
    • IntlBreakIterator::previous - イテレータの位置を、現在位置の直前の境界に設定する
    • IntlBreakIterator::setText - スキャンするテキストを設定する
    • IntlBreakIterator::__construct - インスタンス化を禁止するためのprivateなコンストラクタ
    • IntlCalendar::add - フィールドに (符号付きの) 一定量の時間を追加する
    • IntlCalendar::after - このオブジェクトの時刻が、指定されたオブジェクトより未来かを判定する
    • IntlCalendar::before - このオブジェクトの時刻が、指定されたオブジェクトより過去かを判定する
    • IntlCalendar::clear - 単一または全てのフィールドをクリアする
    • IntlCalendar::createInstance - 新しい IntlCalendar を作成する
    • IntlCalendar::equals - ふたつの IntlCalendar オブジェクトの時刻を比較する
    • IntlCalendar::fieldDifference - 指定された時刻と、このオブジェクトの時刻の差を計算する
    • IntlCalendar::fromDateTime - DateTime オブジェクトまたは文字列から、IntlCalendar を作成する
    • IntlCalendar::get - フィールドの値を取得する
    • IntlCalendar::getActualMaximum - オブジェクトの現在時刻を考慮して、フィールドの最大値を取得する
    • IntlCalendar::getActualMinimum - オブジェクトの現在時刻を考慮して、フィールドの最小値を取得する
    • IntlCalendar::getAvailableLocales - データが存在するロケールの配列を取得する
    • IntlCalendar::getDayOfWeekType - 指定された日が平日か、週末か、ふたつの週の間の移行日かを返す
    • IntlCalendar::getErrorCode - オブジェクトに関する直近のエラーコードを取得する
    • IntlCalendar::getErrorMessage - オブジェクトの直近のエラーメッセージを取得する
    • IntlCalendar::getFirstDayOfWeek - カレンダーのロケールに基づいて、週の始めの日を返す
    • IntlCalendar::getGreatestMinimum - 指定されたフィールドの、ローカルな最小値のうち、最大の値を返す
    • IntlCalendar::getKeywordValuesForLocale - ロケールのキーワードの値の集合を返す
    • IntlCalendar::getLeastMaximum - 指定されたフィールドの、ローカルな最大値のうち、最小の値を返す
    • IntlCalendar::getLocale - オブジェクトに関連付けられたロケールを取得する
    • IntlCalendar::getMaximum - フィールドのグローバルな最大値を返す
    • IntlCalendar::getMinimalDaysInFirstWeek - 特定の年や月における、最初の週の日数の最小値を返す
    • IntlCalendar::getMinimum - フィールドのグローバルな最小値を返す
    • IntlCalendar::getNow - 現在時刻を示す数値を取得する
    • IntlCalendar::getRepeatedWallTimeOption - 繰り返される実時間を扱う際の振る舞いを取得する
    • IntlCalendar::getSkippedWallTimeOption - スキップされた実時間を扱う際の振る舞いを取得する
    • IntlCalendar::getTime - このオブジェクトが表す時刻を取得する
    • IntlCalendar::getTimeZone - オブジェクトのタイムゾーンを取得する
    • IntlCalendar::getType - カレンダーのタイプを取得する
    • IntlCalendar::getWeekendTransition - 週末が開始/終了した日からの経過時間を取得する
    • IntlCalendar::inDaylightTime - オブジェクトの時刻が夏時間かを調べる
    • IntlCalendar::isEquivalentTo - 別のカレンダーが、時刻を除いて等しいかを調べる
    • IntlCalendar::isLenient - 日付と時刻の解釈を「緩いモード」で行うかを取得する
    • IntlCalendar::isSet - フィールドが設定されているかを調べる
    • IntlCalendar::isWeekend - ある日付/時刻が週末にあるかを調べる
    • IntlCalendar::roll - 次のフィールドを繰り上げずに、フィールドに値を加算する
    • IntlCalendar::set - 時刻または複数の共通フィールドを一度に設定する
    • IntlCalendar::setDate - 日付のフィールドを設定する
    • IntlCalendar::setDateTime - 日付と時刻のフィールドを設定する
    • IntlCalendar::setFirstDayOfWeek - 週の始まりと見なされる曜日を設定する
    • IntlCalendar::setLenient - 日付/時刻の解釈を「緩いモード」にするかを設定する
    • IntlCalendar::setMinimalDaysInFirstWeek - 特定の年や月における、最初の週の日数の最小値を設定する
    • IntlCalendar::setRepeatedWallTimeOption - 負のタイムゾーンオフセットを適用した際に、繰り返される実時間をどう扱うかを設定する
    • IntlCalendar::setSkippedWallTimeOption - 正のタイムゾーンオフセットを適用した際に、スキップされる実時間をどう扱うかを設定する
    • IntlCalendar::setTime - エポックからのカレンダーの時刻をミリ秒単位で設定する
    • IntlCalendar::setTimeZone - このカレンダーで使うタイムゾーンを設定する
    • IntlCalendar::toDateTime - IntlCalendar を DateTime オブジェクトに変換する
    • IntlCalendar::__construct - インスタンス化を禁止するための private なコンストラクタ
    • IntlChar::charAge - コードポイントの "age" を取得する
    • IntlChar::charDigitValue - 10進数の桁の文字を桁の値として取得する
    • IntlChar::charDirection - コードポイントの双方向カテゴリの値を取得する
    • IntlChar::charFromName - 名前で Unicode 文字を探し、コードポイントの値を返す
    • IntlChar::charMirror - コードポイントの "鏡文字" を取得する
    • IntlChar::charName - Unicode 文字の名前を取得する
    • IntlChar::charType - コードポイントの一般カテゴリの値を取得する
    • IntlChar::chr - コードポイント値に対応する、Unicode 文字を返す
    • IntlChar::digit - コードポイントの10進の数値を、指定された基数で返す
    • IntlChar::enumCharNames - 指定された範囲の全てのUnicode文字を走査する
    • IntlChar::enumCharTypes - Unicode の一般カテゴリの情報付きで、全てのコードポイントを走査する
    • IntlChar::foldCase - コードポイントに対してケースフォールディングを行う
    • IntlChar::forDigit - 指定された整数と基数を表す文字を取得する
    • IntlChar::getBidiPairedBracket - コードポイントと対になる括弧文字を取得する
    • IntlChar::getBlockCode - コードポイントが含まれる割当ブロックを取得する
    • IntlChar::getCombiningClass - コードポイントの合成クラスを取得する
    • IntlChar::getFC_NFKC_Closure - コードポイントの FC_NFKC_Closure プロパティの値を取得する
    • IntlChar::getIntPropertyMaxValue - Unicode プロパティの最大値を取得する
    • IntlChar::getIntPropertyMinValue - Unicode プロパティの最小値を取得する
    • IntlChar::getIntPropertyValue - コードポイントに対応する、Unicode プロパティの値を取得する
    • IntlChar::getNumericValue - Unicode のコードポイントの数値の値を取得する
    • IntlChar::getPropertyEnum - プロパティの名前に対応する定数値を取得する
    • IntlChar::getPropertyName - プロパティに対応する、Unicode での名前を取得する
    • IntlChar::getPropertyValueEnum - 指定された値の名前に対応する、プロパティの値を取得する
    • IntlChar::getPropertyValueName - プロパティの値に対応する、Unicode の名前を取得する
    • IntlChar::getUnicodeVersion - Unicode のバージョンを取得する
    • IntlChar::hasBinaryProperty - コードポイントに対応する、バイナリ Unicode プロパティがあるかを調べる
    • IntlChar::isalnum - コードポイントが英数字であるかを調べる
    • IntlChar::isalpha - コードポイントがアルファベットかを調べる
    • IntlChar::isbase - コードポイントが基底文字に含まれるかを調べる
    • IntlChar::isblank - コードポイントが "空白" または "水平方向の空白" 文字であるかを調べる
    • IntlChar::iscntrl - コードポイントが制御文字かどうかを調べる
    • IntlChar::isdefined - コードポイントが定義されているかどうかを調べる
    • IntlChar::isdigit - コードポイントが、数字であるかを調べる
    • IntlChar::isgraph - コードポイントが図形文字であるかを調べる
    • IntlChar::isIDIgnorable - コードポイントが無視できる文字かを調べる
    • IntlChar::isIDPart - コードポイントが識別子として使えるかを調べる
    • IntlChar::isIDStart - コードポイントが識別子の最初の文字として使えるかを調べる
    • IntlChar::isISOControl - コードポイントがISOで定義された制御文字であるかを調べる
    • IntlChar::isJavaIDPart - コードポイントが、Java の識別子として使えるかを調べる
    • IntlChar::isJavaIDStart - コードポイントが Java の識別子の最初の文字として使えるかを調べる
    • IntlChar::isJavaSpaceChar - コードポイントが Java におけるスペース文字であるかを調べる
    • IntlChar::islower - コードポイントが小文字かどうかを調べる
    • IntlChar::isMirrored - コードポイントが Bidi_Mirrored プロパティを持つかを調べる
    • IntlChar::isprint - コードポイントが印字可能な文字かを調べる
    • IntlChar::ispunct - コードポイントが句読点の文字かどうかを調べる
    • IntlChar::isspace - コードポイントが、スペース文字であるかを調べる
    • IntlChar::istitle - コードポイントがタイトルケース文字であるかを調べる
    • IntlChar::isUAlphabetic - コードポイントが、Alphabetic プロパティを持つかを調べる
    • IntlChar::isULowercase - コードポイントが小文字のUnicodeプロパティを持つかを調べる
    • IntlChar::isupper - コードポイントが一般カテゴリ "Lu" (大文字) に属するかを判定する
    • IntlChar::isUUppercase - コードポイントが大文字のUnicodeプロパティを持つかを調べる
    • IntlChar::isUWhiteSpace - コードポイントが、White_Space プロパティを持つかを調べる
    • IntlChar::isWhitespace - コードポイントが、ICU の空白文字であるかを調べる
    • IntlChar::isxdigit - コードポイントが、16進数の文字であるかを調べる
    • IntlChar::ord - 文字に対応する Unicode コードポイントを返す
    • IntlChar::tolower - Unicode 文字を小文字にする
    • IntlChar::totitle - Unicode 文字をタイトルケースにする
    • IntlChar::toupper - Unicode 文字を大文字にする
    • IntlCodePointBreakIterator::getLastCodePoint - イテレータを進めたり、戻したりした後に渡された、直近のコードポイントを取得する
    • IntlDateFormatter::create - Date Formatter を作成する
    • IntlDateFormatter::format - 日付/時刻 の値を文字列としてフォーマットする
    • IntlDateFormatter::formatObject - オブジェクトの書式を設定する
    • IntlDateFormatter::getCalendar - IntlDateFormatter が使用するカレンダー型を取得する
    • IntlDateFormatter::getCalendarObject - カレンダーオブジェクトのコピーを取得する
    • IntlDateFormatter::getDateType - IntlDateFormatter が使用する日付形式を取得する
    • IntlDateFormatter::getErrorCode - 直近の操作のエラーコードを取得する
    • IntlDateFormatter::getErrorMessage - 直近の操作のエラーテキストを取得する
    • IntlDateFormatter::getLocale - Formatter が使用するロケールを取得する
    • IntlDateFormatter::getPattern - IntlDateFormatter が使用するパターンを取得する
    • IntlDateFormatter::getTimeType - IntlDateFormatter が使用する時刻形式を取得する
    • IntlDateFormatter::getTimeZone - タイムゾーンを取得する
    • IntlDateFormatter::getTimeZoneId - IntlDateFormatter が使用するタイムゾーン ID を取得する
    • IntlDateFormatter::isLenient - IntlDateFormatter で使用する寛大さを取得する
    • IntlDateFormatter::localtime - 文字列をパースして、フィールドベースの時刻値にする
    • IntlDateFormatter::parse - 文字列をパースしてタイムスタンプにする
    • IntlDateFormatter::setCalendar - Formatter が使うカレンダー型を設定する
    • IntlDateFormatter::setLenient - パーサの寛大さを設定する
    • IntlDateFormatter::setPattern - IntlDateFormatter が使用するパターンを設定する
    • IntlDateFormatter::setTimeZone - タイムゾーンを設定する
    • IntlDatePatternGenerator::create - IntlDatePatternGenerator を作成する
    • IntlDatePatternGenerator::getBestPattern - もっとも適合した 日付/時刻 のフォーマットを決定する
    • IntlGregorianCalendar::createFromDate - 日付の情報から、新しい IntlGregorianCalendar のインスタンスを作成する
    • IntlGregorianCalendar::createFromDateTime - 日付と時刻の値から、新しい IntlGregorianCalendar のインスタンスを作成する
    • IntlGregorianCalendar::getGregorianChange - グレゴリオ暦への切換え日を取得する
    • IntlGregorianCalendar::isLeapYear - 指定された年がうるう年かを判定する
    • IntlGregorianCalendar::setGregorianChange - グレゴリオ暦への切換え日を設定する
    • IntlGregorianCalendar::__construct - グレゴリオ暦の Calendar クラスを作成する
    • IntlIterator::current - 現在の要素を取得する
    • IntlIterator::key - 現在のキーを取得する
    • IntlIterator::next - 次の要素に進む
    • IntlIterator::rewind - イテレータを最初の要素に戻す
    • IntlIterator::valid - 現在の位置が有効かを調べる
    • IntlPartsIterator::getBreakIterator - この parts iterator の裏付けとなる、IntlBreakIterator を取得する
    • IntlRuleBasedBreakIterator::getBinaryRules - コンパイル済みのルールを、バイナリで取得する
    • IntlRuleBasedBreakIterator::getRules - このオブジェクトを作るのに使われているルールを取得する
    • IntlRuleBasedBreakIterator::getRuleStatus - 現在の境界位置を決めるルールから、ステータスの最大値を取得する
    • IntlRuleBasedBreakIterator::getRuleStatusVec - 現在の境界位置から定まるルールから、ステータス値を取得する
    • IntlRuleBasedBreakIterator::__construct - ルールセットから iterator を作成する
    • IntlTimeZone::countEquivalentIDs - 指定した ID を含む等価グループの中にある ID の数を取得する
    • IntlTimeZone::createDefault - このホストのデフォルトタイムゾーンの新しいコピーを作る
    • IntlTimeZone::createEnumeration - 指定した国あるいはオフセットに関連するタイムゾーン ID の一覧を取得する
    • IntlTimeZone::createTimeZone - 指定した ID のタイムゾーンオブジェクトを作る
    • IntlTimeZone::createTimeZoneIDEnumeration - 指定されたフィルタ条件を反映した、システムタイムゾーンのイテレータを取得する
    • IntlTimeZone::fromDateTimeZone - DateTimeZone からタイムゾーンオブジェクトを作る
    • IntlTimeZone::getCanonicalID - 指定したタイムゾーン ID の、正式なシステムタイムゾーン ID あるいは正規化したカスタムタイムゾーン ID を取得する
    • IntlTimeZone::getDisplayName - このタイムゾーンの、ユーザー向けに表示する名前を取得する
    • IntlTimeZone::getDSTSavings - ローカルの標準時刻からローカルの実測時刻を得るために加算する時間を取得する
    • IntlTimeZone::getEquivalentID - 指定した ID を含む等価グループの ID を取得する
    • IntlTimeZone::getErrorCode - 直近のエラーコードを取得する
    • IntlTimeZone::getErrorMessage - 直近のエラーメッセージを取得する
    • IntlTimeZone::getGMT - GMT (UTC) タイムゾーンを作る
    • IntlTimeZone::getID - タイムゾーン ID を取得する
    • IntlTimeZone::getIDForWindowsID - Windows のタイムゾーンを、システムタイムゾーンに翻訳する
    • IntlTimeZone::getOffset - 指定した時刻の、GMT へのオフセットを取得する
    • IntlTimeZone::getRawOffset - (夏時間を考慮せずに) GMT へのオフセットを取得する
    • IntlTimeZone::getRegion - 指定されたシステムタイムゾーンのIDから、地域コードを取得する
    • IntlTimeZone::getTZDataVersion - ICU が使っているタイムゾーンデータのバージョンを取得する
    • IntlTimeZone::getUnknown - "unknown" なタイムゾーンを取得する
    • IntlTimeZone::getWindowsID - システムタイムゾーンを、Windows のタイムゾーンに翻訳する
    • IntlTimeZone::hasSameRules - このタイムゾーンが別のタイムゾーンと同じルールおよびオフセットを使っているかどうかを調べる
    • IntlTimeZone::toDateTimeZone - DateTimeZone オブジェクトに変換する
    • IntlTimeZone::useDaylightTime - このタイムゾーンが夏時間を採用しているかどうかを調べる
    • IntlTimeZone::__construct - インスタンス化を禁止するためのprivateなコンストラクタ
    • intl_error_name - 指定したエラーコードに対応する名前を取得する
    • intl_get_error_code - 直近のエラーコードを取得する
    • intl_get_error_message - 直近のエラーの説明を取得する
    • intl_is_failure - 指定したエラーコードが失敗を表すかどうかを調べる
    • intval - 変数の整数としての値を取得する
    • in_array - 配列に値があるかチェックする
    • ip2long - ドット表記の (IPv4) IP アドレスを、長整数表現に変換する
    • iptcembed - バイナリ IPTC データを JPEG イメージに埋めこむ
    • iptcparse - バイナリの IPTC ブロックのタグをパースする
    • isset - 変数が宣言されていること、そして null とは異なることを検査する
    • is_a - オブジェクトが指定された型のものか、部分型であるかを調べる
    • is_array - 変数が配列かどうかを検査する
    • is_bool - 変数が boolean であるかを調べる
    • is_callable - 引数が、現在のスコープから関数としてコール可能な値かどうかを調べる
    • is_countable - 引数が、数えられる値かどうかを調べる
    • is_dir - ファイルがディレクトリかどうかを調べる
    • is_double - is_float のエイリアス
    • is_executable - ファイルが実行可能かどうかを調べる
    • is_file - 通常ファイルかどうかを調べる
    • is_finite - 浮動小数点数の値が、有限の数値であるかどうかを調べる
    • is_float - 変数の型が float かどうか調べる
    • is_infinite - 浮動小数点数の値が、無限大であるかどうかを調べる
    • is_int - 変数が整数型かどうかを検査する
    • is_integer - is_int のエイリアス
    • is_iterable - 変数の内容が反復可能な値であることを確認する
    • is_link - ファイルがシンボリックリンクかどうかを調べる
    • is_long - is_int のエイリアス
    • is_nan - 浮動小数点数の値が、非数かどうかを調べる
    • is_null - 変数が null かどうか調べる
    • is_numeric - 変数が数字または数値形式の文字列であるかを調べる
    • is_object - 変数がオブジェクトかどうかを検査する
    • is_readable - ファイルが存在し、読み込み可能であるかどうかを知る
    • is_real - is_float のエイリアス
    • is_resource - 変数がリソースかどうかを調べる
    • is_scalar - 変数がスカラかどうかを調べる
    • is_soap_fault - SOAP コールが失敗したかどうかを調べる
    • is_string - 変数の型が文字列かどうかを調べる
    • is_subclass_of - あるオブジェクトが指定したクラスのサブクラスに属するか (あるいは指定したインターフェイスを実装しているか) どうかを調べる
    • is_tainted - 文字列が汚染されているかどうかを調べる
    • is_uploaded_file - HTTP POST でアップロードされたファイルかどうかを調べる
    • is_writable - ファイルが書き込み可能かどうかを調べる
    • is_writeable - is_writable のエイリアス
    • Iterator::current - 現在の要素を返す
    • Iterator::key - 現在の要素のキーを返す
    • Iterator::next - 次の要素に進む
    • Iterator::rewind - イテレータの最初の要素に巻き戻す
    • Iterator::valid - 現在位置が有効かどうかを調べる
    • IteratorAggregate::getIterator - 外部イテレータを取得する
    • IteratorIterator::current - 現在の値を取得する
    • IteratorIterator::getInnerIterator - 内部イテレータを取得する
    • IteratorIterator::key - 現在の要素のキーを取得する
    • IteratorIterator::next - 次の要素に移動する
    • IteratorIterator::rewind - 最初の要素に巻き戻す
    • IteratorIterator::valid - 現在の要素が有効かどうかを調べる
    • IteratorIterator::__construct - traversable な何かからイテレータを作成する
    • iterator_apply - ユーザー関数をイテレータのすべての要素でコールする
    • iterator_count - イテレータにある要素をカウントする
    • iterator_to_array - イテレータを配列にコピーする
  • j
    • jddayofweek - 曜日を返す
    • jdmonthname - 月の名前を返す
    • jdtofrench - ユリウス積算日をフランス革命暦(共和暦)に変換する
    • jdtogregorian - ユリウス積算日をグレゴリウス日に変換する
    • jdtojewish - ユリウス積算日をユダヤ暦に変換する
    • jdtojulian - ユリウス積算日をユリウス暦に変換する
    • jdtounix - ユリウス歴を Unix タイムスタンプに変換する
    • jewishtojd - ユダヤ暦の日付けをユリウス積算日に変換する
    • join - implode のエイリアス
    • jpeg2wbmp - JPEG画像をWBMP画像に変換する
    • JsonSerializable::jsonSerialize - JSON にシリアライズしたいデータを指定する
    • json_decode - JSON 文字列をデコードする
    • json_encode - 値を JSON 形式にして返す
    • json_last_error - 直近に発生したエラーを返す
    • json_last_error_msg - 直近の json_encode() や json_decode() の呼び出しのエラー文字列を返す
    • json_validate - 文字列が有効なJSONかどうかを調べる
    • juliantojd - ユリウス暦をユリウス積算日に変換する
  • k
    • key - 配列からキーを取り出す
    • key_exists - array_key_exists のエイリアス
    • krsort - 配列をキーで降順にソートする
    • ksort - 配列をキーで昇順にソートする
  • l
    • lcfirst - 文字列の最初の文字を小文字にする
    • lcg_value - 複合線形合同法
    • lchgrp - シンボリックリンクのグループ所有権を変更する
    • lchown - シンボリックリンクの所有者を変更する
    • ldap_8859_to_t61 - 8859 文字を t61 文字に変換する
    • ldap_add - LDAP ディレクトリにエントリを付加する
    • ldap_add_ext - LDAP ディレクトリにエントリを付加する
    • ldap_bind - LDAP ディレクトリにバインドする
    • ldap_bind_ext - LDAP ディレクトリにバインドする
    • ldap_close - ldap_unbind のエイリアス
    • ldap_compare - 指定した DN のエントリで見付かった属性の値を比較する
    • ldap_connect - LDAP サーバーへ接続する
    • ldap_connect_wallet - LDAP サーバに接続する
    • ldap_control_paged_result - LDAP ページネーション制御情報を送信する
    • ldap_control_paged_result_response - LDAP ページネーションクッキーを取得する
    • ldap_count_entries - 検索結果のエントリ数を数える
    • ldap_count_references - 検索結果に含まれる参照数を数える
    • ldap_delete - ディレクトリからエントリを削除する
    • ldap_delete_ext - ディレクトリからエントリを削除する
    • ldap_dn2ufn - DN をユーザーに分かりやすい名前のフォーマットに変換する
    • ldap_err2str - LDAP のエラー番号をエラーメッセージ文字列に変換する
    • ldap_errno - 直近の LDAP コマンドの LDAP エラー番号を返す
    • ldap_error - 直近の LDAP コマンドの LDAP エラーメッセージを返す
    • ldap_escape - LDAP フィルタまたは DN で使われる文字列をエスケープする
    • ldap_exop - 拡張されたオペレーションを実行する
    • ldap_exop_passwd - PASSWD 拡張オペレーションのヘルパ
    • ldap_exop_refresh - Refresh 拡張操作のヘルパ
    • ldap_exop_sync - 拡張されたオペレーションを実行する
    • ldap_exop_whoami - WHOAMI 拡張オペレーションのヘルパ
    • ldap_explode_dn - DN を構成要素ごとに分割する
    • ldap_first_attribute - 最初の属性を返す
    • ldap_first_entry - 最初の結果 ID を返す
    • ldap_first_reference - 最初のリファレンスを返す
    • ldap_free_result - 結果メモリを開放する
    • ldap_get_attributes - 検索結果エントリから属性を得る
    • ldap_get_dn - 結果エントリから DN を得る
    • ldap_get_entries - 全ての結果エントリを得る
    • ldap_get_option - 指定したオプションの現在の値を得る
    • ldap_get_values - 結果エントリから全ての値を得る
    • ldap_get_values_len - 結果エントリから全てのバイナリ値を得る
    • ldap_list - 単一階層の検索を行う
    • ldap_modify - のエイリアス ldap_mod_replace
    • ldap_modify_batch - LDAP エントリの変更をまとめて実行する
    • ldap_mod_add - 現在の属性に属性を追加する
    • ldap_mod_add_ext - 現在の属性に属性を追加する
    • ldap_mod_del - 現在の属性から属性を削除する
    • ldap_mod_del_ext - 現在の属性から属性を削除する
    • ldap_mod_replace - 属性を新規の値に置換する
    • ldap_mod_replace_ext - 属性を新規の値に置換する
    • ldap_next_attribute - 結果における次の属性を得る
    • ldap_next_entry - 次の結果エントリを得る
    • ldap_next_reference - 次のリファレンスを得る
    • ldap_parse_exop - LDAP拡張オペレーションの結果オブジェクトをパースする
    • ldap_parse_reference - 参照エントリから情報を展開する
    • ldap_parse_result - 結果から情報を展開する
    • ldap_read - エントリを読み込む
    • ldap_rename - エントリ名を修正する
    • ldap_rename_ext - エントリ名を修正する
    • ldap_sasl_bind - SASL を使用して LDAP ディレクトリにバインドする
    • ldap_search - LDAP ツリーを探索する
    • ldap_set_option - 指定したオプションの値を設定する
    • ldap_set_rebind_proc - 参照先を再バインドするためのコールバック関数を設定する
    • ldap_sort - LDAP 結果エントリをクライアント側でソートする
    • ldap_start_tls - TLS を開始する
    • ldap_t61_to_8859 - t61 文字を 8859 文字に変換する
    • ldap_unbind - LDAP ディレクトリへのバインドを解除する
    • levenshtein - 二つの文字列のレーベンシュタイン距離を計算する
    • libxml_clear_errors - libxmlエラーハンドラをクリアする
    • libxml_disable_entity_loader - 外部エンティティの読み込み機能を無効にする
    • libxml_get_errors - エラー配列を取得する
    • libxml_get_external_entity_loader - 現在の外部エンティティローダーを取得する
    • libxml_get_last_error - libxmlから直近のエラーを取得する
    • libxml_set_external_entity_loader - デフォルトの外部エンティティローダーを変更する
    • libxml_set_streams_context - 次のlibxmlドキュメントの読込／書きこみのためにストリームコンテキストを設定する
    • libxml_use_internal_errors - libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする
    • LimitIterator::current - 現在の要素を取得する
    • LimitIterator::getPosition - 現在の位置を返す
    • LimitIterator::key - 現在のキーを取得する
    • LimitIterator::next - イテレータを前に移動する
    • LimitIterator::rewind - イテレータを指定した開始オフセットに巻き戻す
    • LimitIterator::seek - 与えられた位置に移動する
    • LimitIterator::valid - 現在の要素が有効かどうかをチェックする
    • LimitIterator::__construct - LimitIterator を作成する
    • link - ハードリンクを作成する
    • linkinfo - リンクに関する情報を取得する
    • list - 配列と同様の形式で、複数の変数への代入を行う
    • Locale::acceptFromHttp - 最もあてはまるロケールを HTTP "Accept-Language" ヘッダにもとづいて探す
    • Locale::canonicalize - ロケール文字列を正規化する
    • Locale::composeLocale - 正しく並べ替えて区切られたロケール ID を返す
    • Locale::filterMatches - 言語タグフィルタがロケールにマッチするかどうかを調べる
    • Locale::getAllVariants - 入力ロケールの変化系を取得する
    • Locale::getDefault - INTL のグローバル 'default_locale' からデフォルトのロケールを取得する
    • Locale::getDisplayLanguage - 入力ロケールの言語の表示名を、適切に地域化して返す
    • Locale::getDisplayName - 入力ロケールの表示名を、適切に地域化して返す
    • Locale::getDisplayRegion - 入力ロケールの地域の表示名を、適切に地域化して返す
    • Locale::getDisplayScript - 入力ロケールの文字の表示名を、適切に地域化して返す
    • Locale::getDisplayVariant - 入力ロケールの変化形の表示名を、適切に地域化して返す
    • Locale::getKeywords - 入力ロケールのキーワードを取得する
    • Locale::getPrimaryLanguage - 入力ロケールのプライマリ言語を取得する
    • Locale::getRegion - 入力ロケールの地域を取得する
    • Locale::getScript - 入力ロケールの文字を取得する
    • Locale::lookup - その言語にマッチする言語タグの一覧を検索する
    • Locale::parseLocale - ロケール ID のサブタグ要素を連想配列で返す
    • Locale::setDefault - デフォルトの実行時ロケールを設定する
    • localeconv - 数値に関するフォーマット情報を得る
    • localtime - ローカルタイムを得る
    • log - 自然対数
    • log1p - 値がゼロに近い時にでも精度を保つ方法で計算した log(1 + number) を返す
    • log10 - 底が 10 の対数
    • long2ip - 長整数表現のインターネットアドレスを (IPv4) インターネット標準ドット表記に変換する
    • lstat - ファイルあるいはシンボリックリンクの情報を取得する
    • ltrim - 文字列の最初から空白 (もしくはその他の文字) を取り除く
    • Lua::assign - PHP 変数を Lua にアサイン
    • Lua::call - Lua 関数を呼び出す
    • Lua::eval - 文字列を Lua コードとして評価
    • Lua::getVersion - getversion 用途
    • Lua::include - Lua スクリプトファイルをパース
    • Lua::registerCallback - PHP 関数を Lua に登録
    • Lua::__construct - Lua コンストラクタ
    • LuaClosure::__invoke - luaclosure を起動
    • LuaSandbox::callFunction - Call a function in a Lua global variable
    • LuaSandbox::disableProfiler - Disable the profiler
    • LuaSandbox::enableProfiler - Enable the profiler.
    • LuaSandbox::getCPUUsage - Fetch the current CPU time usage of the Lua environment
    • LuaSandbox::getMemoryUsage - Fetch the current memory usage of the Lua environment
    • LuaSandbox::getPeakMemoryUsage - Fetch the peak memory usage of the Lua environment
    • LuaSandbox::getProfilerFunctionReport - Fetch profiler data
    • LuaSandbox::getVersionInfo - Return the versions of LuaSandbox and Lua
    • LuaSandbox::loadBinary - Load a precompiled binary chunk into the Lua environment
    • LuaSandbox::loadString - Load Lua code into the Lua environment
    • LuaSandbox::pauseUsageTimer - Pause the CPU usage timer
    • LuaSandbox::registerLibrary - Register a set of PHP functions as a Lua library
    • LuaSandbox::setCPULimit - Set the CPU time limit for the Lua environment
    • LuaSandbox::setMemoryLimit - Set the memory limit for the Lua environment
    • LuaSandbox::unpauseUsageTimer - Unpause the timer paused by LuaSandbox::pauseUsageTimer
    • LuaSandbox::wrapPhpFunction - Wrap a PHP callable in a LuaSandboxFunction
    • LuaSandboxFunction::call - Call a Lua function
    • LuaSandboxFunction::dump - Dump the function as a binary blob
    • LuaSandboxFunction::__construct - Unused
    • lzf_compress - LZF 圧縮を行う
    • lzf_decompress - LZF 圧縮を伸長する
    • lzf_optimized_for - LZF 拡張モジュールの最適化指定を取得する
  • m
    • mail - メールを送信する
    • mailparse_determine_best_xfer_encoding - 最も適したエンコーディングを取得する
    • mailparse_msg_create - mime メールリソースを作成する
    • mailparse_msg_extract_part - メッセージセクションを展開/デコードする
    • mailparse_msg_extract_part_file - メッセージセクションを展開/デコードする
    • mailparse_msg_extract_whole_part_file - ヘッダを含むメッセージセクションを、transfer encoding をデコードせずに展開する
    • mailparse_msg_free - MIME リソースを解放する
    • mailparse_msg_get_part - MIME メッセージの指定したセクションに関するハンドルを返す
    • mailparse_msg_get_part_data - メッセージに関する情報の連想配列を返す
    • mailparse_msg_get_structure - 指定したメッセージ内の MIME セクション名の配列を返す
    • mailparse_msg_parse - データをパースし、バッファに追加する
    • mailparse_msg_parse_file - ファイルをパースする
    • mailparse_rfc822_parse_addresses - RFC 822 準拠のアドレスをパースする
    • mailparse_stream_encode - ソースファイルポインタからストリームデータを取得し、 エンコーディングを適用し、出力ファイルポインタに書き込む
    • mailparse_uudecode_all - ファイルポインタからデータをスキャンし、uuencode されたファイルを展開する
    • max - 最大値を返す
    • mb_check_encoding - 文字列が、指定したエンコーディングで有効なものかどうかを調べる
    • mb_chr - Unicode のコードポイントに対応する文字を返す
    • mb_convert_case - 文字列に対してケースフォールディングを行う
    • mb_convert_encoding - ある文字エンコーディングの文字列を、別の文字エンコーディングに変換する
    • mb_convert_kana - カナを("全角かな"、"半角かな"等に)変換する
    • mb_convert_variables - 変数の文字コードを変換する
    • mb_decode_mimeheader - MIME ヘッダフィールドの文字列をデコードする
    • mb_decode_numericentity - HTML 数値エンティティを文字にデコードする
    • mb_detect_encoding - 文字エンコーディングを検出する
    • mb_detect_order - 文字エンコーディング検出順序を設定あるいは取得する
    • mb_encode_mimeheader - MIMEヘッダの文字列をエンコードする
    • mb_encode_numericentity - 文字を HTML 数値エンティティにエンコードする
    • mb_encoding_aliases - 既知のエンコーディング・タイプのエイリアスを取得
    • mb_ereg - マルチバイト対応の正規表現マッチ
    • mb_eregi - マルチバイトをサポートし、大文字小文字を無視した正規表現マッチ
    • mb_eregi_replace - マルチバイト文字列に大文字小文字を区別せずに正規表現による置換を行う
    • mb_ereg_match - マルチバイト文字列が正規表現に一致するか調べる
    • mb_ereg_replace - マルチバイト文字列に正規表現による置換を行う
    • mb_ereg_replace_callback - マルチバイト文字列にコールバック関数を用いた正規表現による置換を行う
    • mb_ereg_search - 指定したマルチバイト文字列が正規表現に一致するか調べる
    • mb_ereg_search_getpos - 次の正規表現検索を開始する位置を取得する
    • mb_ereg_search_getregs - マルチバイト文字列が正規表現に一致する部分があるか調べる
    • mb_ereg_search_init - マルチバイト正規表現検索用の文字列と正規表現を設定する
    • mb_ereg_search_pos - 指定したマルチバイト文字列が正規表現に一致する部分の位置と長さを返す
    • mb_ereg_search_regs - 指定したマルチバイト文字列が正規表現に一致する部分を取得する
    • mb_ereg_search_setpos - 次の正規表現検索を開始する位置を設定する
    • mb_get_info - mbstring の内部設定値を取得する
    • mb_http_input - HTTP 入力文字エンコーディングを検出する
    • mb_http_output - HTTP 出力文字エンコーディングを設定あるいは取得する
    • mb_internal_encoding - 内部文字エンコーディングを設定あるいは取得する
    • mb_language - 現在の言語を設定あるいは取得する
    • mb_list_encodings - サポートするすべてのエンコーディングの配列を返す
    • mb_ord - 文字の Unicode コードポイントを取得する
    • mb_output_handler - 出力バッファ内で文字エンコーディングを変換するコールバック関数
    • mb_parse_str - GET/POST/COOKIE データをパースし、グローバル変数を設定する
    • mb_preferred_mime_name - MIME 文字設定を文字列で得る
    • mb_regex_encoding - 現在のマルチバイト正規表現用のエンコーディングを取得または設定する
    • mb_regex_set_options - マルチバイト正規表現関数のデフォルトオプションを取得または設定する
    • mb_scrub - 文字列に含まれる不正なバイト列を代替文字に置き換える
    • mb_send_mail - エンコード変換を行ってメールを送信する
    • mb_split - マルチバイト文字列を正規表現により分割する
    • mb_strcut - 文字列の一部を得る
    • mb_strimwidth - 指定した幅で文字列を丸める
    • mb_stripos - 大文字小文字を区別せず、 文字列の中で指定した文字列が最初に現れる位置を探す
    • mb_stristr - 大文字小文字を区別せず、 文字列の中で指定した文字列が最初に現れる位置を探す
    • mb_strlen - 文字列の長さを得る
    • mb_strpos - 文字列の中に指定した文字列が最初に現れる位置を見つける
    • mb_strrchr - 別の文字列の中で、ある文字が最後に現れる場所を見つける
    • mb_strrichr - 大文字小文字を区別せず、 別の文字列の中である文字が最後に現れる場所を探す
    • mb_strripos - 大文字小文字を区別せず、 文字列の中で指定した文字列が最後に現れる位置を探す
    • mb_strrpos - 文字列の中に指定した文字列が最後に現れる位置を見つける
    • mb_strstr - 文字列の中で、指定した文字列が最初に現れる位置を見つける
    • mb_strtolower - 文字列を小文字にする
    • mb_strtoupper - 文字列を大文字にする
    • mb_strwidth - 文字列の幅を返す
    • mb_str_pad - マルチバイト文字列を、特定の長さまで別のマルチバイト文字列で埋める
    • mb_str_split - マルチバイト文字列を受取り、文字の配列を返す
    • mb_substitute_character - 置換文字を設定あるいは取得する
    • mb_substr - 文字列の一部を得る
    • mb_substr_count - 部分文字列の出現回数を数える
    • mcrypt_create_iv - Creates an initialization vector (IV) from a random source
    • mcrypt_decrypt - Decrypts crypttext with given parameters
    • mcrypt_encrypt - 指定したパラメータでプレーンテキストを暗号化する
    • mcrypt_enc_get_algorithms_name - Returns the name of the opened algorithm
    • mcrypt_enc_get_block_size - Returns the blocksize of the opened algorithm
    • mcrypt_enc_get_iv_size - オープンされたアルゴリズムの IV の大きさを返す
    • mcrypt_enc_get_key_size - オープンされたモードでサポートされる最大キー長を返す
    • mcrypt_enc_get_modes_name - オープンされたモードの名前を返す
    • mcrypt_enc_get_supported_key_sizes - オープンされたアルゴリズムでサポートされるキー長を配列にして返す
    • mcrypt_enc_is_block_algorithm - オープンされたモードの暗号がブロックアルゴリズムであるかどうかを調べる
    • mcrypt_enc_is_block_algorithm_mode - オープンされたモードの暗号がブロックモードで動作するかどうかを調べる
    • mcrypt_enc_is_block_mode - オープンされたモードがブロック出力を行うかどうかを調べる
    • mcrypt_enc_self_test - オープンしたモジュールのセルフテストを実行する
    • mcrypt_generic - データを暗号化する
    • mcrypt_generic_deinit - 暗号化モジュールを終了する
    • mcrypt_generic_init - 暗号化に必要な全てのバッファを初期化する
    • mcrypt_get_block_size - 指定した暗号のブロックサイズを得る
    • mcrypt_get_cipher_name - 指定した暗号の名前を得る
    • mcrypt_get_iv_size - 指定した暗号/モードの組み合わせに属する IV の大きさを返す
    • mcrypt_get_key_size - 指定した暗号のキーの長さを得る
    • mcrypt_list_algorithms - サポートされる全ての暗号を配列として取得する
    • mcrypt_list_modes - サポートされる全てのモードの配列を取得する
    • mcrypt_module_close - mcrypt モジュールを閉じる
    • mcrypt_module_get_algo_block_size - 指定したアルゴリズムのブロック長を返す
    • mcrypt_module_get_algo_key_size - オープンされたモードでサポートされる最大キー長を返す
    • mcrypt_module_get_supported_key_sizes - オープンされたアルゴリズムでサポートされるキーのサイズを配列として返す
    • mcrypt_module_is_block_algorithm - 指定したアルゴリズムがブロックアルゴリズムであるかを調べる
    • mcrypt_module_is_block_algorithm_mode - 指定したモジュールがブロックアルゴリズムであるかどうかを返す
    • mcrypt_module_is_block_mode - 指定したモードがブロック出力を行うかどうかを返す
    • mcrypt_module_open - 使用するアルゴリズムおよびモードのモジュールをオープンする
    • mcrypt_module_self_test - 指定したモジュールのセルフテストを実行する
    • md5 - 文字列のmd5ハッシュ値を計算する
    • md5_file - 指定したファイルのMD5ハッシュ値を計算する
    • mdecrypt_generic - データを復号する
    • Memcache::add - サーバーに項目を追加する
    • Memcache::addServer - コネクションプールに memcached サーバーを追加する
    • Memcache::close - memcached サーバーとの接続を閉じる
    • Memcache::connect - memcached サーバーへの接続をオープンする
    • Memcache::decrement - 項目の値を減らす
    • Memcache::delete - サーバーから項目を削除する
    • Memcache::flush - サーバー上のすべての既存項目を消去する
    • Memcache::get - サーバーから項目を取得する
    • Memcache::getExtendedStats - プール内のすべてのサーバーの統計情報を取得する
    • Memcache::getServerStatus - サーバーの状態を返す
    • Memcache::getStats - サーバーの統計情報を取得する
    • Memcache::getVersion - サーバーのバージョンを返す
    • Memcache::increment - 項目の値を増やす
    • Memcache::pconnect - memcached サーバーへの持続的な接続をオープンする
    • Memcache::replace - 既存項目の値を置換する
    • Memcache::set - データをサーバーに格納する
    • Memcache::setCompressThreshold - 大きな値に対する自動圧縮処理を有効にする
    • Memcache::setServerParams - サーバーのパラメータおよび状態を、実行時に変更する
    • Memcached::add - アイテムを新しいキーで追加する
    • Memcached::addByKey - 指定したサーバーにアイテムを新しいキーで追加する
    • Memcached::addServer - サーバーをサーバープールに追加する
    • Memcached::addServers - 複数のサーバーをサーバープールに追加する
    • Memcached::append - データを既存のアイテムに追記する
    • Memcached::appendByKey - 指定したサーバーでデータを既存のアイテムに追記する
    • Memcached::cas - アイテムを比較して入れ替える
    • Memcached::casByKey - 指定したサーバーでアイテムを比較して入れ替える
    • Memcached::decrement - 数値アイテムの値を減らす
    • Memcached::decrementByKey - 指定したサーバー上にある数値アイテムの値を減らす
    • Memcached::delete - アイテムを削除する
    • Memcached::deleteByKey - 指定したサーバーからアイテムを削除する
    • Memcached::deleteMulti - 複数のアイテムを削除する
    • Memcached::deleteMultiByKey - 指定したサーバーから複数のアイテムを削除する
    • Memcached::fetch - 次の結果を取得する
    • Memcached::fetchAll - 残りのすべての結果を取得する
    • Memcached::flush - キャッシュ内のすべてのアイテムを無効にする
    • Memcached::get - アイテムを取得する
    • Memcached::getAllKeys - すべてのサーバーのキーを取得する
    • Memcached::getByKey - 指定したサーバーからアイテムを取得する
    • Memcached::getDelayed - 複数のアイテムを要求する
    • Memcached::getDelayedByKey - 指定したサーバーに複数のアイテムを要求する
    • Memcached::getMulti - 複数のアイテムを取得する
    • Memcached::getMultiByKey - 指定したサーバーから複数のアイテムを取得する
    • Memcached::getOption - Memcached のオプションの値を取得する
    • Memcached::getResultCode - 直近の操作の結果コードを返す
    • Memcached::getResultMessage - 最後に実行した操作の結果を説明したメッセージを返す。
    • Memcached::getServerByKey - キーとサーバーを関連付ける
    • Memcached::getServerList - プール内のサーバーの一覧を取得する
    • Memcached::getStats - サーバープールの統計情報を取得する
    • Memcached::getVersion - サーバープールのバージョン情報を取得する
    • Memcached::increment - 数値アイテムの値を増やす
    • Memcached::incrementByKey - 指定したサーバー上にある数値アイテムの値を増やす
    • Memcached::isPersistent - memcache への接続で持続的接続を使っているかどうかを調べる
    • Memcached::isPristine - 直近に作られたインスタンスかどうかを調べる
    • Memcached::prepend - 既存のアイテムの前にデータを付加する
    • Memcached::prependByKey - 指定したサーバーで既存のアイテムの前にデータを付加する
    • Memcached::quit - 開いている接続を閉じる
    • Memcached::replace - 既存のキーのアイテムを入れ替える
    • Memcached::replaceByKey - 指定したサーバーで既存のキーのアイテムを入れ替える
    • Memcached::resetServerList - サーバーリストからすべてのサーバーを消去する
    • Memcached::set - アイテムを格納する
    • Memcached::setByKey - 指定したサーバーにアイテムを格納する
    • Memcached::setMulti - 複数のアイテムを格納する
    • Memcached::setMultiByKey - 指定したサーバーで複数のアイテムを格納する
    • Memcached::setOption - Memcached のオプションの値を設定する
    • Memcached::setOptions - Memcached のオプションの値を設定する
    • Memcached::setSaslAuthData - 認証用の資格情報を設定する
    • Memcached::touch - アイテムに新しい有効期限を設定する
    • Memcached::touchByKey - 指定したサーバー上のアイテムに新しい有効期限を設定する
    • Memcached::__construct - Memcached のインスタンスを作成する
    • memcache_debug - デバッグ出力のオン/オフを切り替える
    • memory_get_peak_usage - PHP によって割り当てられたメモリの最大値を返す
    • memory_get_usage - PHP に割り当てられたメモリの量を返す
    • memory_reset_peak_usage - メモリの最大値をリセットする
    • MessageFormatter::create - 新しいメッセージフォーマッタを作成する
    • MessageFormatter::format - メッセージをフォーマットする
    • MessageFormatter::formatMessage - 手早くメッセージをフォーマットする
    • MessageFormatter::getErrorCode - 直近の操作のエラーコードを取得する
    • MessageFormatter::getErrorMessage - 直近の操作のエラーテキストを取得する
    • MessageFormatter::getLocale - フォーマッタを作成した際のロケールを取得する
    • MessageFormatter::getPattern - フォーマッタが使用するパターンを取得する
    • MessageFormatter::parse - パターンを使用して入力文字列をパースする
    • MessageFormatter::parseMessage - 手早く入力文字列をパースする
    • MessageFormatter::setPattern - フォーマッタが使用するパターンを設定する
    • metaphone - 文字列の metaphone キーを計算する
    • method_exists - クラスメソッドが存在するかどうかを確認する
    • mhash - ハッシュ値を計算する
    • mhash_count - 利用可能なハッシュ ID の最大値を得る
    • mhash_get_block_size - 指定したハッシュのブロックサイズを得る
    • mhash_get_hash_name - 指定したハッシュの名前を得る
    • mhash_keygen_s2k - キーを生成する
    • microtime - 現在の Unix タイムスタンプをマイクロ秒まで返す
    • mime_content_type - ファイルの MIME Content-type を検出する
    • min - 最小値を返す
    • mkdir - ディレクトリを作る
    • mktime - 日付を Unix のタイムスタンプとして取得する
    • money_format - 数値を金額文字列にフォーマットする
    • MongoDB\BSON\Binary::getData - Returns the Binary's data
    • MongoDB\BSON\Binary::getType - Returns the Binary's type
    • MongoDB\BSON\Binary::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Binary::serialize - Serialize a Binary
    • MongoDB\BSON\Binary::unserialize - Unserialize a Binary
    • MongoDB\BSON\Binary::__construct - Construct a new Binary
    • MongoDB\BSON\Binary::__toString - Returns the Binary's data
    • MongoDB\BSON\BinaryInterface::getData - Returns the BinaryInterface's data
    • MongoDB\BSON\BinaryInterface::getType - Returns the BinaryInterface's type
    • MongoDB\BSON\BinaryInterface::__toString - Returns the BinaryInterface's data
    • MongoDB\BSON\DBPointer::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\DBPointer::serialize - Serialize a DBPointer
    • MongoDB\BSON\DBPointer::unserialize - Unserialize a DBPointer
    • MongoDB\BSON\DBPointer::__construct - Construct a new DBPointer (unused)
    • MongoDB\BSON\DBPointer::__toString - Returns an empty string
    • MongoDB\BSON\Decimal128::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Decimal128::serialize - Serialize a Decimal128
    • MongoDB\BSON\Decimal128::unserialize - Unserialize a Decimal128
    • MongoDB\BSON\Decimal128::__construct - Construct a new Decimal128
    • MongoDB\BSON\Decimal128::__toString - Returns the string representation of this Decimal128
    • MongoDB\BSON\Decimal128Interface::__toString - Returns the string representation of this Decimal128Interface
    • MongoDB\BSON\Document::fromBSON - Construct a new document instance from a BSON string
    • MongoDB\BSON\Document::fromJSON - Construct a new document instance from a JSON string
    • MongoDB\BSON\Document::fromPHP - Construct a new document instance from PHP data
    • MongoDB\BSON\Document::get - Returns the value of a key in the document
    • MongoDB\BSON\Document::getIterator - Returns an iterator for the BSON document
    • MongoDB\BSON\Document::has - Returns whether a key is present in the document
    • MongoDB\BSON\Document::offsetExists - Returns whether a key is present in the document
    • MongoDB\BSON\Document::offsetGet - Returns the value of a key in the document
    • MongoDB\BSON\Document::offsetSet - Implementation of ArrayAccess
    • MongoDB\BSON\Document::offsetUnset - Implementation of ArrayAccess
    • MongoDB\BSON\Document::serialize - Serialize a Document
    • MongoDB\BSON\Document::toCanonicalExtendedJSON - Returns the Canonical Extended JSON representation of the BSON document
    • MongoDB\BSON\Document::toPHP - Returns the PHP representation of the BSON document
    • MongoDB\BSON\Document::toRelaxedExtendedJSON - Returns the Relaxed Extended JSON representation of the BSON document
    • MongoDB\BSON\Document::unserialize - Unserialize a BSON document
    • MongoDB\BSON\Document::__construct - Construct a new BSON document (unused)
    • MongoDB\BSON\Document::__toString - Returns the string representation of this BSON Document
    • MongoDB\BSON\fromJSON - Returns the BSON representation of a JSON value
    • MongoDB\BSON\fromPHP - Returns the BSON representation of a PHP value
    • MongoDB\BSON\Int64::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Int64::serialize - Serialize an Int64
    • MongoDB\BSON\Int64::unserialize - Unserialize an Int64
    • MongoDB\BSON\Int64::__construct - Construct a new Int64
    • MongoDB\BSON\Int64::__toString - Returns the string representation of this Int64
    • MongoDB\BSON\Iterator::current - Returns the current element
    • MongoDB\BSON\Iterator::key - Returns the key of the current element
    • MongoDB\BSON\Iterator::next - Advances the iterator to next element
    • MongoDB\BSON\Iterator::rewind - Rewinds the Iterator to the first element
    • MongoDB\BSON\Iterator::valid - Checks if current position is valid
    • MongoDB\BSON\Iterator::__construct - Construct a new BSON iterator (unused)
    • MongoDB\BSON\Javascript::getCode - Returns the Javascript's code
    • MongoDB\BSON\Javascript::getScope - Returns the Javascript's scope document
    • MongoDB\BSON\Javascript::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Javascript::serialize - Serialize a Javascript
    • MongoDB\BSON\Javascript::unserialize - Unserialize a Javascript
    • MongoDB\BSON\Javascript::__construct - Construct a new Javascript
    • MongoDB\BSON\Javascript::__toString - Returns the Javascript's code
    • MongoDB\BSON\JavascriptInterface::getCode - Returns the JavascriptInterface's code
    • MongoDB\BSON\JavascriptInterface::getScope - Returns the JavascriptInterface's scope document
    • MongoDB\BSON\JavascriptInterface::__toString - Returns the JavascriptInterface's code
    • MongoDB\BSON\MaxKey::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\MaxKey::serialize - Serialize a MaxKey
    • MongoDB\BSON\MaxKey::unserialize - Unserialize a MaxKey
    • MongoDB\BSON\MaxKey::__construct - Construct a new MaxKey
    • MongoDB\BSON\MinKey::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\MinKey::serialize - Serialize a MinKey
    • MongoDB\BSON\MinKey::unserialize - Unserialize a MinKey
    • MongoDB\BSON\MinKey::__construct - Construct a new MinKey
    • MongoDB\BSON\ObjectId::getTimestamp - Returns the timestamp component of this ObjectId
    • MongoDB\BSON\ObjectId::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\ObjectId::serialize - Serialize an ObjectId
    • MongoDB\BSON\ObjectId::unserialize - Unserialize an ObjectId
    • MongoDB\BSON\ObjectId::__construct - Construct a new ObjectId
    • MongoDB\BSON\ObjectId::__toString - Returns the hexidecimal representation of this ObjectId
    • MongoDB\BSON\ObjectIdInterface::getTimestamp - Returns the timestamp component of this ObjectIdInterface
    • MongoDB\BSON\ObjectIdInterface::__toString - Returns the hexidecimal representation of this ObjectIdInterface
    • MongoDB\BSON\PackedArray::fromPHP - Construct a new BSON array instance from PHP data
    • MongoDB\BSON\PackedArray::get - Returns the value of an index in the array
    • MongoDB\BSON\PackedArray::getIterator - Returns an iterator for the BSON array
    • MongoDB\BSON\PackedArray::has - Returns whether a index is present in the array
    • MongoDB\BSON\PackedArray::offsetExists - Returns whether a index is present in the array
    • MongoDB\BSON\PackedArray::offsetGet - Returns the value of an index in the array
    • MongoDB\BSON\PackedArray::offsetSet - Implementation of ArrayAccess
    • MongoDB\BSON\PackedArray::offsetUnset - Implementation of ArrayAccess
    • MongoDB\BSON\PackedArray::serialize - Serialize a BSON array
    • MongoDB\BSON\PackedArray::toPHP - Returns the PHP representation of the BSON array
    • MongoDB\BSON\PackedArray::unserialize - Unserialize a BSON array
    • MongoDB\BSON\PackedArray::__construct - Construct a new BSON array (unused)
    • MongoDB\BSON\PackedArray::__toString - Returns the string representation of this BSON array
    • MongoDB\BSON\Persistable::bsonSerialize - Provides an array or document to serialize as BSON
    • MongoDB\BSON\Regex::getFlags - Returns the Regex's flags
    • MongoDB\BSON\Regex::getPattern - Returns the Regex's pattern
    • MongoDB\BSON\Regex::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Regex::serialize - Serialize a Regex
    • MongoDB\BSON\Regex::unserialize - Unserialize a Regex
    • MongoDB\BSON\Regex::__construct - Construct a new Regex
    • MongoDB\BSON\Regex::__toString - Returns the string representation of this Regex
    • MongoDB\BSON\RegexInterface::getFlags - Returns the RegexInterface's flags
    • MongoDB\BSON\RegexInterface::getPattern - Returns the RegexInterface's pattern
    • MongoDB\BSON\RegexInterface::__toString - Returns the string representation of this RegexInterface
    • MongoDB\BSON\Serializable::bsonSerialize - Provides an array or document to serialize as BSON
    • MongoDB\BSON\Symbol::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Symbol::serialize - Serialize a Symbol
    • MongoDB\BSON\Symbol::unserialize - Unserialize a Symbol
    • MongoDB\BSON\Symbol::__construct - Construct a new Symbol (unused)
    • MongoDB\BSON\Symbol::__toString - Returns the Symbol as a string
    • MongoDB\BSON\Timestamp::getIncrement - Returns the increment component of this Timestamp
    • MongoDB\BSON\Timestamp::getTimestamp - Returns the timestamp component of this Timestamp
    • MongoDB\BSON\Timestamp::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Timestamp::serialize - Serialize a Timestamp
    • MongoDB\BSON\Timestamp::unserialize - Unserialize a Timestamp
    • MongoDB\BSON\Timestamp::__construct - Construct a new Timestamp
    • MongoDB\BSON\Timestamp::__toString - Returns the string representation of this Timestamp
    • MongoDB\BSON\TimestampInterface::getIncrement - Returns the increment component of this TimestampInterface
    • MongoDB\BSON\TimestampInterface::getTimestamp - Returns the timestamp component of this TimestampInterface
    • MongoDB\BSON\TimestampInterface::__toString - Returns the string representation of this TimestampInterface
    • MongoDB\BSON\toCanonicalExtendedJSON - Returns the Canonical Extended JSON representation of a BSON value
    • MongoDB\BSON\toJSON - Returns the Legacy Extended JSON representation of a BSON value
    • MongoDB\BSON\toPHP - Returns the PHP representation of a BSON value
    • MongoDB\BSON\toRelaxedExtendedJSON - Returns the Relaxed Extended JSON representation of a BSON value
    • MongoDB\BSON\Undefined::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\Undefined::serialize - Serialize a Undefined
    • MongoDB\BSON\Undefined::unserialize - Unserialize a Undefined
    • MongoDB\BSON\Undefined::__construct - Construct a new Undefined (unused)
    • MongoDB\BSON\Undefined::__toString - Returns an empty string
    • MongoDB\BSON\Unserializable::bsonUnserialize - Constructs the object from a BSON array or document
    • MongoDB\BSON\UTCDateTime::jsonSerialize - Returns a representation that can be converted to JSON
    • MongoDB\BSON\UTCDateTime::serialize - Serialize a UTCDateTime
    • MongoDB\BSON\UTCDateTime::toDateTime - Returns the DateTime representation of this UTCDateTime
    • MongoDB\BSON\UTCDateTime::toDateTimeImmutable - Returns the DateTimeImmutable representation of this UTCDateTime
    • MongoDB\BSON\UTCDateTime::unserialize - Unserialize a UTCDateTime
    • MongoDB\BSON\UTCDateTime::__construct - Construct a new UTCDateTime
    • MongoDB\BSON\UTCDateTime::__toString - Returns the string representation of this UTCDateTime
    • MongoDB\BSON\UTCDateTimeInterface::toDateTime - Returns the DateTime representation of this UTCDateTimeInterface
    • MongoDB\BSON\UTCDateTimeInterface::__toString - Returns the string representation of this UTCDateTimeInterface
    • MongoDB\Driver\BulkWrite::count - Count number of write operations in the bulk
    • MongoDB\Driver\BulkWrite::delete - Add a delete operation to the bulk
    • MongoDB\Driver\BulkWrite::insert - Add an insert operation to the bulk
    • MongoDB\Driver\BulkWrite::update - Add an update operation to the bulk
    • MongoDB\Driver\BulkWrite::__construct - Create a new BulkWrite
    • MongoDB\Driver\ClientEncryption::addKeyAltName - Adds an alternate name to a key document
    • MongoDB\Driver\ClientEncryption::createDataKey - Creates a key document
    • MongoDB\Driver\ClientEncryption::decrypt - Decrypt a value
    • MongoDB\Driver\ClientEncryption::deleteKey - Deletes a key document
    • MongoDB\Driver\ClientEncryption::encrypt - Encrypt a value
    • MongoDB\Driver\ClientEncryption::encryptExpression - Encrypts a match or aggregate expression
    • MongoDB\Driver\ClientEncryption::getKey - Gets a key document
    • MongoDB\Driver\ClientEncryption::getKeyByAltName - Gets a key document by an alternate name
    • MongoDB\Driver\ClientEncryption::getKeys - Gets all key documents
    • MongoDB\Driver\ClientEncryption::removeKeyAltName - Removes an alternate name from a key document
    • MongoDB\Driver\ClientEncryption::rewrapManyDataKey - Rewraps data keys
    • MongoDB\Driver\ClientEncryption::__construct - Create a new ClientEncryption object
    • MongoDB\Driver\Command::__construct - Create a new Command
    • MongoDB\Driver\Cursor::current - Returns the current element
    • MongoDB\Driver\Cursor::getId - Returns the ID for this cursor
    • MongoDB\Driver\Cursor::getServer - Returns the server associated with this cursor
    • MongoDB\Driver\Cursor::isDead - Checks if the cursor is exhausted or may have additional results
    • MongoDB\Driver\Cursor::key - Returns the current result's index within the cursor
    • MongoDB\Driver\Cursor::next - Advances the cursor to the next result
    • MongoDB\Driver\Cursor::rewind - Rewind the cursor to the first result
    • MongoDB\Driver\Cursor::setTypeMap - Sets a type map to use for BSON unserialization
    • MongoDB\Driver\Cursor::toArray - Returns an array containing all results for this cursor
    • MongoDB\Driver\Cursor::valid - Checks if the current position in the cursor is valid
    • MongoDB\Driver\Cursor::__construct - Create a new Cursor (not used)
    • MongoDB\Driver\CursorId::serialize - Serialize a CursorId
    • MongoDB\Driver\CursorId::unserialize - Unserialize a CursorId
    • MongoDB\Driver\CursorId::__construct - Create a new CursorId (not used)
    • MongoDB\Driver\CursorId::__toString - String representation of the cursor ID
    • MongoDB\Driver\CursorInterface::getId - Returns the ID for this cursor
    • MongoDB\Driver\CursorInterface::getServer - Returns the server associated with this cursor
    • MongoDB\Driver\CursorInterface::isDead - Checks if the cursor may have additional results
    • MongoDB\Driver\CursorInterface::setTypeMap - Sets a type map to use for BSON unserialization
    • MongoDB\Driver\CursorInterface::toArray - Returns an array containing all results for this cursor
    • MongoDB\Driver\Exception\CommandException::getResultDocument - Returns the result document for the failed command
    • MongoDB\Driver\Exception\RuntimeException::hasErrorLabel - Returns whether an error label is associated with an exception
    • MongoDB\Driver\Exception\WriteException::getWriteResult - Returns the WriteResult for the failed write operation
    • MongoDB\Driver\Manager::addSubscriber - Registers a monitoring event subscriber with this Manager
    • MongoDB\Driver\Manager::createClientEncryption - Create a new ClientEncryption object
    • MongoDB\Driver\Manager::executeBulkWrite - Execute one or more write operations
    • MongoDB\Driver\Manager::executeCommand - Execute a database command
    • MongoDB\Driver\Manager::executeQuery - Execute a database query
    • MongoDB\Driver\Manager::executeReadCommand - Execute a database command that reads
    • MongoDB\Driver\Manager::executeReadWriteCommand - Execute a database command that reads and writes
    • MongoDB\Driver\Manager::executeWriteCommand - Execute a database command that writes
    • MongoDB\Driver\Manager::getEncryptedFieldsMap - Return the encryptedFieldsMap auto encryption option for the Manager
    • MongoDB\Driver\Manager::getReadConcern - Return the ReadConcern for the Manager
    • MongoDB\Driver\Manager::getReadPreference - Return the ReadPreference for the Manager
    • MongoDB\Driver\Manager::getServers - Return the servers to which this manager is connected
    • MongoDB\Driver\Manager::getWriteConcern - Return the WriteConcern for the Manager
    • MongoDB\Driver\Manager::removeSubscriber - Unregisters a monitoring event subscriber with this Manager
    • MongoDB\Driver\Manager::selectServer - Select a server matching a read preference
    • MongoDB\Driver\Manager::startSession - Start a new client session for use with this client
    • MongoDB\Driver\Manager::__construct - Create new MongoDB Manager
    • MongoDB\Driver\Monitoring\addSubscriber - Registers a monitoring event subscriber globally
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getCommandName - Returns the command name
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getDatabaseName - Returns the database on which the command was executed
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getDurationMicros - Returns the command's duration in microseconds
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getError - Returns the Exception associated with the failed command
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getOperationId - Returns the command's operation ID
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getReply - Returns the command reply document
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getRequestId - Returns the command's request ID
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getServer - Returns the Server on which the command was executed
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getServerConnectionId - Returns the server connection ID for the command
    • MongoDB\Driver\Monitoring\CommandFailedEvent::getServiceId - Returns the load balancer service ID for the command
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getCommand - Returns the command document
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getCommandName - Returns the command name
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getDatabaseName - Returns the database on which the command was executed
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getOperationId - Returns the command's operation ID
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getRequestId - Returns the command's request ID
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getServer - Returns the Server on which the command was executed
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getServerConnectionId - Returns the server connection ID for the command
    • MongoDB\Driver\Monitoring\CommandStartedEvent::getServiceId - Returns the load balancer service ID for the command
    • MongoDB\Driver\Monitoring\CommandSubscriber::commandFailed - Notification method for a failed command
    • MongoDB\Driver\Monitoring\CommandSubscriber::commandStarted - Notification method for a started command
    • MongoDB\Driver\Monitoring\CommandSubscriber::commandSucceeded - Notification method for a successful command
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getCommandName - Returns the command name
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getDatabaseName - Returns the database on which the command was executed
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getDurationMicros - Returns the command's duration in microseconds
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getOperationId - Returns the command's operation ID
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getReply - Returns the command reply document
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getRequestId - Returns the command's request ID
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getServer - Returns the Server on which the command was executed
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getServerConnectionId - Returns the server connection ID for the command
    • MongoDB\Driver\Monitoring\CommandSucceededEvent::getServiceId - Returns the load balancer service ID for the command
    • MongoDB\Driver\Monitoring\LogSubscriber::log - Notification method for a log message
    • MongoDB\Driver\Monitoring\removeSubscriber - Unregisters a monitoring event subscriber globally
    • MongoDB\Driver\Monitoring\SDAMSubscriber::serverChanged - Notification method for a server description change
    • MongoDB\Driver\Monitoring\SDAMSubscriber::serverClosed - Notification method for closing a server
    • MongoDB\Driver\Monitoring\SDAMSubscriber::serverHeartbeatFailed - Notification method for a failed server heartbeat
    • MongoDB\Driver\Monitoring\SDAMSubscriber::serverHeartbeatStarted - Notification method for a started server heartbeat
    • MongoDB\Driver\Monitoring\SDAMSubscriber::serverHeartbeatSucceeded - Notification method for a successful server heartbeat
    • MongoDB\Driver\Monitoring\SDAMSubscriber::serverOpening - Notification method for opening a server
    • MongoDB\Driver\Monitoring\SDAMSubscriber::topologyChanged - Notification method for a topology description change
    • MongoDB\Driver\Monitoring\SDAMSubscriber::topologyClosed - Notification method for closing the topology
    • MongoDB\Driver\Monitoring\SDAMSubscriber::topologyOpening - Notification method for opening the topology
    • MongoDB\Driver\Monitoring\ServerChangedEvent::getHost - Returns the hostname of the server
    • MongoDB\Driver\Monitoring\ServerChangedEvent::getNewDescription - Returns the new description for the server
    • MongoDB\Driver\Monitoring\ServerChangedEvent::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\Monitoring\ServerChangedEvent::getPreviousDescription - Returns the previous description for the server
    • MongoDB\Driver\Monitoring\ServerChangedEvent::getTopologyId - Returns the topology ID associated with this server
    • MongoDB\Driver\Monitoring\ServerClosedEvent::getHost - Returns the hostname of the server
    • MongoDB\Driver\Monitoring\ServerClosedEvent::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\Monitoring\ServerClosedEvent::getTopologyId - Returns the topology ID associated with this server
    • MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent::getDurationMicros - Returns the heartbeat's duration in microseconds
    • MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent::getError - Returns the Exception associated with the failed heartbeat
    • MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent::getHost - Returns the hostname of the server
    • MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent::isAwaited - Returns whether the heartbeat used a streaming protocol
    • MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent::getHost - Returns the hostname of the server
    • MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent::isAwaited - Returns whether the heartbeat used a streaming protocol
    • MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent::getDurationMicros - Returns the heartbeat's duration in microseconds
    • MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent::getHost - Returns the hostname of the server
    • MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent::getReply - Returns the heartbeat reply document
    • MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent::isAwaited - Returns whether the heartbeat used a streaming protocol
    • MongoDB\Driver\Monitoring\ServerOpeningEvent::getHost - Returns the hostname of the server
    • MongoDB\Driver\Monitoring\ServerOpeningEvent::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\Monitoring\ServerOpeningEvent::getTopologyId - Returns the topology ID associated with this server
    • MongoDB\Driver\Monitoring\TopologyChangedEvent::getNewDescription - Returns the new description for the topology
    • MongoDB\Driver\Monitoring\TopologyChangedEvent::getPreviousDescription - Returns the previous description for the topology
    • MongoDB\Driver\Monitoring\TopologyChangedEvent::getTopologyId - Returns the topology ID
    • MongoDB\Driver\Monitoring\TopologyClosedEvent::getTopologyId - Returns the topology ID
    • MongoDB\Driver\Monitoring\TopologyOpeningEvent::getTopologyId - Returns the topology ID
    • MongoDB\Driver\Query::__construct - Create a new Query
    • MongoDB\Driver\ReadConcern::bsonSerialize - Returns an object for BSON serialization
    • MongoDB\Driver\ReadConcern::getLevel - Returns the ReadConcern's "level" option
    • MongoDB\Driver\ReadConcern::isDefault - Checks if this is the default read concern
    • MongoDB\Driver\ReadConcern::serialize - Serialize a ReadConcern
    • MongoDB\Driver\ReadConcern::unserialize - Unserialize a ReadConcern
    • MongoDB\Driver\ReadConcern::__construct - Create a new ReadConcern
    • MongoDB\Driver\ReadPreference::bsonSerialize - Returns an object for BSON serialization
    • MongoDB\Driver\ReadPreference::getHedge - Returns the ReadPreference's "hedge" option
    • MongoDB\Driver\ReadPreference::getMaxStalenessSeconds - Returns the ReadPreference's "maxStalenessSeconds" option
    • MongoDB\Driver\ReadPreference::getMode - Returns the ReadPreference's "mode" option
    • MongoDB\Driver\ReadPreference::getModeString - Returns the ReadPreference's "mode" option as a string
    • MongoDB\Driver\ReadPreference::getTagSets - Returns the ReadPreference's "tagSets" option
    • MongoDB\Driver\ReadPreference::serialize - Serialize a ReadPreference
    • MongoDB\Driver\ReadPreference::unserialize - Unserialize a ReadPreference
    • MongoDB\Driver\ReadPreference::__construct - Create a new ReadPreference
    • MongoDB\Driver\Server::executeBulkWrite - Execute one or more write operations on this server
    • MongoDB\Driver\Server::executeCommand - Execute a database command on this server
    • MongoDB\Driver\Server::executeQuery - Execute a database query on this server
    • MongoDB\Driver\Server::executeReadCommand - Execute a database command that reads on this server
    • MongoDB\Driver\Server::executeReadWriteCommand - Execute a database command that reads and writes on this server
    • MongoDB\Driver\Server::executeWriteCommand - Execute a database command that writes on this server
    • MongoDB\Driver\Server::getHost - Returns the hostname of this server
    • MongoDB\Driver\Server::getInfo - Returns an array of information describing this server
    • MongoDB\Driver\Server::getLatency - Returns the latency of this server in milliseconds
    • MongoDB\Driver\Server::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\Server::getServerDescription - Returns a ServerDescription for this server
    • MongoDB\Driver\Server::getTags - Returns an array of tags describing this server in a replica set
    • MongoDB\Driver\Server::getType - Returns an integer denoting the type of this server
    • MongoDB\Driver\Server::isArbiter - Checks if this server is an arbiter member of a replica set
    • MongoDB\Driver\Server::isHidden - Checks if this server is a hidden member of a replica set
    • MongoDB\Driver\Server::isPassive - Checks if this server is a passive member of a replica set
    • MongoDB\Driver\Server::isPrimary - Checks if this server is a primary member of a replica set
    • MongoDB\Driver\Server::isSecondary - Checks if this server is a secondary member of a replica set
    • MongoDB\Driver\Server::__construct - Create a new Server (not used)
    • MongoDB\Driver\ServerApi::bsonSerialize - Returns an object for BSON serialization
    • MongoDB\Driver\ServerApi::serialize - Serialize a ServerApi
    • MongoDB\Driver\ServerApi::unserialize - Unserialize a ServerApi
    • MongoDB\Driver\ServerApi::__construct - Create a new ServerApi instance
    • MongoDB\Driver\ServerDescription::getHelloResponse - Returns the server's most recent "hello" response
    • MongoDB\Driver\ServerDescription::getHost - Returns the hostname of this server
    • MongoDB\Driver\ServerDescription::getLastUpdateTime - Returns the server's last update time in microseconds
    • MongoDB\Driver\ServerDescription::getPort - Returns the port on which this server is listening
    • MongoDB\Driver\ServerDescription::getRoundTripTime - Returns the server's round trip time in milliseconds
    • MongoDB\Driver\ServerDescription::getType - Returns a string denoting the type of this server
    • MongoDB\Driver\Session::abortTransaction - Aborts a transaction
    • MongoDB\Driver\Session::advanceClusterTime - Advances the cluster time for this session
    • MongoDB\Driver\Session::advanceOperationTime - Advances the operation time for this session
    • MongoDB\Driver\Session::commitTransaction - Commits a transaction
    • MongoDB\Driver\Session::endSession - Terminates a session
    • MongoDB\Driver\Session::getClusterTime - Returns the cluster time for this session
    • MongoDB\Driver\Session::getLogicalSessionId - Returns the logical session ID for this session
    • MongoDB\Driver\Session::getOperationTime - Returns the operation time for this session
    • MongoDB\Driver\Session::getServer - Returns the server to which this session is pinned
    • MongoDB\Driver\Session::getTransactionOptions - Returns options for the currently running transaction
    • MongoDB\Driver\Session::getTransactionState - Returns the current transaction state for this session
    • MongoDB\Driver\Session::isDirty - Returns whether the session has been marked as dirty
    • MongoDB\Driver\Session::isInTransaction - Returns whether a multi-document transaction is in progress
    • MongoDB\Driver\Session::startTransaction - Starts a transaction
    • MongoDB\Driver\Session::__construct - Create a new Session (not used)
    • MongoDB\Driver\TopologyDescription::getServers - Returns the servers in the topology
    • MongoDB\Driver\TopologyDescription::getType - Returns a string denoting the type of this topology
    • MongoDB\Driver\TopologyDescription::hasReadableServer - Returns whether the topology has a readable server
    • MongoDB\Driver\TopologyDescription::hasWritableServer - Returns whether the topology has a writable server
    • MongoDB\Driver\WriteConcern::bsonSerialize - Returns an object for BSON serialization
    • MongoDB\Driver\WriteConcern::getJournal - Returns the WriteConcern's "journal" option
    • MongoDB\Driver\WriteConcern::getW - Returns the WriteConcern's "w" option
    • MongoDB\Driver\WriteConcern::getWtimeout - Returns the WriteConcern's "wtimeout" option
    • MongoDB\Driver\WriteConcern::isDefault - Checks if this is the default write concern
    • MongoDB\Driver\WriteConcern::serialize - Serialize a WriteConcern
    • MongoDB\Driver\WriteConcern::unserialize - Unserialize a WriteConcern
    • MongoDB\Driver\WriteConcern::__construct - Create a new WriteConcern
    • MongoDB\Driver\WriteConcernError::getCode - Returns the WriteConcernError's error code
    • MongoDB\Driver\WriteConcernError::getInfo - Returns metadata document for the WriteConcernError
    • MongoDB\Driver\WriteConcernError::getMessage - Returns the WriteConcernError's error message
    • MongoDB\Driver\WriteError::getCode - Returns the WriteError's error code
    • MongoDB\Driver\WriteError::getIndex - Returns the index of the write operation corresponding to this WriteError
    • MongoDB\Driver\WriteError::getInfo - Returns metadata document for the WriteError
    • MongoDB\Driver\WriteError::getMessage - Returns the WriteError's error message
    • MongoDB\Driver\WriteResult::getDeletedCount - Returns the number of documents deleted
    • MongoDB\Driver\WriteResult::getInsertedCount - Returns the number of documents inserted (excluding upserts)
    • MongoDB\Driver\WriteResult::getMatchedCount - Returns the number of documents selected for update
    • MongoDB\Driver\WriteResult::getModifiedCount - Returns the number of existing documents updated
    • MongoDB\Driver\WriteResult::getServer - Returns the server associated with this write result
    • MongoDB\Driver\WriteResult::getUpsertedCount - Returns the number of documents inserted by an upsert
    • MongoDB\Driver\WriteResult::getUpsertedIds - Returns an array of identifiers for upserted documents
    • MongoDB\Driver\WriteResult::getWriteConcernError - Returns any write concern error that occurred
    • MongoDB\Driver\WriteResult::getWriteErrors - Returns any write errors that occurred
    • MongoDB\Driver\WriteResult::isAcknowledged - Returns whether the write was acknowledged
    • move_uploaded_file - アップロードされたファイルを新しい位置に移動する
    • mqseries_back - MQSeries MQBACK
    • mqseries_begin - MQseries MQBEGIN
    • mqseries_close - MQSeries MQCLOSE
    • mqseries_cmit - MQSeries MQCMIT
    • mqseries_conn - MQSeries MQCONN
    • mqseries_connx - MQSeries MQCONNX
    • mqseries_disc - MQSeries MQDISC
    • mqseries_get - MQSeries MQGET
    • mqseries_inq - MQSeries MQINQ
    • mqseries_open - MQSeries MQOPEN
    • mqseries_put - MQSeries MQPUT
    • mqseries_put1 - MQSeries MQPUT1
    • mqseries_set - MQSeries MQSET
    • mqseries_strerror - 結果コード (MQRC) に対応するエラーメッセージを返す
    • msg_get_queue - メッセージキューを作成またはそれにアタッチする
    • msg_queue_exists - メッセージキューが存在するかどうかを調べる
    • msg_receive - メッセージキューからメッセージを受信する
    • msg_remove_queue - メッセージキューを破棄する
    • msg_send - メッセージキューにメッセージを送信する
    • msg_set_queue - メッセージキューデータ構造体の情報を設定する
    • msg_stat_queue - メッセージキューデータ構造体の情報を返す
    • mt_getrandmax - 乱数値の最大値を表示する
    • mt_rand - メルセンヌ・ツイスター乱数生成器を介して乱数値を生成する
    • mt_srand - メルセンヌ・ツイスター乱数生成器にシードを指定する
    • MultipleIterator::attachIterator - イテレータの情報をアタッチする
    • MultipleIterator::containsIterator - イテレータがアタッチされているかどうかを調べる
    • MultipleIterator::countIterators - アタッチされているイテレータインスタンスの数を取得する
    • MultipleIterator::current - 登録されているイテレータインスタンスを取得する
    • MultipleIterator::detachIterator - イテレータをデタッチする
    • MultipleIterator::getFlags - フラグの情報を取得する
    • MultipleIterator::key - 登録されているイテレータインスタンスを取得する
    • MultipleIterator::next - アタッチしているすべてのイテレータインスタンスを次に移動させる
    • MultipleIterator::rewind - アタッチしているすべてのイテレータインスタンスを巻き戻す
    • MultipleIterator::setFlags - フラグを設定する
    • MultipleIterator::valid - サブイテレータの有効性を調べる
    • MultipleIterator::__construct - 新しい MultipleIterator を作成する
    • mysqli::$affected_rows - 直前の MySQL の操作で変更された行の数を得る
    • mysqli::$client_info - MySQL クライアント情報を取得する
    • mysqli::$client_version - MySQL クライアントのバージョンを整数値で返す
    • mysqli::$connect_errno - 直近の接続コールに関するエラーコードを返す
    • mysqli::$connect_error - 直近の接続エラーの説明を返す
    • mysqli::$errno - 直近の関数コールによるエラーコードを返す
    • mysqli::$error - 直近のエラーの内容を文字列で返す
    • mysqli::$error_list - 直近で実行したコマンドからのエラーの一覧を返す
    • mysqli::$field_count - 直近のクエリのカラムの数を返す
    • mysqli::$host_info - 使用している接続の型を文字列で返す
    • mysqli::$info - 直近に実行されたクエリの情報を取得する
    • mysqli::$insert_id - 直近のクエリの AUTO_INCREMENT カラムで生成した値を返す
    • mysqli::$protocol_version - 使用している MySQL プロトコルのバージョンを返す
    • mysqli::$server_info - MySQL サーバーのバージョンを返す
    • mysqli::$server_version - MySQL サーバーのバージョンを整数値で返す
    • mysqli::$sqlstate - 直前の MySQL の操作での SQLSTATE エラーを返す
    • mysqli::$thread_id - 現在の接続のスレッド ID を返す
    • mysqli::$warning_count - 指定した接続の直近のクエリから発生した警告の数を返す
    • mysqli::autocommit - データベース更新の自動コミットをオンまたはオフにする
    • mysqli::begin_transaction - トランザクションを開始する
    • mysqli::change_user - 指定されたデータベース接続のユーザー名を変更する
    • mysqli::character_set_name - データベース接続の現在の文字コードセットを返す
    • mysqli::close - 事前にオープンしているデータベース接続を閉じる
    • mysqli::commit - 現在のトランザクションをコミットする
    • mysqli::debug - デバッグ操作を行う
    • mysqli::dump_debug_info - デバッグ情報をログに出力する
    • mysqli::escape_string - mysqli_real_escape_string のエイリアス
    • mysqli::execute_query - SQL文を準備し、変数をバインドし、実行する
    • mysqli::get_charset - 文字セットオブジェクトを返す
    • mysqli::get_connection_stats - クライアント接続に関する統計情報を返す
    • mysqli::get_warnings - SHOW WARNINGS の結果を取得する
    • mysqli::init - MySQLi を初期化し、mysqli_real_connect() で使うオブジェクトを返す
    • mysqli::kill - サーバーに MySQL スレッドの停止を問い合わせる
    • mysqli::more_results - マルチクエリからの結果がまだ残っているかどうかを調べる
    • mysqli::multi_query - データベース上でひとつ以上のクエリを実行する
    • mysqli::next_result - multi_query の、次の結果を準備する
    • mysqli::options - オプションを設定する
    • mysqli::ping - サーバーとの接続をチェックし、もし切断されている場合は再接続を試みる
    • mysqli::poll - 接続を問い合わせる
    • mysqli::prepare - 実行するための SQL文 を準備する
    • mysqli::query - データベース上でクエリを実行する
    • mysqli::real_connect - mysql サーバーとの接続をオープンする
    • mysqli::real_escape_string - 接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープする
    • mysqli::real_query - SQL クエリを実行する
    • mysqli::reap_async_query - 非同期クエリから結果を取得する
    • mysqli::refresh - リフレッシュする
    • mysqli::release_savepoint - 現在のトランザクションのセーブポイント群から、指定した名前のセーブポイントを削除する
    • mysqli::rollback - 現在のトランザクションをロールバックする
    • mysqli::savepoint - トランザクションのセーブポイントを設定する
    • mysqli::select_db - クエリを実行するためのデフォルトのデータベースを選択する
    • mysqli::set_charset - クライアントの文字セットを設定する
    • mysqli::set_opt - mysqli_options のエイリアス
    • mysqli::ssl_set - SSL を使用したセキュアな接続を確立する
    • mysqli::stat - 現在のシステム状態を取得する
    • mysqli::stmt_init - ステートメントを初期化し、mysqli_stmt_prepare で使用するオブジェクトを返す
    • mysqli::store_result - 直近のクエリから結果セットを転送する
    • mysqli::thread_safe - スレッドセーフであるかどうかを返す
    • mysqli::use_result - 結果セットの取得を開始する
    • mysqli::__construct - 新規に MySQL サーバーへの接続をオープンする
    • mysqli_connect - mysqli::__construct のエイリアス
    • mysqli_driver::$report_mode - mysqli のエラー報告モードを設定する
    • mysqli_driver::embedded_server_end - 組み込みサーバーを停止する
    • mysqli_driver::embedded_server_start - 組み込みサーバーを初期化して開始する
    • mysqli_execute - mysqli_stmt_execute のエイリアス
    • mysqli_get_client_stats - プロセスごとのクライアントの統計を返す
    • mysqli_get_links_stats - オープン済みとキャッシュ済みのリンクに関する情報を返す
    • mysqli_report - mysqli_driver->report_mode のエイリアス
    • mysqli_result::$current_field - 結果ポインタにおける現在のフィールドオフセットを取得する
    • mysqli_result::$field_count - 結果セットのフィールド数を取得する
    • mysqli_result::$lengths - 結果セットにおける現在の行のカラムの長さを返す
    • mysqli_result::$num_rows - 結果セットの行数を取得する
    • mysqli_result::data_seek - 結果の任意の行にポインタを移動する
    • mysqli_result::fetch_all - 結果のすべての行を連想配列・数値添字配列あるいはその両方の形式で取得する
    • mysqli_result::fetch_array - 結果セットの次の行を連想配列・数値添字配列あるいはその両方の形式で取得する
    • mysqli_result::fetch_assoc - 結果セットの次の行を連想配列で取得する
    • mysqli_result::fetch_column - 結果セットの次の行から、単一のカラムの値を取得する
    • mysqli_result::fetch_field - 結果セットの次のフィールドを返す
    • mysqli_result::fetch_fields - 結果セットのフィールド情報をオブジェクトの配列で返す
    • mysqli_result::fetch_field_direct - 単一のフィールドのメタデータを取得する
    • mysqli_result::fetch_object - 結果セットの次の行を取得し、オブジェクトとして返す
    • mysqli_result::fetch_row - 結果セットの次の行を数値添字配列で取得する
    • mysqli_result::field_seek - 結果ポインタを、指定したフィールドオフセットに設定する
    • mysqli_result::free - 結果に関連付けられたメモリを開放する
    • mysqli_result::getIterator - 外部イテレータを取得する
    • mysqli_result::__construct - mysqli_result オブジェクトを構築する
    • mysqli_sql_exception::getSqlState - SQLSTATE エラーコードを含む情報を返す
    • mysqli_stmt::$affected_rows - 直近に実行されたステートメントで変更・削除・追加、あるいは選択された行の総数を返す
    • mysqli_stmt::$errno - 直近のステートメントのコールに関するエラーコードを返す
    • mysqli_stmt::$error - 直近のステートメントのエラー内容を文字列で返す
    • mysqli_stmt::$error_list - 直近で実行したステートメントからのエラーの一覧を返す
    • mysqli_stmt::$field_count - 指定したステートメントのカラム数を返す
    • mysqli_stmt::$insert_id - 直近の INSERT 操作で生成した ID を取得する
    • mysqli_stmt::$num_rows - サーバーから取得した結果セットの行数を返す
    • mysqli_stmt::$param_count - 指定したステートメントのパラメータ数を返す
    • mysqli_stmt::$sqlstate - 直前のステートメントの操作での SQLSTATE エラーを返す
    • mysqli_stmt::attr_get - ステートメントの属性の現在の値を取得する
    • mysqli_stmt::attr_set - プリペアドステートメントの振る舞いを変更する
    • mysqli_stmt::bind_param - プリペアドステートメントのパラメータに変数をバインドする
    • mysqli_stmt::bind_result - 結果を保存するため、プリペアドステートメントに変数をバインドする
    • mysqli_stmt::close - プリペアドステートメントを閉じる
    • mysqli_stmt::data_seek - バッファリングされた結果中の、任意の行にポインタを移動する
    • mysqli_stmt::execute - プリペアドステートメントを実行する
    • mysqli_stmt::fetch - プリペアドステートメントから結果を取得し、バインド変数に格納する
    • mysqli_stmt::free_result - 指定したステートメントハンドルの結果を格納したメモリを開放する
    • mysqli_stmt::get_result - プリペアドステートメントから結果を mysqli_result オブジェクトとして取得する
    • mysqli_stmt::get_warnings - SHOW WARNINGS の結果を取得する
    • mysqli_stmt::more_results - 複数クエリで、次の結果が存在するかどうかを調べる
    • mysqli_stmt::next_result - 複数クエリから、次の結果を読み込む
    • mysqli_stmt::prepare - SQL ステートメントを実行するために準備する
    • mysqli_stmt::reset - プリペアドステートメントをリセットする
    • mysqli_stmt::result_metadata - プリペアドステートメントから結果セットのメタデータを返す
    • mysqli_stmt::send_long_data - データをブロックで送信する
    • mysqli_stmt::store_result - 内部バッファに結果を保存する
    • mysqli_stmt::__construct - 新しい mysqli_stmt オブジェクトを構築する
    • mysqli_warning::next - 次の警告を取得する
    • mysqli_warning::__construct - インスタンス化を禁止するための private なコンストラクタ
    • mysql_affected_rows - 一番最近の操作で変更された行の数を得る
    • mysql_client_encoding - 文字セット名を返す
    • mysql_close - MySQL 接続を閉じる
    • mysql_connect - MySQL サーバーへの接続をオープンする
    • mysql_create_db - MySQL データベースを作成する
    • mysql_data_seek - 内部的な結果ポインタを移動する
    • mysql_db_name - mysql_list_dbs のコール結果からデータベース名を取得する
    • mysql_db_query - データベースを選択し、そこでクエリーを実行する
    • mysql_drop_db - MySQLデータベースを破棄(削除)する
    • mysql_errno - 直近の MySQL 処理からエラーメッセージのエラー番号を返す
    • mysql_error - 直近に実行された MySQL 操作のエラーメッセージを返す
    • mysql_escape_string - mysql_query で使用するために文字列をエスケープする
    • mysql_fetch_array - 連想配列、添字配列、またはその両方として結果の行を取得する
    • mysql_fetch_assoc - 連想配列として結果の行を取得する
    • mysql_fetch_field - 結果からカラム情報を取得し、オブジェクトとして返す
    • mysql_fetch_lengths - 結果における各出力の長さを得る
    • mysql_fetch_object - 結果の行をオブジェクトとして取得する
    • mysql_fetch_row - 結果を添字配列として取得する
    • mysql_field_flags - 結果において指定したフィールドのフラグを取得する
    • mysql_field_len - 指定したフィールドの長さを返す
    • mysql_field_name - 結果において指定したフィールド名を取得する
    • mysql_field_seek - 結果ポインタを指定したフィールドオフセットにセットする
    • mysql_field_table - 指定したフィールドが含まれるテーブルの名前を取得する
    • mysql_field_type - 結果において指定したフィールドの型を取得する
    • mysql_free_result - 結果保持用メモリを開放する
    • mysql_get_client_info - MySQL クライアント情報を取得する
    • mysql_get_host_info - MySQL ホスト情報を取得する
    • mysql_get_proto_info - MySQL プロトコル情報を取得する
    • mysql_get_server_info - MySQL サーバー情報を取得する
    • mysql_info - 直近のクエリについての情報を得る
    • mysql_insert_id - 直近のクエリで生成された ID を得る
    • mysql_list_dbs - MySQL サーバー上で利用可能なデータベースのリストを得る
    • mysql_list_fields - MySQL テーブルのフィールドのリストを得る
    • mysql_list_processes - MySQL プロセスのリストを得る
    • mysql_list_tables - MySQL データベース上のテーブルのリストを得る
    • mysql_num_fields - 結果におけるフィールドの数を得る
    • mysql_num_rows - 結果における行の数を得る
    • mysql_pconnect - MySQL サーバーへの持続的な接続をオープンする
    • mysql_ping - サーバーとの接続状況を調べ、接続されていない場合は再接続する
    • mysql_query - MySQL クエリを送信する
    • mysql_real_escape_string - SQL 文中で用いる文字列の特殊文字をエスケープする
    • mysql_result - 結果データを得る
    • mysql_select_db - MySQL データベースを選択する
    • mysql_set_charset - クライアントの文字セットを設定する
    • mysql_stat - 現在のシステムの状態を取得する
    • mysql_tablename - フィールドのテーブル名を得る
    • mysql_thread_id - カレントのスレッド ID を返す
    • mysql_unbuffered_query - MySQL に SQL クエリを送信するが、結果に対してのフェッチやバッファリングは行わない
    • mysql_xdevapi\Client::close - クライアントの接続を閉じる
  • n
    • natcasesort - 大文字小文字を区別しない"自然順"アルゴリズムを用いて配列をソートする
    • natsort - "自然順"アルゴリズムで配列をソートする
    • net_get_interfaces - ネットワークインターフェイスを取得する
    • next - 配列の内部ポインタを進める
    • ngettext - gettext の複数形版
    • nl2br - 改行文字の前に HTML の改行タグを挿入する
    • nl_langinfo - 言語およびロケール情報を検索する
    • NoRewindIterator::current - 現在の値を取得する
    • NoRewindIterator::key - 現在のキーを取得する
    • NoRewindIterator::next - 次の要素に移動する
    • NoRewindIterator::rewind - 内部イテレータの巻き戻し操作を阻止する
    • NoRewindIterator::valid - イテレータの有効性を検証する
    • NoRewindIterator::__construct - NoRewindIterator を作成する
    • Normalizer::getRawDecomposition - UTF-8 エンコードされているコードポイントから、Decomposition_Mapping プロパティの値を取得する
    • Normalizer::isNormalized - 渡された文字列が、指定した正規化を適用済みかどうかを調べる
    • Normalizer::normalize - 渡された入力を正規化し、正規化後の文字列を返す
    • NumberFormatter::create - 数値フォーマッタを作成する
    • NumberFormatter::format - 数値をフォーマットする
    • NumberFormatter::formatCurrency - 通貨の値をフォーマットする
    • NumberFormatter::getAttribute - 属性を取得する
    • NumberFormatter::getErrorCode - フォーマッタの直近のエラーコードを取得する
    • NumberFormatter::getErrorMessage - フォーマッタの直近のエラーメッセージを取得する
    • NumberFormatter::getLocale - フォーマッタのロケールを取得する
    • NumberFormatter::getPattern - フォーマッタのパターンを取得する
    • NumberFormatter::getSymbol - 記号を取得する
    • NumberFormatter::getTextAttribute - テキストの属性を取得する
    • NumberFormatter::parse - 数値をパースする
    • NumberFormatter::parseCurrency - 通貨をパースする
    • NumberFormatter::setAttribute - 属性を設定する
    • NumberFormatter::setPattern - フォーマッタのパターンを設定する
    • NumberFormatter::setSymbol - 記号の値を設定する
    • NumberFormatter::setTextAttribute - テキスト属性を設定する
    • number_format - 数字を千の位毎にグループ化してフォーマットする
  • o
    • OAuth::disableDebug - デバッグを無効にする
    • OAuth::disableRedirects - リダイレクトを無効にする
    • OAuth::disableSSLChecks - SSL チェックを無効にする
    • OAuth::enableDebug - デバッグを有効にする
    • OAuth::enableRedirects - リダイレクトを有効にする
    • OAuth::enableSSLChecks - SSL チェックを有効にする
    • OAuth::fetch - OAuth で保護されたリソースを取得する
    • OAuth::generateSignature - シグネチャを生成する
    • OAuth::getAccessToken - アクセストークンを取得する
    • OAuth::getCAPath - CA 情報を取得する
    • OAuth::getLastResponse - 直近のレスポンスを取得する
    • OAuth::getLastResponseHeaders - 最後のレスポンスのヘッダを取得する
    • OAuth::getLastResponseInfo - 直近のレスポンスの HTTP 情報を取得する
    • OAuth::getRequestHeader - OAuth ヘッダ文字列シグネチャを生成する
    • OAuth::getRequestToken - リクエストトークンを取得する
    • OAuth::setAuthType - 認証方式を設定する
    • OAuth::setCAPath - CA パスおよび情報を設定する
    • OAuth::setNonce - 続くリクエスト用のノンスを設定する
    • OAuth::setRequestEngine - setRequestEngine
    • OAuth::setRSACertificate - RSA 証明書を設定する
    • OAuth::setSSLChecks - リクエストに固有の SSL チェックを調整する
    • OAuth::setTimestamp - タイムスタンプを設定する
    • OAuth::setToken - トークンと secret を設定する
    • OAuth::setVersion - OAuth のバージョンを設定する
    • OAuth::__construct - 新しい OAuth オブジェクトを作成する
    • OAuth::__destruct - デストラクタ
    • OAuthProvider::addRequiredParameter - 必須パラメータを追加する
    • OAuthProvider::callconsumerHandler - consumerNonceHandler コールバックをコールする
    • OAuthProvider::callTimestampNonceHandler - timestampNonceHandler コールバックをコールする
    • OAuthProvider::calltokenHandler - tokenNonceHandler コールバックをコールする
    • OAuthProvider::checkOAuthRequest - oauth リクエストをチェックする
    • OAuthProvider::consumerHandler - consumerHandler コールバックを設定する
    • OAuthProvider::generateToken - ランダムなトークンを生成する
    • OAuthProvider::is2LeggedEndpoint - is2LeggedEndpoint
    • OAuthProvider::isRequestTokenEndpoint - isRequestTokenEndpoint を設定する
    • OAuthProvider::removeRequiredParameter - 必須パラメータを削除する
    • OAuthProvider::reportProblem - 問題を報告する
    • OAuthProvider::setParam - パラメータを設定する
    • OAuthProvider::setRequestTokenPath - リクエストトークンのパスを設定する
    • OAuthProvider::timestampNonceHandler - timestampNonceHandler コールバックを設定する
    • OAuthProvider::tokenHandler - tokenHandler コールバックを設定する
    • OAuthProvider::__construct - 新しい OAuthProvider オブジェクトを作る
    • oauth_get_sbs - SBSを生成する
    • oauth_urlencode - URI を RFC 3686 形式でエンコードする
    • ob_clean - アクティブな出力バッファの内容をクリア(消去)する
    • ob_end_clean - アクティブな出力用バッファをクリア(消去)し、出力のバッファリングをオフにする
    • ob_end_flush - アクティブな出力用バッファをフラッシュ(送信)し、アクティブな出力バッファをオフにする
    • ob_flush - アクティブな出力ハンドラの戻り値をフラッシュ(送信)する
    • ob_get_clean - アクティブな出力バッファの内容を取得し、そのバッファをオフにする
    • ob_get_contents - 出力用バッファの内容を返す
    • ob_get_flush - アクティブな出力ハンドラの戻り値をフラッシュ(送信)し、その内容を文字列として返した後で、それをオフにする
    • ob_get_length - 出力バッファの長さを返す
    • ob_get_level - 出力バッファリング機構のネストレベルを返す
    • ob_get_status - 出力バッファのステータスを取得する
    • ob_gzhandler - 出力バッファを gzip 圧縮するための ob_start コールバック関数
    • ob_iconv_handler - 出力バッファハンドラとして文字エンコーディングを変換する
    • ob_implicit_flush - 自動フラッシュをオンまたはオフにする
    • ob_list_handlers - 使用中の出力ハンドラの一覧を取得する
    • ob_start - 出力のバッファリングを有効にする
    • ob_tidyhandler - バッファを修正するための ob_start コールバック関数
    • ocibindbyname - oci_bind_by_name のエイリアス
    • ocicancel - oci_cancel のエイリアス
    • ocicloselob - OCILob::close のエイリアス
    • ocicollappend - のエイリアス OCICollection::append
    • ocicollassign - のエイリアス OCICollection::assign
    • ocicollassignelem - のエイリアス OCICollection::assignElem
    • OCICollection::append - コレクションに要素を追加する
    • OCICollection::assign - コレクションに他の存在するコレクションから値を割り当てる
    • OCICollection::assignElem - コレクションの要素に値を割り当てる
    • OCICollection::free - コレクションオブジェクトに関連付けられたリソースを解放する
    • OCICollection::getElem - 要素の値を返す
    • OCICollection::max - コレクション内の要素の最大数を取得する
    • OCICollection::size - コレクションのサイズを返す
    • OCICollection::trim - コレクションの最後から要素を切り取る
    • ocicollgetelem - のエイリアス OCICollection::getElem
    • ocicollmax - のエイリアス OCICollection::max
    • ocicollsize - のエイリアス OCICollection::size
    • ocicolltrim - のエイリアス OCICollection::trim
    • ocicolumnisnull - oci_field_is_null のエイリアス
    • ocicolumnname - oci_field_name のエイリアス
    • ocicolumnprecision - oci_field_precision のエイリアス
    • ocicolumnscale - oci_field_scale のエイリアス
    • ocicolumnsize - oci_field_size のエイリアス
    • ocicolumntype - oci_field_type のエイリアス
    • ocicolumntyperaw - oci_field_type_raw のエイリアス
    • ocicommit - oci_commit のエイリアス
    • ocidefinebyname - oci_define_by_name のエイリアス
    • ocierror - oci_error のエイリアス
    • ociexecute - oci_execute のエイリアス
    • ocifetch - oci_fetch のエイリアス
    • ocifetchinto - 廃止された関数。oci_fetch_array や oci_fetch_object、 oci_fetch_assoc、 oci_fetch_row の変種
    • ocifetchstatement - oci_fetch_all のエイリアス
    • ocifreecollection - のエイリアス OCICollection::free
    • ocifreecursor - oci_free_statement のエイリアス
    • ocifreedesc - OCILob::free のエイリアス
    • ocifreestatement - oci_free_statement のエイリアス
    • ociinternaldebug - oci_internal_debug のエイリアス
    • ociloadlob - OCILob::load のエイリアス
    • OCILob::append - ラージオブジェクトのデータを他のラージオブジェクトに追加する
    • OCILob::close - LOB ディスクリプタを閉じる
    • OCILob::eof - ラージオブジェクトのディスクリプタが EOF かどうかを調べる
    • OCILob::erase - 内部 LOB データの特定の位置を消去する
    • OCILob::export - LOB の内容をファイルに出力する
    • OCILob::flush - LOB のバッファをサーバーにフラッシュする、あるいは書き込む
    • OCILob::free - LOB ディスクリプタに関連付けられたりソースを解放する
    • OCILob::getBuffering - ラージオブジェクトに対する現在のバッファリングの状態を返す
    • OCILob::import - ファイルデータを LOB にインポートする
    • OCILob::load - ラージオブジェクトの内容を返す
    • OCILob::read - ラージオブジェクトの一部を読み込む
    • OCILob::rewind - 内部ポインタをラージオブジェクトの先頭に移動する
    • OCILob::save - データをラージオブジェクトに保存する
    • OCILob::saveFile - のエイリアス OCILob::import
    • OCILob::seek - ラージオブジェクトの内部ポインタをセットする
    • OCILob::setBuffering - 現在のラージオブジェクト用のバッファリング状態を変更する
    • OCILob::size - ラージオブジェクトのサイズを返す
    • OCILob::tell - ラージオブジェクトの内部ポインタの現在位置を返す
    • OCILob::truncate - ラージオブジェクトを切りつめる
    • OCILob::write - データをラージオブジェクトに書き込む
    • OCILob::writeTemporary - 一時的なラージオブジェクトを書き込む
    • OCILob::writeToFile - のエイリアス OCILob::export
    • ocilogoff - oci_close のエイリアス
    • ocilogon - oci_connect のエイリアス
    • ocinewcollection - oci_new_collection のエイリアス
    • ocinewcursor - oci_new_cursor のエイリアス
    • ocinewdescriptor - oci_new_descriptor のエイリアス
    • ocinlogon - oci_new_connect のエイリアス
    • ocinumcols - oci_num_fields のエイリアス
    • ociparse - oci_parse のエイリアス
    • ociplogon - oci_pconnect のエイリアス
    • ociresult - oci_result のエイリアス
    • ocirollback - oci_rollback のエイリアス
    • ocirowcount - oci_num_rows のエイリアス
    • ocisavelob - OCILob::save のエイリアス
    • ocisavelobfile - OCILob::import のエイリアス
    • ociserverversion - oci_server_version のエイリアス
    • ocisetprefetch - oci_set_prefetch のエイリアス
    • ocistatementtype - oci_statement_type のエイリアス
    • ociwritelobtofile - OCILob::export のエイリアス
    • ociwritetemporarylob - OCILob::writeTemporary のエイリアス
    • oci_bind_array_by_name - PHP の配列を Oracle PL/SQL の配列に名前でバインドする
    • oci_bind_by_name - Oracle プレースホルダに PHP 変数をバインドする
    • oci_cancel - カーソルからの読み込みをキャンセルする
    • oci_client_version - Oracle クライアント・ライブラリのバージョンを返す
    • oci_close - Oracleとの接続を閉じる
    • oci_commit - 未解決のトランザクションをコミットする
    • oci_connect - Oracle データベースに接続する
    • oci_define_by_name - PHP の変数を、クエリで取得するカラムに関連づける
    • oci_error - 最後に見つかったエラーを返す
    • oci_execute - 文を実行する
    • oci_fetch - クエリの次の行を内部バッファに取得する
    • oci_fetch_all - クエリからの複数の行を二次元配列に取得する
    • oci_fetch_array - クエリの次の行を連想配列あるいは数値添字配列で返す
    • oci_fetch_assoc - クエリの次の行を連想配列で返す
    • oci_fetch_object - クエリの次の行をオブジェクトとして返す
    • oci_fetch_row - クエリの次の行を配列で返す
    • oci_field_is_null - フェッチしたフィールドが null であるかどうかを確認する
    • oci_field_name - 文からのフィールド名を返す
    • oci_field_precision - フィールドの精度を問い合わせる
    • oci_field_scale - フィールドの桁数を問い合わせる
    • oci_field_size - フィールドサイズを返す
    • oci_field_type - フィールドのデータ型の名前を返す
    • oci_field_type_raw - Oracle におけるフィールドの型を問い合わせる
    • oci_free_descriptor - ディスクリプタを解放する
    • oci_free_statement - 文やカーソルに関連付けられた全てのリソースを解放する
    • oci_get_implicit_resultset - Oracle Database の暗黙の結果セットを持つ親ステートメント・リソースから次の子ステートメント・リソースを返す
    • oci_internal_debug - 内部的なデバッグ出力を有効/無効にする
    • oci_lob_copy - ラージオブジェクトをコピーする
    • oci_lob_is_equal - 2 つの LOB/FILE ロケータの等価性を比較する
    • oci_new_collection - 新しいコレクションオブジェクトを割り当てる
    • oci_new_connect - 一意な接続を使って Oracle サーバーへ接続する
    • oci_new_cursor - 新規カーソル (ステートメントハンドル) を割り当て、それを返す
    • oci_new_descriptor - 空の新規 LOB あるいは FILE ディスクリプタを初期化する
    • oci_num_fields - ある文における結果のカラム数を返す
    • oci_num_rows - 文の実行で作用された行数を取得する
    • oci_parse - 実行のために Oracle の文をパースする
    • oci_password_change - Oracle ユーザーのパスワードを変更する
    • oci_pconnect - 持続的接続を使用してOracle データベースに接続する
    • oci_register_taf_callback - Register a user-defined callback function for Oracle Database TAF
    • oci_result - フェッチした行からフィールドの値を取得する
    • oci_rollback - 未解決のデータベーストランザクションをロールバックする
    • oci_server_version - Oracle データベースのバージョンを返す
    • oci_set_action - アクション名を設定します
    • oci_set_call_timeout - Sets a millisecond timeout for database calls
    • oci_set_client_identifier - クライアント識別子を設定します
    • oci_set_client_info - クライアント情報を設定する
    • oci_set_db_operation - Sets the database operation
    • oci_set_edition - データベース・エディション を設定します
    • oci_set_module_name - モジュール名を設定します
    • oci_set_prefetch - クエリがプリフェッチする行数を設定する
    • oci_set_prefetch_lob - CLOB や BLOB ごとにプリフェッチするデータサイズを設定する
    • oci_statement_type - ステートメントの種類を返す
    • oci_unregister_taf_callback - Unregister a user-defined callback function for Oracle Database TAF
    • octdec - 8 進数を 10 進数に変換する
    • odbc_autocommit - 自動コミットの動作をオンまたはオフにする
    • odbc_binmode - バイナリカラムデータを処理する
    • odbc_close - ODBC 接続を閉じる
    • odbc_close_all - 全ての ODBC 接続を閉じる
    • odbc_columnprivileges - 指定したテーブルに関するカラムおよび付随する権限のリストを取得する
    • odbc_columns - 指定したテーブルにあるカラム名のリストを取得する
    • odbc_commit - ODBC トランザクションをコミットする
    • odbc_connect - データソースに接続する
    • odbc_connection_string_is_quoted - ODBC の接続文字列の値が、クオートされているかを調べる
    • odbc_connection_string_quote - ODBC の接続文字列をクオートする
    • odbc_connection_string_should_quote - ODBC の接続文字列を、クオートすべきかを調べる
    • odbc_cursor - カーソル名を得る
    • odbc_data_source - 利用可能なDSNについての情報を返す
    • odbc_do - odbc_exec のエイリアス
    • odbc_error - 直近のエラーコードを得る
    • odbc_errormsg - 直近のエラーメッセージを得る
    • odbc_exec - SQL文を直接実行する
    • odbc_execute - プリペアドステートメントを実行する
    • odbc_fetch_array - 連想配列として結果の行を取得する
    • odbc_fetch_into - 一行ぶんの結果を配列に取り込む
    • odbc_fetch_object - オブジェクトとして結果の行を取得する
    • odbc_fetch_row - 行を取り込む
    • odbc_field_len - フィールドの長さ (精度) を得る
    • odbc_field_name - カラム名を得る
    • odbc_field_num - カラム番号を返す
    • odbc_field_precision - odbc_field_len のエイリアス
    • odbc_field_scale - フィールドの精度を得る
    • odbc_field_type - フィールドのデータ型を返す
    • odbc_foreignkeys - 外部キーのリストを取得する
    • odbc_free_result - 結果を保持するリソースを開放する
    • odbc_gettypeinfo - データソースがサポートするデータ型についての情報を取得する
    • odbc_longreadlen - LONG カラムを処理する
    • odbc_next_result - 複数の結果が利用可能などうか確認する
    • odbc_num_fields - 結果のカラム数を返す
    • odbc_num_rows - 結果における行数を返す
    • odbc_pconnect - 持続的なデータベース接続を開く
    • odbc_prepare - 実行用に文を準備する
    • odbc_primarykeys - テーブルの主キーを取得する
    • odbc_procedurecolumns - プロシージャへのパラメータに関する情報を取得する
    • odbc_procedures - 指定したデータソースに保存されているプロシージャのリストを取得する
    • odbc_result - 結果データを得る
    • odbc_result_all - HTML テーブルとして結果を出力する
    • odbc_rollback - トランザクションをロールバックする
    • odbc_setoption - ODBC の設定を変更する
    • odbc_specialcolumns - 特殊カラムを取得する
    • odbc_statistics - テーブルに関する統計情報を取得する
    • odbc_tableprivileges - 各テーブルのリストおよび関連する権限のリストを取得する
    • odbc_tables - 指定したデータソースに保存されたテーブルの名前のリストを取得する
    • opcache_compile_file - PHP スクリプトを、実行せずにコンパイルしてキャッシュする
    • opcache_get_configuration - キャッシュについての構成情報を取得
    • opcache_get_status - キャッシュについてのステータス情報を取得
    • opcache_invalidate - キャッシュされたスクリプトを無効にする
    • opcache_is_script_cached - スクリプトが OPCache にキャッシュされているかどうかを伝えます。
    • opcache_reset - opcode のキャッシュ内容をリセットする
    • openal_buffer_create - OpenAL バッファを生成する
    • openal_buffer_data - バッファのデータを読み込む
    • openal_buffer_destroy - OpenAL バッファを削除する
    • openal_buffer_get - OpenAL バッファのプロパティを取得する
    • openal_buffer_loadwav - .wav ファイルをバッファに読み込む
    • openal_context_create - 音声処理コンテキストを作成する
    • openal_context_current - 指定したコンテキストを現在のコンテキストにする
    • openal_context_destroy - コンテキストを削除する
    • openal_context_process - 指定したコンテキストを処理する
    • openal_context_suspend - 指定したコンテキストをサスペンドする
    • openal_device_close - OpenAL デバイスを閉じる
    • openal_device_open - OpenAL 音声レイヤを初期化する
    • openal_listener_get - リスナーのプロパティを取得する
    • openal_listener_set - リスナーのプロパティを設定する
    • openal_source_create - ソースリソースを生成する
    • openal_source_destroy - ソースリソースを削除する
    • openal_source_get - OpenAL ソースのプロパティを取得する
    • openal_source_pause - ソースを一時停止する
    • openal_source_play - ソースの再生を開始する
    • openal_source_rewind - ソースを巻き戻す
    • openal_source_set - ソースのプロパティを設定する
    • openal_source_stop - ソースの再生を停止する
    • openal_stream - ソースのストリーム再生を開始する
    • opendir - ディレクトリハンドルをオープンする
    • openlog - システムのロガーへの接続をオープンする
    • openssl_cipher_iv_length - 初期化ベクトル iv の長さを取得する
    • openssl_cipher_key_length - 暗号鍵の長さを取得する
    • openssl_cms_decrypt - CMS メッセージを復号化する
    • openssl_cms_encrypt - CMS メッセージを暗号化する
    • openssl_cms_read - CMS ファイルを、PEM証明書の配列にエクスポートする
    • openssl_cms_sign - ファイルに署名する
    • openssl_cms_verify - CMS の署名を検証する
    • openssl_csr_export - CSR を文字列としてエクスポートする
    • openssl_csr_export_to_file - CSR をファイルにエクスポートする
    • openssl_csr_get_public_key - CSR の公開鍵を返す
    • openssl_csr_get_subject - CSR の subject を返す
    • openssl_csr_new - CSR を作成する
    • openssl_csr_sign - CSR に他の証明書（あるいは自分自身）で署名して証明書を作成する
    • openssl_decrypt - データを復号する
    • openssl_dh_compute_key - ローカルのDH秘密鍵とリモート側のDH公開鍵を使い、共有シークレットを計算する
    • openssl_digest - ダイジェストを計算する
    • openssl_encrypt - データを暗号化する
    • openssl_error_string - OpenSSL エラーメッセージを返す
    • openssl_free_key - キーリソースを開放する
    • openssl_get_cert_locations - 有効な証明書の格納場所を検索する
    • openssl_get_cipher_methods - 利用可能な暗号メソッドを取得
    • openssl_get_curve_names - ECC で利用可能な楕円曲線の名前を取得する
    • openssl_get_md_methods - 利用可能なダイジェスト・メソッドを取得
    • openssl_get_privatekey - openssl_pkey_get_private のエイリアス
    • openssl_get_publickey - openssl_pkey_get_public のエイリアス
    • openssl_open - シール(暗号化)されたデータをオープン(復号)する
    • openssl_pbkdf2 - PKCS5 v2 の PBKDF2 文字列を生成する
    • openssl_pkcs7_decrypt - S/MIME 暗号化されたメッセージを復号する
    • openssl_pkcs7_encrypt - S/MIME メッセージを暗号化する
    • openssl_pkcs7_read - PKCS7 ファイルを PEM証明書 の配列にエクスポートする
    • openssl_pkcs7_sign - S/MIME メッセージに署名する
    • openssl_pkcs7_verify - S/MIME で署名されたメッセージの署名を検証する
    • openssl_pkcs12_export - PKCS#12 互換の証明書保存ファイルを変数にエクスポートする
    • openssl_pkcs12_export_to_file - PKCS#12 互換の証明書保存ファイルをエクスポートする
    • openssl_pkcs12_read - PKCS#12 認証ストアをパースして配列形式にする
    • openssl_pkey_derive - リモートとローカルの DH/ECDH鍵 の公開値のための、共有シークレットを計算する
    • openssl_pkey_export - エクスポート可能な形式で、キーを文字列に取得する
    • openssl_pkey_export_to_file - エクスポート可能な形式で、キーをファイルに取得する
    • openssl_pkey_free - 秘密鍵を開放する
    • openssl_pkey_get_details - キーの詳細の配列を返す
    • openssl_pkey_get_private - 秘密鍵を取得する
    • openssl_pkey_get_public - 証明書から公開鍵を抽出し、使用できるようにする
    • openssl_pkey_new - 新規に秘密鍵を生成する
    • openssl_private_decrypt - 秘密鍵でデータを復号する
    • openssl_private_encrypt - 秘密鍵でデータを暗号化する
    • openssl_public_decrypt - 公開鍵でデータを復号する
    • openssl_public_encrypt - 公開鍵でデータを暗号化する
    • openssl_random_pseudo_bytes - 疑似ランダムなバイト文字列を生成する
    • openssl_seal - データをシール(暗号化)する
    • openssl_sign - 署名を生成する
    • openssl_spki_export - 署名済みの公開鍵とチャレンジから、有効なPEMフォーマットの公開鍵をエクスポートする
    • openssl_spki_export_challenge - 署名済みの公開鍵とチャレンジに関連するチャレンジをエクスポートする
    • openssl_spki_new - 署名された公開鍵とチャレンジを新規に作成する
    • openssl_spki_verify - 署名済みの公開鍵とチャレンジを検証する
    • openssl_verify - 署名を検証する
    • openssl_x509_checkpurpose - 証明書が特定の目的に使用可能かどうか確認する
    • openssl_x509_check_private_key - 秘密鍵が証明書に対応するかを確認する
    • openssl_x509_export - 証明書を文字列としてエクスポートする
    • openssl_x509_export_to_file - 証明書をファイルにエクスポートする
    • openssl_x509_fingerprint - 与えられた X.509 証明書のフィンガープリントあるいはダイジェストを計算する
    • openssl_x509_free - 証明書リソースを開放する
    • openssl_x509_parse - X509 証明書をパースし、配列として情報を返す
    • openssl_x509_read - X.509 証明書をパースし、オブジェクトを返す
    • openssl_x509_verify - x509証明書のデジタル署名を公開鍵で検証する
    • ord - 文字列の先頭バイトを、0 から 255 までの値に変換する
    • OuterIterator::getInnerIterator - 現在のエントリの内部イテレータを返す
    • output_add_rewrite_var - URL リライタの値を追加する
    • output_reset_rewrite_vars - URL リライタの値をリセットする
    • Override::__construct - 新しいOverrideアトリビュートのインスタンスを作成する
  • p
    • pack - データをバイナリ文字列にパックする
    • parallel\bootstrap - Bootstrapping
    • parallel\Channel::close - Closing
    • parallel\Channel::make - Access
    • parallel\Channel::open - Access
    • parallel\Channel::recv - Sharing
    • parallel\Channel::send - Sharing
    • parallel\Channel::__construct - Channel Construction
    • parallel\Events::addChannel - Targets
    • parallel\Events::addFuture - Targets
    • parallel\Events::poll - Polling
    • parallel\Events::remove - Targets
    • parallel\Events::setBlocking - Behaviour
    • parallel\Events::setInput - Input
    • parallel\Events::setTimeout - Behaviour
    • parallel\Events\Input::add - Inputs
    • parallel\Events\Input::clear - Inputs
    • parallel\Events\Input::remove - Inputs
    • parallel\Future::cancel - Cancellation
    • parallel\Future::cancelled - State Detection
    • parallel\Future::done - State Detection
    • parallel\Future::value - Resolution
    • parallel\run - Execution
    • parallel\Runtime::close - Runtime Graceful Join
    • parallel\Runtime::kill - Runtime Join
    • parallel\Runtime::run - Execution
    • parallel\Runtime::__construct - Runtime Construction
    • parallel\Sync::get - Access
    • parallel\Sync::notify - Synchronization
    • parallel\Sync::set - Access
    • parallel\Sync::wait - Synchronization
    • parallel\Sync::__construct - Construction
    • parallel\Sync::__invoke - Synchronization
    • ParentIterator::accept - 受け入れ可能かどうかを調べる
    • ParentIterator::getChildren - ParentIterator に含まれる内部イテレータの子を返す
    • ParentIterator::hasChildren - 内部イテレータの現在の要素が子を持つかどうかをチェックする
    • ParentIterator::next - イテレータを前に移動する
    • ParentIterator::rewind - イテレータを巻き戻す
    • ParentIterator::__construct - ParentIterator を作成する
    • Parle\Lexer::advance - Process next lexer rule
    • Parle\Lexer::build - Finalize the lexer rule set
    • Parle\Lexer::callout - Define token callback
    • Parle\Lexer::consume - Pass the data for processing
    • Parle\Lexer::dump - Dump the state machine
    • Parle\Lexer::getToken - Retrieve the current token
    • Parle\Lexer::insertMacro - Insert regex macro
    • Parle\Lexer::push - Add a lexer rule
    • Parle\Lexer::reset - Reset lexer
    • Parle\Parser::advance - Process next parser rule
    • Parle\Parser::build - Finalize the grammar rules
    • Parle\Parser::consume - Consume the data for processing
    • Parle\Parser::dump - Dump the grammar
    • Parle\Parser::errorInfo - Retrieve the error information
    • Parle\Parser::left - Declare a token with left-associativity
    • Parle\Parser::nonassoc - Declare a token with no associativity
    • Parle\Parser::precedence - Declare a precedence rule
    • Parle\Parser::push - Add a grammar rule
    • Parle\Parser::reset - Reset parser state
    • Parle\Parser::right - Declare a token with right-associativity
    • Parle\Parser::sigil - Retrieve a matching part of a rule
    • Parle\Parser::sigilCount - Number of elements in matched rule
    • Parle\Parser::sigilName - Retrieve a rule or token name
    • Parle\Parser::token - Declare a token
    • Parle\Parser::tokenId - Get token id
    • Parle\Parser::trace - Trace the parser operation
    • Parle\Parser::validate - Validate input
    • Parle\RLexer::advance - Process next lexer rule
    • Parle\RLexer::build - Finalize the lexer rule set
    • Parle\RLexer::callout - Define token callback
    • Parle\RLexer::consume - Pass the data for processing
    • Parle\RLexer::dump - Dump the state machine
    • Parle\RLexer::getToken - Retrieve the current token
    • Parle\RLexer::insertMacro - Insert regex macro
    • Parle\RLexer::push - Add a lexer rule
    • Parle\RLexer::pushState - Push a new start state
    • Parle\RLexer::reset - Reset lexer
    • Parle\RParser::advance - Process next parser rule
    • Parle\RParser::build - Finalize the grammar rules
    • Parle\RParser::consume - Consume the data for processing
    • Parle\RParser::dump - Dump the grammar
    • Parle\RParser::errorInfo - Retrieve the error information
    • Parle\RParser::left - Declare a token with left-associativity
    • Parle\RParser::nonassoc - Declare a token with no associativity
    • Parle\RParser::precedence - Declare a precedence rule
    • Parle\RParser::push - Add a grammar rule
    • Parle\RParser::reset - Reset parser state
    • Parle\RParser::right - Declare a token with right-associativity
    • Parle\RParser::sigil - Retrieve a matching part of a rule
    • Parle\RParser::sigilCount - Number of elements in matched rule
    • Parle\RParser::sigilName - Retrieve a rule or token name
    • Parle\RParser::token - Declare a token
    • Parle\RParser::tokenId - Get token id
    • Parle\RParser::trace - Trace the parser operation
    • Parle\RParser::validate - Validate input
    • Parle\Stack::pop - Pop an item from the stack
    • Parle\Stack::push - Push an item into the stack
    • parse_ini_file - 設定ファイルをパースする
    • parse_ini_string - 設定文字列をパースする
    • parse_str - 文字列を処理し、変数に代入する
    • parse_url - URL を解釈し、その構成要素を返す
    • passthru - 外部プログラムを実行し、未整形の出力を表示する
    • password_algos - 利用可能なパスワードハッシュアルゴリズムのIDを取得する
    • password_get_info - 指定したハッシュに関する情報を返す
    • password_hash - パスワードハッシュを作る
    • password_needs_rehash - 指定したハッシュがオプションにマッチするかどうかを調べる
    • password_verify - パスワードがハッシュにマッチするかどうかを調べる
    • pathinfo - ファイルパスに関する情報を返す
    • pclose - プロセスのファイルポインタをクローズする
    • pcntl_alarm - シグナルを送信するアラームを設定する
    • pcntl_async_signals - 非同期のシグナルハンドリングを有効/無効にするか、古い設定を返す
    • pcntl_errno - pcntl_get_last_error のエイリアス
    • pcntl_exec - 現在のプロセス空間で指定したプログラムを実行する
    • pcntl_fork - 現在実行中のプロセスをフォークする
    • pcntl_getpriority - プロセスの優先度を取得する
    • pcntl_get_last_error - 直近の pcntl 関数が失敗したときのエラー番号を取得する
    • pcntl_rfork - プロセスのリソースを管理する
    • pcntl_setpriority - プロセスの優先度を変更する
    • pcntl_signal - シグナルハンドラを設定する
    • pcntl_signal_dispatch - ペンディングシグナル用のハンドラをコールする
    • pcntl_signal_get_handler - 指定されたシグナルの現在のハンドラを取得する
    • pcntl_sigprocmask - ブロックされたシグナルを設定あるいは取得する
    • pcntl_sigtimedwait - タイムアウトつきでシグナルを待つ
    • pcntl_sigwaitinfo - シグナルを待つ
    • pcntl_strerror - 指定した errno に対応するシステムのエラーメッセージを取得する
    • pcntl_unshare - プロセスの実行コンテキストの一部を切り離す
    • pcntl_wait - 待つかフォークした子プロセスのステータスを返す
    • pcntl_waitpid - 待つかフォークした子プロセスのステータスを返す
    • pcntl_wexitstatus - 終了した子プロセスのリターンコードを返す
    • pcntl_wifexited - ステータスコードが正常終了を表しているかどうかを調べる
    • pcntl_wifsignaled - ステータスコードがシグナルによる終了を表しているかどうかを調べる
    • pcntl_wifstopped - 子プロセスが現在停止しているかどうかを調べる
    • pcntl_wstopsig - 子プロセスを停止させたシグナルを返す
    • pcntl_wtermsig - 子プロセスを終了させたシグナルを返す
    • PDO::beginTransaction - トランザクションを開始する
    • PDO::commit - トランザクションをコミットする
    • PDO::cubrid_schema - 指定したスキーマ情報を取得する
    • PDO::errorCode - データベースハンドラにおける直近の操作に関連する SQLSTATE を取得する
    • PDO::errorInfo - データベースハンドラにおける直近の操作に関連する拡張エラー情報を取得する
    • PDO::exec - SQL ステートメントを実行し、作用した行数を返す
    • PDO::getAttribute - データベース接続の属性を取得する
    • PDO::getAvailableDrivers - 利用可能な PDO ドライバの配列を返す
    • PDO::inTransaction - トランザクション内かどうかを調べる
    • PDO::lastInsertId - 最後に挿入された行の ID あるいはシーケンスの値を返す
    • PDO::pgsqlCopyFromArray - PHP の配列から、データをテーブルにコピーする
    • PDO::pgsqlCopyFromFile - ファイルからデータをテーブルにコピーする
    • PDO::pgsqlCopyToArray - データベーステーブルからのデータをPHPの配列にコピーする
    • PDO::pgsqlCopyToFile - テーブルからのデータをファイルにコピーする
    • PDO::pgsqlGetNotify - 非同期に通知を取得する
    • PDO::pgsqlGetPid - サーバーのPIDを取得する
    • PDO::pgsqlLOBCreate - 新しいラージオブジェクトを作成する
    • PDO::pgsqlLOBOpen - 既存のラージオブジェクトのストリームをオープンする
    • PDO::pgsqlLOBUnlink - ラージオブジェクトを削除する
    • PDO::prepare - 文を実行する準備を行い、文オブジェクトを返す
    • PDO::query - プレースホルダを指定せずに、SQL ステートメントを準備して実行する
    • PDO::quote - クエリ用の文字列をクオートする
    • PDO::rollBack - トランザクションをロールバックする
    • PDO::setAttribute - 属性を設定する
    • PDO::sqliteCreateAggregate - SQL 文で使用する集約ユーザー定義関数 (UDF) を登録する
    • PDO::sqliteCreateCollation - SQL文で collate 関数として使うユーザー定義関数を登録する
    • PDO::sqliteCreateFunction - SQL 文で使用するユーザー定義関数 (UDF) を登録する
    • PDO::__construct - データベースへの接続を表す PDO インスタンスを生成する
    • PDOStatement::bindColumn - カラムを PHP 変数にバインドする
    • PDOStatement::bindParam - 指定された変数名にパラメータをバインドする
    • PDOStatement::bindValue - 値をパラメータにバインドする
    • PDOStatement::closeCursor - カーソルを閉じてステートメントを再実行できるようにする
    • PDOStatement::columnCount - 結果セット中のカラム数を返す
    • PDOStatement::debugDumpParams - SQL プリペアドコマンドを出力する
    • PDOStatement::errorCode - 文ハンドラにおける直近の操作に関連する SQLSTATE を取得する
    • PDOStatement::errorInfo - 文ハンドラにおける直近の操作に関連する拡張エラー情報を取得する
    • PDOStatement::execute - プリペアドステートメントを実行する
    • PDOStatement::fetch - 結果セットから次の行を取得する
    • PDOStatement::fetchAll - 結果セットから、残っている行を取得する
    • PDOStatement::fetchColumn - 結果セットの次行から単一カラムを返す
    • PDOStatement::fetchObject - 次の行を取得し、それをオブジェクトとして返す
    • PDOStatement::getAttribute - 文の属性を取得する
    • PDOStatement::getColumnMeta - 結果セットのカラムに対するメタデータを返す
    • PDOStatement::getIterator - 結果セットのイテレータを取得する
    • PDOStatement::nextRowset - 複数の行セットを返す文ハンドラで次の行セットに移動する
    • PDOStatement::rowCount - 直近の SQL ステートメントによって作用した行数を返す
    • PDOStatement::setAttribute - 文の属性を設定する
    • PDOStatement::setFetchMode - この文に対するデフォルトのフェッチモードを設定する
    • PDO_CUBRID DSN - CUBRID データベースへの接続
    • PDO_DBLIB DSN - Microsoft SQL Server および Sybase データベースに接続する
    • PDO_FIREBIRD DSN - Firebird データベースに接続する
    • PDO_IBM DSN - IBM データベースへの接続
    • PDO_INFORMIX DSN - Informix データベースに接続する
    • PDO_MYSQL DSN - MySQL データベースに接続する
    • PDO_OCI DSN - Oracle データベースに接続する
    • PDO_ODBC DSN - ODBC あるいは DB2 データベースに接続する
    • PDO_PGSQL DSN - PostgreSQL データベースに接続する
    • PDO_SQLITE DSN - SQLite データベースに接続する
    • PDO_SQLSRV DSN - MS SQL Server および SQL Azure データベースに接続する
    • pfsockopen - 持続的な Internet または Unix ドメインソケット接続をオープンする
    • pg_affected_rows - 変更されたレコード(タプル)の数を返す
    • pg_cancel_query - 非同期クエリを取り消す
    • pg_client_encoding - クライアントのエンコーディングを取得する
    • pg_close - PostgreSQL 接続をクローズする
    • pg_connect - PostgreSQL 接続をオープンする
    • pg_connection_busy - 接続がビジーかどうか調べる
    • pg_connection_reset - 接続をリセット(再接続)する
    • pg_connection_status - 接続ステータスを取得する
    • pg_connect_poll - 進行中の非同期接続のステータスをポーリングする
    • pg_consume_input - 接続の入力を読み取る
    • pg_convert - 連想配列の値を、SQL 文として実行可能な形式に変換する
    • pg_copy_from - 配列からテーブルに挿入する
    • pg_copy_to - 配列にテーブルをコピーする
    • pg_dbname - データベース名を取得する
    • pg_delete - レコードを削除する
    • pg_end_copy - PostgreSQL バックエンドと同期する
    • pg_escape_bytea - bytea フィールドに挿入するために文字列をエスケープする
    • pg_escape_identifier - テキスト型フィールドに挿入するために、識別子をエスケープする
    • pg_escape_literal - テキスト型フィールドに挿入するために、リテラルをエスケープする
    • pg_escape_string - クエリに使う文字列をエスケープする
    • pg_execute - 指定したパラメータを用いてプリペアドステートメントを実行するリクエストを 送信し、その結果を待つ
    • pg_fetch_all - 取得されたすべての行を配列として取得する
    • pg_fetch_all_columns - 指定したカラムの全ての行を配列として取得する
    • pg_fetch_array - 行を配列として取得する
    • pg_fetch_assoc - 行を連想配列として取得する
    • pg_fetch_object - 行をオブジェクトとして得る
    • pg_fetch_result - 結果インスタンスから値を返す
    • pg_fetch_row - 数値添字の配列として行を得る
    • pg_field_is_null - フィールドが SQL の NULL かどうか調べる
    • pg_field_name - フィールドの名前を返す
    • pg_field_num - 指定されたフィールドのフィールド番号を返す
    • pg_field_prtlen - 表示される長さを返す
    • pg_field_size - 指定したフィールドの内部記憶領域におけるサイズを返す
    • pg_field_table - tables フィールドの名前あるいは oid を返す
    • pg_field_type - フィールド番号に対応する型名を返す
    • pg_field_type_oid - フィールド番号に対応する型 ID（OID）を返す
    • pg_flush - 送信を待っているクエリデータをフラッシュする
    • pg_free_result - クエリ結果のメモリを開放する
    • pg_get_notify - SQL NOTIFY メッセージを取得する
    • pg_get_pid - バックエンドのプロセス ID を得る
    • pg_get_result - 非同期クエリの結果を取得する
    • pg_host - 接続に関連するホスト名を返す
    • pg_insert - テーブルに配列を挿入する
    • pg_last_error - 特定の接続から直近のエラーメッセージ文字列を取得する
    • pg_last_notice - PostgreSQL サーバーからの直近の通知メッセージを返す
    • pg_last_oid - 直近の行のオブジェクト ID を返す
    • pg_lo_close - ラージオブジェクトをクローズする
    • pg_lo_create - ラージオブジェクトを生成する
    • pg_lo_export - ラージオブジェクトをファイルにエクスポートする
    • pg_lo_import - ファイルからラージオブジェクトをインポートする
    • pg_lo_open - ラージオブジェクトをオープンする
    • pg_lo_read - ラージオブジェクトを読み込む
    • pg_lo_read_all - ラージオブジェクト全体を読み込みブラウザに直接送信する
    • pg_lo_seek - ラージオブジェクトの位置をシークする
    • pg_lo_tell - ラージオブジェクトのカレントのシーク位置を返す
    • pg_lo_truncate - ラージオブジェクトを切り詰める
    • pg_lo_unlink - ラージオブジェクトを削除する
    • pg_lo_write - ラージオブジェクトに書き込む
    • pg_meta_data - テーブルからメタデータを取得する
    • pg_num_fields - フィールド数を返す
    • pg_num_rows - 行数を返す
    • pg_options - 接続に関連するオプションを取得する
    • pg_parameter_status - サーバーのパラメータ設定を検索する
    • pg_pconnect - 持続的な PostgreSQL 接続をオープンする
    • pg_ping - データベース接続を調べる
    • pg_port - 接続に関連するポート番号を返す
    • pg_prepare - 指定したパラメータでプリペアドステートメントを作成するリクエストを 送信し、その完了を待つ
    • pg_put_line - NULL で終わる文字列を PostgreSQL バックエンドに送信する
    • pg_query - クエリを実行する
    • pg_query_params - SQL コマンドとパラメータを分割してサーバーへ送信し、その結果を待つ
    • pg_result_error - 結果に関連するエラーメッセージを取得する
    • pg_result_error_field - エラー報告の各フィールドを返す
    • pg_result_seek - 結果インスタンスの内部行オフセットを設定する
    • pg_result_status - クエリ結果のステータスを取得する
    • pg_select - レコードを選択する
    • pg_send_execute - 指定したパラメータでプリペアドステートメントを実行するリクエストを 送信し、その結果を待たない
    • pg_send_prepare - 指定したパラメータでプリペアドステートメントを作成するリクエストを 送信し、その結果を待たない
    • pg_send_query - 非同期クエリを送信する
    • pg_send_query_params - コマンドとパラメータを分割してサーバーに送信し、その結果を待たない
    • pg_set_client_encoding - クライアントのエンコーディングを設定する
    • pg_set_error_context_visibility - pg_last_error が返すコンテクストのエラーメッセージのアクセス権を設定する
    • pg_set_error_verbosity - pg_last_error および pg_result_error が返すメッセージの詳細度を指定する
    • pg_socket - PostgreSQL 接続の下層にある、読み取り専用のソケットのハンドルを取得する
    • pg_trace - PostgreSQL 接続のトレースを有効にする
    • pg_transaction_status - サーバー上で実行中のトランザクションの状態を返す
    • pg_tty - 接続に関する TTY 名を返す
    • pg_unescape_bytea - bytea 型のバイナリをアンエスケープする
    • pg_untrace - PostgreSQL 接続のトレースを無効にする
    • pg_update - テーブルを更新する
    • pg_version - クライアント・プロトコル・サーバーのバージョンを配列で返す
    • Phar::addEmptyDir - 空のディレクトリを phar アーカイブに追加する
    • Phar::addFile - ファイルシステム上のファイルを phar アーカイブに追加する
    • Phar::addFromString - 文字列から、ファイルを phar アーカイブに追加する
    • Phar::apiVersion - API のバージョンを返す
    • Phar::buildFromDirectory - ディレクトリ内のファイルから phar を作成する
    • Phar::buildFromIterator - イテレータから phar アーカイブを作成する
    • Phar::canCompress - phar 拡張モジュールが zlib あるいは bzip2 による圧縮をサポートしているかどうかを返す
    • Phar::canWrite - phar 拡張モジュールが phar の書き込みや作成をサポートしているかどうかを返す
    • Phar::compress - Phar アーカイブ全体を Gzip あるいは Bzip2 で圧縮する
    • Phar::compressFiles - 現在の Phar アーカイブ内のすべてのファイルを圧縮する
    • Phar::convertToData - phar アーカイブを実行可能でない tar あるいは zip ファイルに変換する
    • Phar::convertToExecutable - phar アーカイブを実行可能な別の phar アーカイブ形式に変換する
    • Phar::copy - phar アーカイブ内のファイルを、phar 内で別の新しいファイルとしてコピーする
    • Phar::count - Phar アーカイブ内のエントリ (ファイル) の数を返す
    • Phar::createDefaultStub - phar ファイルフォーマット用のスタブを作成する
    • Phar::decompress - Phar アーカイブ全体の圧縮を解除する
    • Phar::decompressFiles - 現在の Phar アーカイブ内のすべてのファイルの圧縮を解除する
    • Phar::delete - phar アーカイブ内のファイルを削除する
    • Phar::delMetadata - phar のグローバルメタデータを削除する
    • Phar::extractTo - phar アーカイブの内容をディレクトリに展開する
    • Phar::getAlias - Phar のエイリアスを取得する
    • Phar::getMetadata - phar アーカイブのメタデータを返す
    • Phar::getModified - phar が変更されているかどうかを返す
    • Phar::getPath - Pharアーカイブのディスク上の実際のパスを取得する
    • Phar::getSignature - Phar アーカイブの MD5/SHA1/SHA256/SHA512/OpenSSL シグネチャを返す
    • Phar::getStub - Phar アーカイブの PHP ローダーあるいは起動スタブを返す
    • Phar::getSupportedCompression - サポートする圧縮アルゴリズムの配列を返す
    • Phar::getSupportedSignatures - サポートするシグネチャ型の配列を返す
    • Phar::getVersion - Phar アーカイブのバージョン情報を返す
    • Phar::hasMetadata - ファイルがグローバルなメタデータを持つかどうかを返す
    • Phar::interceptFileFuncs - fopen、file_get_contents、opendir などの stat 関連の関数をすべて phar に横取りさせる
    • Phar::isBuffering - Phar の書き込み操作がバッファリングされるか、あるいは直接ディスクに書き込まれるかを調べる
    • Phar::isCompressed - phar アーカイブ全体が (.tar.gz/tar.bz などで) 圧縮されている場合に Phar::GZ あるいは PHAR::BZ2 を返す
    • Phar::isFileFormat - phar アーカイブが、パラメータで指定した tar/phar/zip のいずれかの形式である場合に true を返す
    • Phar::isValidPharFilename - 指定したファイル名が正しい形式の phar ファイルかどうかを返す
    • Phar::isWritable - phar アーカイブが変更可能な場合に true を返す
    • Phar::loadPhar - 任意の phar アーカイブを、エイリアスを指定して読み込む
    • Phar::mapPhar - 現在実行されている (phar 形式の) ファイルを読み込み、その内容を登録する
    • Phar::mount - 外部のパスあるいはファイルを phar アーカイブ内に仮想的にマウントする
    • Phar::mungServer - 最大 4 つまでの $_SERVER 変数を実行時に変更させる
    • Phar::offsetExists - ファイルが phar 内に存在するかどうかを調べる
    • Phar::offsetGet - 指定したファイルの PharFileInfo オブジェクトを取得する
    • Phar::offsetSet - 内部ファイルに、外部ファイルの内容を設定する
    • Phar::offsetUnset - ファイルを phar から削除する
    • Phar::running - 現在実行中の Phar アーカイブのフルパスあるいは完全な phar URL を返す
    • Phar::setAlias - Phar アーカイブのエイリアスを設定する
    • Phar::setDefaultStub - Phar アーカイブの PHP ローダー (起動スタブ) をデフォルトのローダーに設定する
    • Phar::setMetadata - phar アーカイブのメタデータを設定する
    • Phar::setSignatureAlgorithm - phar のシグネチャのアルゴリズムを設定して適用する
    • Phar::setStub - Phar アーカイブの PHP ローダ (あるいは起動スタブ) を設定する
    • Phar::startBuffering - Phar の書き込み操作のバッファリングを開始するが、ディスク上の Phar オブジェクトは変更しない
    • Phar::stopBuffering - Phar アーカイブへの書き込みリクエストのバッファリングを終了し、変更内容をディスクに書き込む
    • Phar::unlinkArchive - phar アーカイブをディスクとメモリから完全に削除する
    • Phar::webPhar - ブラウザからのリクエストを、phar アーカイブ内部のファイルに転送する
    • Phar::__construct - Phar アーカイブオブジェクトを作成する
    • Phar::__destruct - アクティブな Phar オブジェクトを破棄する
    • PharData::addEmptyDir - 空のディレクトリを tar/zip アーカイブに追加する
    • PharData::addFile - ファイルシステム上のファイルを tar/zip アーカイブに追加する
    • PharData::addFromString - 内容を文字列で指定したファイルを、tar/zip アーカイブに追加する
    • PharData::buildFromDirectory - ディレクトリ内のファイルから tar/zip アーカイブを作成する
    • PharData::buildFromIterator - イテレータから tar あるいは zip アーカイブを作成する
    • PharData::compress - tar/zip アーカイブ全体を Gzip あるいは Bzip2 で圧縮する
    • PharData::compressFiles - 現在の tar/zip アーカイブ内のすべてのファイルを圧縮する
    • PharData::convertToData - phar アーカイブを実行可能でない tar あるいは zip ファイルに変換する
    • PharData::convertToExecutable - 実行可能でない tar/zip アーカイブを実行可能な phar アーカイブ形式に変換する
    • PharData::copy - phar アーカイブ内のファイルを、phar 内で別の新しいファイルとしてコピーする
    • PharData::decompress - Phar アーカイブ全体の圧縮を解除する
    • PharData::decompressFiles - 現在の zip アーカイブ内のすべてのファイルの圧縮を解除する
    • PharData::delete - tar/zip アーカイブ内のファイルを削除する
    • PharData::delMetadata - zip アーカイブのグローバルメタデータを削除する
    • PharData::extractTo - tar/zip アーカイブの内容をディレクトリに展開する
    • PharData::isWritable - tar/zip アーカイブが変更可能な場合に true を返す
    • PharData::offsetSet - tar/zip の内部のファイルに、外部ファイルあるいは文字列の内容を設定する
    • PharData::offsetUnset - ファイルを tar/zip アーカイブから削除する
    • PharData::setAlias - ダミー関数 (Phar::setAlias は PharData では使用不能)
    • PharData::setDefaultStub - ダミー関数 (Phar::setDefaultStub は PharData では無効)
    • PharData::setMetadata - phar アーカイブのメタデータを設定する
    • PharData::setSignatureAlgorithm - phar のシグネチャのアルゴリズムを設定する
    • PharData::setStub - ダミー関数 (Phar::setStub は PharData では使用不能)
    • PharData::__construct - 実行可能でない tar あるいは zip アーカイブオブジェクトを作成する
    • PharData::__destruct - 実行不能な tar や zip アーカイブオブジェクトを破棄する
    • PharFileInfo::chmod - ファイル固有のパーミッションビットを設定する
    • PharFileInfo::compress - 現在の Phar エントリを zlib あるいは bzip2 のいずれかで圧縮する
    • PharFileInfo::decompress - phar 内の現在の Phar エントリの圧縮を解除する
    • PharFileInfo::delMetadata - エントリのメタデータを削除する
    • PharFileInfo::getCompressedSize - Phar アーカイブ内での実際のファイルの大きさ (圧縮された状態) を返す
    • PharFileInfo::getContent - エントリの完全なファイルの内容を取得する
    • PharFileInfo::getCRC32 - CRC32 コードを返すか、CRC がチェックできない場合に例外をスローする
    • PharFileInfo::getMetadata - ファイルとともに保存されている、ファイル固有のメタデータを返す
    • PharFileInfo::getPharFlags - Phar ファイルエントリのフラグを返す
    • PharFileInfo::hasMetadata - エントリのメタデータを返す
    • PharFileInfo::isCompressed - エントリが圧縮されているかどうかを調べる
    • PharFileInfo::isCRCChecked - ファイルエントリの CRC が検証されているかどうかを調べる
    • PharFileInfo::setMetadata - ファイルとともに保存する、ファイル固有のメタデータを設定する
    • PharFileInfo::__construct - Phar エントリオブジェクトを作成する
    • PharFileInfo::__destruct - Phar エントリオブジェクトを破棄する
    • phpcredits - PHP に関するクレジットを出力する
    • phpdbg_break_file - ファイルの行にブレークポイントを挿入する
    • phpdbg_break_function - 関数のエントリにブレークポイントを挿入する
    • phpdbg_break_method - メソッドのエントリにブレークポイントを挿入する
    • phpdbg_break_next - 次のオペコードにブレークポイントを挿入します
    • phpdbg_clear - 全てのブレークポイントをクリアする
    • phpdbg_color - 特定の要素に色を設定する
    • phpdbg_end_oplog - 説明
    • phpdbg_exec - 実行コンテクストの設定を試みる
    • phpdbg_get_executable - 説明
    • phpdbg_prompt - コマンドのプロンプトを設定する
    • phpdbg_start_oplog - 説明
    • phpinfo - PHP の設定情報を出力する
    • PhpToken::getTokenName - トークンの名前を返す
    • PhpToken::is - 指定された種類のトークンかを調べる
    • PhpToken::isIgnorable - トークンがPHPパーサから無視されるかを調べる
    • PhpToken::tokenize - ソースコードを PhpToken オブジェクトで表現されたトークンに分割する
    • PhpToken::__construct - 新しい PhpToken オブジェクトを返す
    • PhpToken::__toString - トークンの文字列表現を返す
    • phpversion - 現在の PHP バージョンを取得する
    • php_ini_loaded_file - 読み込まれた php.ini ファイルのパスを取得する
    • php_ini_scanned_files - 追加の ini ディレクトリにある .ini ファイルのリストを取得する
    • php_sapi_name - ウェブサーバーと PHP の間のインターフェイスの型を返す
    • php_strip_whitespace - コメントと空白文字を取り除いたソースを返す
    • php_uname - PHP が稼動しているオペレーティングシステムに関する情報を返す
    • php_user_filter::filter - フィルタを適用するときにコールされる
    • php_user_filter::onClose - フィルタを閉じるときにコールされる
    • php_user_filter::onCreate - フィルタを作成するときにコールされる
    • pi - 円周率の値を得る
    • png2wbmp - PNG画像をWBMP画像に変換する
    • Pool::collect - Collect references to completed tasks
    • Pool::resize - Resize the Pool
    • Pool::shutdown - Shutdown all workers
    • Pool::submit - Submits an object for execution
    • Pool::submitTo - Submits a task to a specific worker for execution
    • Pool::__construct - Creates a new Pool of Workers
    • popen - プロセスへのファイルポインタをオープンする
    • pos - current のエイリアス
    • posix_access - ファイルのアクセス権限を判断する
    • posix_ctermid - 制御する端末のパス名を得る
    • posix_eaccess - ファイルがアクセスできるかを調べる
    • posix_errno - posix_get_last_error のエイリアス
    • posix_fpathconf - 設定可能なリミットの値を返す
    • posix_getcwd - 現在のディレクトリのパス名
    • posix_getegid - 現在のプロセスの有効なグループ ID を返す
    • posix_geteuid - 現在のプロセスの有効なユーザー ID を返す
    • posix_getgid - 現在のプロセスの実際のグループ ID を返す
    • posix_getgrgid - 指定したグループ ID を有するグループに関する情報を返す
    • posix_getgrnam - 指定した名前のグループに関する情報を返す
    • posix_getgroups - 現在のプロセスのグループセットを返す
    • posix_getlogin - ログイン名を返す
    • posix_getpgid - ジョブ制御のプロセスグループ ID を得る
    • posix_getpgrp - 現在のプロセスのグループ ID を返す
    • posix_getpid - 現在のプロセス ID を返す
    • posix_getppid - 親プロセスの ID を返す
    • posix_getpwnam - 指定した名前のユーザーに関する情報を返す
    • posix_getpwuid - 指定 ID のユーザーに関する情報を返す
    • posix_getrlimit - システムリソース制限に関する情報を返す
    • posix_getsid - プロセスの現在の sid を得る
    • posix_getuid - 現在のプロセスの実際のユーザー ID を返す
    • posix_get_last_error - 直近で失敗した posix 関数が設定したエラー番号を取得する
    • posix_initgroups - グループアクセスリストを求める
    • posix_isatty - ファイル記述子が対話型端末であるかどうかを定義する
    • posix_kill - プロセスにシグナルを送信する
    • posix_mkfifo - fifo スペシャルファイル(名前付きパイプ)を作成する
    • posix_mknod - スペシャルファイルあるいは通常のファイルを作成する (POSIX.1)
    • posix_pathconf - 設定可能なリミットの値を返す
    • posix_setegid - 現在のプロセスの実効 GID を設定する
    • posix_seteuid - 現在のプロセスの実効 UID を設定する
    • posix_setgid - 現在のプロセスの GID を設定する
    • posix_setpgid - ジョブ制御のプロセスグループ ID を設定する
    • posix_setrlimit - システムリソース制限を設定
    • posix_setsid - 現在のプロセスをセッションリーダーにする
    • posix_setuid - 現在のプロセスの UID を設定する
    • posix_strerror - 指定したエラー番号に対応するシステムのエラーメッセージを取得する
    • posix_sysconf - システムの実行時情報を返す
    • posix_times - プロセス時間を得る
    • posix_ttyname - 端末のデバイス名を調べる
    • posix_uname - システム名を得る
    • pow - 指数表現
    • preg_filter - 正規表現による検索と置換を行う
    • preg_grep - パターンにマッチする配列の要素を返す
    • preg_last_error - 直近の PCRE 正規表現処理のエラーコードを返す
    • preg_last_error_msg - 最後に実行した PCRE 正規表現に関するエラーメッセージを返す
    • preg_match - 正規表現によるマッチングを行う
    • preg_match_all - 繰り返し正規表現検索を行う
    • preg_quote - 正規表現文字をクオートする
    • preg_replace - 正規表現検索および置換を行う
    • preg_replace_callback - 正規表現検索を行い、コールバック関数を使用して置換を行う
    • preg_replace_callback_array - 正規表現検索を行い、コールバック関数を使用して置換を行う
    • preg_split - 正規表現で文字列を分割する
    • prev - 内部の配列ポインタをひとつ前に戻す
    • print - 文字列を出力する
    • printf - フォーマット済みの文字列を出力する
    • print_r - 指定した変数に関する情報を解りやすく出力する
    • proc_close - proc_open で開かれたプロセスを閉じ、 そのプロセスの終了コードを返す
    • proc_get_status - proc_open で開かれたプロセスに関する情報を取得する
    • proc_nice - 現在のプロセスの優先度を変更する
    • proc_open - コマンドを実行し、入出力用にファイルポインタを開く
    • proc_terminate - proc_open でオープンされたプロセスを強制終了する
    • property_exists - オブジェクトもしくはクラスにプロパティが存在するかどうかを調べる
    • pspell_add_to_personal - ユーザーの単語リストに単語を追加する
    • pspell_add_to_session - 現在のセッションの単語リストに単語を追加する
    • pspell_check - 単語をチェックする
    • pspell_clear_session - 現在のセッションをクリアする
    • pspell_config_create - 辞書をオープンする際に使用する設定を作成する
    • pspell_config_data_dir - 言語のデータファイルの場所
    • pspell_config_dict_dir - メイン単語リストの場所
    • pspell_config_ignore - 長さが N 文字未満の単語を無視する
    • pspell_config_mode - 返される提案の数のモードを変更する
    • pspell_config_personal - 個人の単語リストを保持するファイルを設定する
    • pspell_config_repl - 置換候補を保持するファイルを設定する
    • pspell_config_runtogether - 複合語を有効な単語の組み合わせとして考慮する
    • pspell_config_save_repl - 単語リストと共に置換リストを保存するかどうかを定義する
    • pspell_new - 新規辞書をロードする
    • pspell_new_config - 指定した設定に基づき新規辞書をロードする
    • pspell_new_personal - 個人の単語リストを有する新規辞書をロードする
    • pspell_save_wordlist - 個人の単語リストをファイルに保存する
    • pspell_store_replacement - 単語を置換する組を保存する
    • pspell_suggest - 単語のスペルについて修正候補を示す
    • ps_add_bookmark - 現在のページにブックマークを追加する
    • ps_add_launchlink - ファイルを実行するためのリンクを追加する
    • ps_add_locallink - 同一ドキュメント内のページへのリンクを追加する
    • ps_add_note - 現在のページに注釈を追加する
    • ps_add_pdflink - 別の PDF ドキュメントのページへのリンクを追加する
    • ps_add_weblink - Web 上の場所へのリンクを追加する
    • ps_arc - 反時計回りに円弧を描く
    • ps_arcn - 時計回りに円弧を描く
    • ps_begin_page - 新しいページを開始する
    • ps_begin_pattern - 新しいパターンを開始する
    • ps_begin_template - 新しいテンプレートを開始する
    • ps_circle - 円を描く
    • ps_clip - 現在のパスを描画範囲として指定する
    • ps_close - PostScript ドキュメントを閉じる
    • ps_closepath - パスを閉じる
    • ps_closepath_stroke - パスを閉じ、描画する
    • ps_close_image - 画像を閉じ、メモリを開放する
    • ps_continue_text - 次の行にテキストを続ける
    • ps_curveto - 曲線を描く
    • ps_delete - PostScript ドキュメントの全リソースを削除する
    • ps_end_page - ページを終了する
    • ps_end_pattern - パターンを終了する
    • ps_end_template - テンプレートを終了する
    • ps_fill - 現在のパスを塗りつぶす
    • ps_fill_stroke - 現在のパスを塗りつぶし、線を引く
    • ps_findfont - フォントを読み込む
    • ps_get_buffer - 生成された PS データを含むバッファの内容を取得する
    • ps_get_parameter - パラメータを取得する
    • ps_get_value - 値を取得する
    • ps_hyphenate - 単語をハイフネーションする
    • ps_include_file - 外部ファイルを生の PostScript コードとして読み込む
    • ps_lineto - 直線を描く
    • ps_makespotcolor - スポット色を作成する
    • ps_moveto - 現在位置を設定する
    • ps_new - 新しい PostScript ドキュメントオブジェクトを作成する
    • ps_open_file - 出力用のファイルを開く
    • ps_open_image - 後で配置するために画像を読み込む
    • ps_open_image_file - ファイルから画像を開く
    • ps_open_memory_image - GD 画像を受け取り、PS ドキュメントにはめ込む画像を返す
    • ps_place_image - 画像をページに配置する
    • ps_rect - 矩形を描く
    • ps_restore - 以前に保存されたコンテキストを復元する
    • ps_rotate - 回転の程度を設定する
    • ps_save - 現在のコンテキストを保存する
    • ps_scale - 縮尺を設定する
    • ps_setcolor - 色を設定する
    • ps_setdash - 破線の形状を設定する
    • ps_setflat - 平面度を設定する
    • ps_setfont - 以降の出力で用いるフォントを設定する
    • ps_setgray - グレー値を設定する
    • ps_setlinecap - 線端の形状を設定する
    • ps_setlinejoin - 線の連結方法を設定する
    • ps_setlinewidth - 線幅を設定する
    • ps_setmiterlimit - miter limit 値を設定する
    • ps_setoverprintmode - overprint モードを設定する
    • ps_setpolydash - 破線の形状を設定する
    • ps_set_border_color - 注記の枠線の色を設定する
    • ps_set_border_dash - 注記の枠線の、破線の状態を設定する
    • ps_set_border_style - 注記の枠線の形式を設定する
    • ps_set_info - ドキュメントの情報を設定する
    • ps_set_parameter - パラメータを設定する
    • ps_set_text_pos - テキストの出力位置を設定する
    • ps_set_value - 値を設定する
    • ps_shading - 以降の出力で用いるシェーディングを作成する
    • ps_shading_pattern - シェーディング用のパターンを作成する
    • ps_shfill - 範囲をシェーディングで塗りつぶす
    • ps_show - テキストを出力する
    • ps_show2 - テキストを現在の位置に出力する
    • ps_show_boxed - テキストをボックス内に出力する
    • ps_show_xy - 指定された位置にテキストを出力する
    • ps_show_xy2 - テキストを指定した位置に出力する
    • ps_stringwidth - 文字列の幅を取得する
    • ps_string_geometry - 文字列のジオメトリを取得する
    • ps_stroke - 現在のパスを描画する
    • ps_symbol - グリフを出力する
    • ps_symbol_name - グリフ名を取得する
    • ps_symbol_width - グリフの幅を取得する
    • ps_translate - 座標変換を設定する
    • putenv - 環境変数の値を設定する
  • q
    • QuickHashIntHash::add - This method adds a new entry to the hash
    • QuickHashIntHash::delete - This method deletes an entry from the hash
    • QuickHashIntHash::exists - This method checks whether a key is part of the hash
    • QuickHashIntHash::get - This method retrieves a value from the hash by its key
    • QuickHashIntHash::getSize - Returns the number of elements in the hash
    • QuickHashIntHash::loadFromFile - This factory method creates a hash from a file
    • QuickHashIntHash::loadFromString - This factory method creates a hash from a string
    • QuickHashIntHash::saveToFile - This method stores an in-memory hash to disk
    • QuickHashIntHash::saveToString - This method returns a serialized version of the hash
    • QuickHashIntHash::set - This method updates an entry in the hash with a new value, or adds a new one if the entry doesn't exist
    • QuickHashIntHash::update - This method updates an entry in the hash with a new value
    • QuickHashIntHash::__construct - Creates a new QuickHashIntHash object
    • QuickHashIntSet::add - This method adds a new entry to the set
    • QuickHashIntSet::delete - This method deletes an entry from the set
    • QuickHashIntSet::exists - This method checks whether a key is part of the set
    • QuickHashIntSet::getSize - Returns the number of elements in the set
    • QuickHashIntSet::loadFromFile - This factory method creates a set from a file
    • QuickHashIntSet::loadFromString - This factory method creates a set from a string
    • QuickHashIntSet::saveToFile - This method stores an in-memory set to disk
    • QuickHashIntSet::saveToString - This method returns a serialized version of the set
    • QuickHashIntSet::__construct - Creates a new QuickHashIntSet object
    • QuickHashIntStringHash::add - This method adds a new entry to the hash
    • QuickHashIntStringHash::delete - This method deletes an entry from the hash
    • QuickHashIntStringHash::exists - This method checks whether a key is part of the hash
    • QuickHashIntStringHash::get - This method retrieves a value from the hash by its key
    • QuickHashIntStringHash::getSize - Returns the number of elements in the hash
    • QuickHashIntStringHash::loadFromFile - This factory method creates a hash from a file
    • QuickHashIntStringHash::loadFromString - This factory method creates a hash from a string
    • QuickHashIntStringHash::saveToFile - This method stores an in-memory hash to disk
    • QuickHashIntStringHash::saveToString - This method returns a serialized version of the hash
    • QuickHashIntStringHash::set - This method updates an entry in the hash with a new value, or adds a new one if the entry doesn't exist
    • QuickHashIntStringHash::update - This method updates an entry in the hash with a new value
    • QuickHashIntStringHash::__construct - Creates a new QuickHashIntStringHash object
    • QuickHashStringIntHash::add - This method adds a new entry to the hash
    • QuickHashStringIntHash::delete - This method deletes an entry from the hash
    • QuickHashStringIntHash::exists - This method checks whether a key is part of the hash
    • QuickHashStringIntHash::get - This method retrieves a value from the hash by its key
    • QuickHashStringIntHash::getSize - Returns the number of elements in the hash
    • QuickHashStringIntHash::loadFromFile - This factory method creates a hash from a file
    • QuickHashStringIntHash::loadFromString - This factory method creates a hash from a string
    • QuickHashStringIntHash::saveToFile - This method stores an in-memory hash to disk
    • QuickHashStringIntHash::saveToString - This method returns a serialized version of the hash
    • QuickHashStringIntHash::set - This method updates an entry in the hash with a new value, or adds a new one if the entry doesn't exist
    • QuickHashStringIntHash::update - This method updates an entry in the hash with a new value
    • QuickHashStringIntHash::__construct - Creates a new QuickHashStringIntHash object
    • quoted_printable_decode - quoted-printable 文字列を 8 ビット文字列に変換する
    • quoted_printable_encode - 8 ビット文字列を quoted-printable 文字列に変換する
    • quotemeta - メタ文字をクォートする
  • r
    • rad2deg - ラジアン単位の数値を度単位に変換する
    • radius_acct_open - 課金用の Radius ハンドルを作成する
    • radius_add_server - サーバーを追加する
    • radius_auth_open - 認証用の Radius ハンドルを作成する
    • radius_close - すべてのリソースを開放する
    • radius_config - 指定した設定ファイルをライブラリに読み込ませる
    • radius_create_request - 課金あるいは認証のリクエストを作成する
    • radius_cvt_addr - 生データを IP アドレスに変換する
    • radius_cvt_int - 生データを整数に変換する
    • radius_cvt_string - 生データを文字列に変換する
    • radius_demangle - データを復元する
    • radius_demangle_mppe_key - 変形されたデータから mppe キーを得る
    • radius_get_attr - 属性を取得する
    • radius_get_tagged_attr_data - Extracts the data from a tagged attribute
    • radius_get_tagged_attr_tag - Extracts the tag from a tagged attribute
    • radius_get_vendor_attr - ベンダ固有の属性を取得する
    • radius_put_addr - IP アドレス属性を設定する
    • radius_put_attr - バイナリ属性を設定する
    • radius_put_int - 整数属性を設定する
    • radius_put_string - 文字列属性を設定する
    • radius_put_vendor_addr - ベンダー固有の IP アドレス属性を設定する
    • radius_put_vendor_attr - ベンダー固有のバイナリ属性を設定する
    • radius_put_vendor_int - ベンダー固有の整数属性を設定する
    • radius_put_vendor_string - ベンダー固有の文字列属性を設定する
    • radius_request_authenticator - リクエスト認証子を返す
    • radius_salt_encrypt_attr - Salt-encrypts a value
    • radius_send_request - リクエストを送信し、応答を待つ
    • radius_server_secret - 共有秘密鍵を返す
    • radius_strerror - エラーメッセージを返す
    • rand - 乱数を生成する
    • Random\Engine::generate - ランダムな値を生成する
    • Random\Engine\Mt19937::generate - 32ビットのランダムな値を生成する
    • Random\Engine\Mt19937::__construct - 新しい Mt19937 エンジンを作成する
    • Random\Engine\Mt19937::__debugInfo - エンジンの内部的なステートを返す
    • Random\Engine\Mt19937::__serialize - Mt19937 オブジェクトをシリアライズする
    • Random\Engine\Mt19937::__unserialize - 指定した data を Mt19937 オブジェクトに復元する
    • Random\Engine\PcgOneseq128XslRr64::generate - 64ビットのランダムな値を生成する
    • Random\Engine\PcgOneseq128XslRr64::jump - エンジンの内部状態を、効率的に複数ステップ進める
    • Random\Engine\PcgOneseq128XslRr64::__construct - 128 ビットのステートと XSL RR 変換を使う、新しいPCGエンジンを作成する
    • Random\Engine\PcgOneseq128XslRr64::__debugInfo - エンジンの内部的なステートを返す
    • Random\Engine\PcgOneseq128XslRr64::__serialize - PcgOneseq128XslRr64 オブジェクトをシリアライズする
    • Random\Engine\PcgOneseq128XslRr64::__unserialize - 指定した data を PcgOneseq128XslRr64 オブジェクトに復元する
    • Random\Engine\Secure::generate - 暗号学的にセキュアな、ランダムなバイト列を生成する
    • Random\Engine\Xoshiro256StarStar::generate - 64ビットのランダムな値を生成する
    • Random\Engine\Xoshiro256StarStar::jump - エンジンの内部状態を、効率的に 2^128 ステップ進める
    • Random\Engine\Xoshiro256StarStar::jumpLong - エンジンの内部状態を、効率的に 2^192 ステップ進める
    • Random\Engine\Xoshiro256StarStar::__construct - 新しい xoshiro256** エンジンを作成する
    • Random\Engine\Xoshiro256StarStar::__debugInfo - エンジンの内部的なステートを返す
    • Random\Engine\Xoshiro256StarStar::__serialize - Xoshiro256StarStar オブジェクトをシリアライズする
    • Random\Engine\Xoshiro256StarStar::__unserialize - 指定した data を Xoshiro256StarStar オブジェクトに復元する
    • Random\Randomizer::getBytes - ランダムなバイト列を取得する
    • Random\Randomizer::getBytesFromString - 文字列からランダムにバイト列を取得する
    • Random\Randomizer::getFloat - 等確率に選んだ float の値を取得する
    • Random\Randomizer::getInt - 等確率に選ばれる整数を取得する
    • Random\Randomizer::nextFloat - 半開区間 [0.0, 1.0) から、float の値を取得する
    • Random\Randomizer::nextInt - 正の整数を取得する
    • Random\Randomizer::pickArrayKeys - ランダムに配列のキーを選択する
    • Random\Randomizer::shuffleArray - 配列の順列を取得する
    • Random\Randomizer::shuffleBytes - 指定された文字列の、バイト単位の順列を取得する
    • Random\Randomizer::__construct - 新しい Randomizer を作成する
    • Random\Randomizer::__serialize - Randomizer オブジェクトをシリアライズする
    • Random\Randomizer::__unserialize - 指定した data を Randomizer オブジェクトに復元する
    • random_bytes - 暗号学的にセキュアな、ランダムなバイト列を生成する
    • random_int - 暗号学的にセキュアな方法で、等確率に出る整数を取得する
    • range - ある範囲の要素を含む配列を作成する
    • RarArchive::close - Rar アーカイブをクローズし、全リソースを開放する
    • RarArchive::getComment - RAR アーカイブのコメントテキストを取得する
    • RarArchive::getEntries - RAR アーカイブからエントリの全一覧を取得する
    • RarArchive::getEntry - Rar アーカイブからエントリオブジェクトを取得する
    • RarArchive::isBroken - アーカイブが壊れている (未完成である) かどうかを調べる
    • RarArchive::isSolid - RAR アーカイブがソリッドであるかどうかを調べる
    • RarArchive::open - Rar アーカイブをオープンする
    • RarArchive::setAllowBroken - 壊れたアーカイブのオープンを許可するかどうかを設定する
    • RarArchive::__toString - テキスト形式で取得する
    • RarEntry::extract - アーカイブのエントリを展開する
    • RarEntry::getAttr - エントリの属性を取得する
    • RarEntry::getCrc - エントリの CRC を取得する
    • RarEntry::getFileTime - エントリの最終更新時刻を取得する
    • RarEntry::getHostOs - エントリのホスト OS を取得する
    • RarEntry::getMethod - エントリの圧縮方法を取得する
    • RarEntry::getName - エントリの名前を取得する
    • RarEntry::getPackedSize - 圧縮後のエントリのサイズを取得する
    • RarEntry::getStream - このエントリのファイルハンドラを取得する
    • RarEntry::getUnpackedSize - 展開後のエントリのサイズを取得する
    • RarEntry::getVersion - このエントリを展開するのに必要な RAR プログラムの最低バージョンを取得する
    • RarEntry::isDirectory - このエントリがディレクトリであるかどうかを調べる
    • RarEntry::isEncrypted - このエントリが暗号化されているかどうかを調べる
    • RarEntry::__toString - エントリのテキスト表現を取得する
    • RarException::isUsingExceptions - 例外によるエラー処理を使っているかどうかを調べる
    • RarException::setUsingExceptions - 例外によるエラー処理の有効化および無効化を行う
    • rar_wrapper_cache_stats - URL ラッパーのキャッシュのヒット数
    • rawurldecode - URL エンコードされた文字列をデコードする
    • rawurlencode - RFC 3986 に基づき URL エンコードを行う
    • readdir - ディレクトリハンドルからエントリを読み込む
    • readfile - ファイルを出力する
    • readgzfile - gz ファイルを出力する
    • readline - 一行読み込む
    • readline_add_history - ヒストリに 1 行追加する
    • readline_callback_handler_install - readline コールバックインターフェイスと端末を初期化し、 プロンプトを表示して結果をすぐに返す
    • readline_callback_handler_remove - インストールされたハンドラを削除し、端末の設定をもとに戻す
    • readline_callback_read_char - 文字を読み込み、改行を受け取ると readline コールバックインターフェイスに通知する
    • readline_clear_history - ヒストリをクリアする
    • readline_completion_function - 補完関数を登録する
    • readline_info - 種々の readline の内部変数を取得/設定する
    • readline_list_history - ヒストリを一覧表示する
    • readline_on_new_line - カーソルが新しい行に移動したことを readline に通知する
    • readline_read_history - ヒストリを読み込む
    • readline_redisplay - 画面を再描画する
    • readline_write_history - ヒストリを書きこむ
    • readlink - シンボリックリンク先を返す
    • read_exif_data - のエイリアス exif_read_data
    • realpath - 正規化された絶対パス名を返す
    • realpath_cache_get - realpath キャッシュ・エントリーを取得
    • realpath_cache_size - realpath キャッシュサイズを取得
    • recode - recode_string のエイリアス
    • recode_file - コード変換指令に基づきファイルからファイルにコード変換する
    • recode_string - コード変換指令に基づき文字列のコードを変換する
    • RecursiveArrayIterator::getChildren - 現在のエントリが配列あるいはオブジェクトである場合に、そのイテレータを返す
    • RecursiveArrayIterator::hasChildren - 現在のエントリが配列あるいはオブジェクトであるかどうかを返す
    • RecursiveCachingIterator::getChildren - 内部イテレータの子を RecursiveCachingIterator として返す
    • RecursiveCachingIterator::hasChildren - 内部イテレータの現在の要素が子を持つかどうかチェックする
    • RecursiveCachingIterator::__construct - コンストラクタ
    • RecursiveCallbackFilterIterator::getChildren - RecursiveCallbackFilterIterator に含まれる内部イテレータの子を返す
    • RecursiveCallbackFilterIterator::hasChildren - 内部イテレータの現在の要素が子を持つかどうかを調べる
    • RecursiveCallbackFilterIterator::__construct - RecursiveIterator から RecursiveCallbackFilterIterator を作成する
    • RecursiveDirectoryIterator::getChildren - ディレクトリであれば、現在のエントリに対するイテレータを返す
    • RecursiveDirectoryIterator::getSubPath - サブパスを取得する
    • RecursiveDirectoryIterator::getSubPathname - サブパスと名前を取得する
    • RecursiveDirectoryIterator::hasChildren - 現在のエントリがディレクトリかつ '.' もしくは '..' でないかどうかを返す
    • RecursiveDirectoryIterator::key - 現在のディレクトリエントリのパスとファイル名を返す
    • RecursiveDirectoryIterator::next - 次のエントリに移動する
    • RecursiveDirectoryIterator::rewind - ディレクトリを最初に巻き戻す
    • RecursiveDirectoryIterator::__construct - RecursiveDirectoryIterator を作成する
    • RecursiveFilterIterator::getChildren - RecursiveFilterIterator に含まれる内部イテレータの子を返す
    • RecursiveFilterIterator::hasChildren - 内部イテレータの現在の要素が子を持つかどうかを調べる
    • RecursiveFilterIterator::__construct - RecursiveIterator から RecursiveFilterIterator を作成する
    • RecursiveIterator::getChildren - 現在のエントリのイテレータを返す
    • RecursiveIterator::hasChildren - 現在のエントリのイテレータを作れるかどうかを返す
    • RecursiveIteratorIterator::beginChildren - 子を開始する
    • RecursiveIteratorIterator::beginIteration - 反復処理を開始する
    • RecursiveIteratorIterator::callGetChildren - 子を取得する
    • RecursiveIteratorIterator::callHasChildren - 子を持つかどうかを調べる
    • RecursiveIteratorIterator::current - 現在の要素の値にアクセスする
    • RecursiveIteratorIterator::endChildren - 子を終了する
    • RecursiveIteratorIterator::endIteration - 反復処理を終了する
    • RecursiveIteratorIterator::getDepth - 再帰的なイテレーションにおける現在の深さを取得する
    • RecursiveIteratorIterator::getInnerIterator - 内部イテレータを取得する
    • RecursiveIteratorIterator::getMaxDepth - 最大の深さを取得する
    • RecursiveIteratorIterator::getSubIterator - 現在の有効なサブイテレータを取得する
    • RecursiveIteratorIterator::key - 現在のキーにアクセスする
    • RecursiveIteratorIterator::next - 次の要素に移動する
    • RecursiveIteratorIterator::nextElement - 次の要素
    • RecursiveIteratorIterator::rewind - トップレベルの内部イテレータの先頭要素にイテレータを巻き戻す
    • RecursiveIteratorIterator::setMaxDepth - 最大の深さを設定する
    • RecursiveIteratorIterator::valid - 現在の位置が有効かどうかをチェックする
    • RecursiveIteratorIterator::__construct - RecursiveIteratorIterator を作成する
    • RecursiveRegexIterator::getChildren - 現在のエントリのイテレータを返す
    • RecursiveRegexIterator::hasChildren - 現在のエントリのイテレータが取得可能かどうかを返す
    • RecursiveRegexIterator::__construct - 新しい RecursiveRegexIterator を作成する
    • RecursiveTreeIterator::beginChildren - 子を開始する
    • RecursiveTreeIterator::beginIteration - 反復処理を開始する
    • RecursiveTreeIterator::callGetChildren - 子を取得する
    • RecursiveTreeIterator::callHasChildren - 子を持っているかどうかを調べる
    • RecursiveTreeIterator::current - 現在の要素を取得する
    • RecursiveTreeIterator::endChildren - 子を終了する
    • RecursiveTreeIterator::endIteration - 反復処理を終了する
    • RecursiveTreeIterator::getEntry - 現在のエントリを取得する
    • RecursiveTreeIterator::getPostfix - 接尾辞を取得する
    • RecursiveTreeIterator::getPrefix - 接頭辞を取得する
    • RecursiveTreeIterator::key - 現在の要素のキーを取得する
    • RecursiveTreeIterator::next - 次の要素に移動する
    • RecursiveTreeIterator::nextElement - 次の要素
    • RecursiveTreeIterator::rewind - イテレータを巻き戻す
    • RecursiveTreeIterator::setPostfix - postfix を設定する
    • RecursiveTreeIterator::setPrefixPart - 接頭辞の部分を設定する
    • RecursiveTreeIterator::valid - 有効性を調べる
    • RecursiveTreeIterator::__construct - RecursiveTreeIterator を作成する
    • Reflection::export - エクスポートする
    • Reflection::getModifierNames - 修飾子の名前を取得する
    • ReflectionAttribute::getArguments - アトリビュートに渡された引数を取得する
    • ReflectionAttribute::getName - アトリビュートの名前を取得する
    • ReflectionAttribute::getTarget - アトリビュートのターゲットをビットマスクとして返す
    • ReflectionAttribute::isRepeated - この名前のアトリビュートが、実際にコード上に繰り返し現れているかどうかを取得する
    • ReflectionAttribute::newInstance - アトリビュートクラスをインスタンス化する
    • ReflectionAttribute::__construct - private なコンストラクタのため、直接インスタンス化できません
    • ReflectionClass::export - クラスをエクスポートする
    • ReflectionClass::getAttributes - アトリビュートを取得する
    • ReflectionClass::getConstant - 定義されている定数を取得する
    • ReflectionClass::getConstants - 定数を取得する
    • ReflectionClass::getConstructor - クラスのコンストラクタを取得する
    • ReflectionClass::getDefaultProperties - デフォルトプロパティを取得する
    • ReflectionClass::getDocComment - ドキュメントコメントを取得する
    • ReflectionClass::getEndLine - 終了行を取得する
    • ReflectionClass::getExtension - クラスを定義する拡張モジュールを表す ReflectionExtension オブジェクトを取得する
    • ReflectionClass::getExtensionName - クラスを定義する拡張モジュールの名前を取得する
    • ReflectionClass::getFileName - クラスが定義されているファイルのファイル名を取得する
    • ReflectionClass::getInterfaceNames - インターフェイスの名前を取得する
    • ReflectionClass::getInterfaces - インターフェイスを取得する
    • ReflectionClass::getMethod - クラスメソッドの ReflectionMethod を取得する
    • ReflectionClass::getMethods - メソッドの配列を取得する
    • ReflectionClass::getModifiers - クラス修飾子を取得する
    • ReflectionClass::getName - クラスの名前を取得する
    • ReflectionClass::getNamespaceName - 名前空間の名前を取得する
    • ReflectionClass::getParentClass - 親クラスを取得する
    • ReflectionClass::getProperties - プロパティを取得する
    • ReflectionClass::getProperty - クラスのプロパティを表す ReflectionProperty を取得する
    • ReflectionClass::getReflectionConstant - クラス定数の ReflectionClassConstant を取得する
    • ReflectionClass::getReflectionConstants - クラス定数を取得する
    • ReflectionClass::getShortName - 短い名前を取得する
    • ReflectionClass::getStartLine - 開始行を取得する
    • ReflectionClass::getStaticProperties - staticプロパティを取得する
    • ReflectionClass::getStaticPropertyValue - staticプロパティの値を取得する
    • ReflectionClass::getTraitAliases - トレイトのエイリアスの配列を返す
    • ReflectionClass::getTraitNames - このクラスが使うトレイトの名前の配列を返す
    • ReflectionClass::getTraits - このクラスが使うトレイトの配列を返す
    • ReflectionClass::hasConstant - 定数が定義されているかどうかを調べる
    • ReflectionClass::hasMethod - メソッドが定義されているかどうかを調べる
    • ReflectionClass::hasProperty - プロパティが定義されているかどうかを調べる
    • ReflectionClass::implementsInterface - インターフェイスの実装を調べる
    • ReflectionClass::inNamespace - 名前空間内にあるかどうかを調べる
    • ReflectionClass::isAbstract - 抽象クラスであるかどうかを調べる
    • ReflectionClass::isAnonymous - クラスが無名クラスかを調べる
    • ReflectionClass::isCloneable - このクラスがクローン可能かどうかを返す
    • ReflectionClass::isEnum - 列挙型であるかどうかを返す
    • ReflectionClass::isFinal - final クラスであるかどうかを調べる
    • ReflectionClass::isInstance - クラスのインスタンスであるかどうかを調べる
    • ReflectionClass::isInstantiable - クラスのインスタンス化が可能であるかどうかを調べる
    • ReflectionClass::isInterface - このクラスがインターフェイスであるかどうかを調べる
    • ReflectionClass::isInternal - 拡張モジュールあるいはコアで定義された内部クラスであるかどうかを調べる
    • ReflectionClass::isIterable - このクラスがイテレーション可能かを調べる
    • ReflectionClass::isIterateable - のエイリアス ReflectionClass::isIterable
    • ReflectionClass::isReadOnly - クラスが readonly かを調べる
    • ReflectionClass::isSubclassOf - サブクラスであるかどうかを調べる
    • ReflectionClass::isTrait - トレイトであるかどうかを返す
    • ReflectionClass::isUserDefined - ユーザー定義であるかどうかを調べる
    • ReflectionClass::newInstance - 指定した引数でクラスの新しいインスタンスを作成する
    • ReflectionClass::newInstanceArgs - 指定した引数でクラスの新しいインスタンスを作成する
    • ReflectionClass::newInstanceWithoutConstructor - コンストラクタを起動せずに新しいクラスのインスタンスを作成する
    • ReflectionClass::setStaticPropertyValue - staticプロパティの値を設定する
    • ReflectionClass::__construct - ReflectionClass を作成する
    • ReflectionClass::__toString - ReflectionClass オブジェクトの文字列表現を返す
    • ReflectionClassConstant::export - リフレクションをエクスポートする
    • ReflectionClassConstant::getAttributes - アトリビュートを取得する
    • ReflectionClassConstant::getDeclaringClass - 定数を宣言しているクラスを取得する
    • ReflectionClassConstant::getDocComment - クラス定数のドキュメントコメントを取得する
    • ReflectionClassConstant::getModifiers - クラス定数の修飾子を取得する
    • ReflectionClassConstant::getName - 定数名を取得する
    • ReflectionClassConstant::getValue - 値を取得する
    • ReflectionClassConstant::isEnumCase - クラス定数が、列挙型の case かどうかを調べる
    • ReflectionClassConstant::isFinal - クラス定数が final かどうかを調べる
    • ReflectionClassConstant::isPrivate - クラス定数がprivateかを調べる
    • ReflectionClassConstant::isProtected - クラス定数が protected かを調べる
    • ReflectionClassConstant::isPublic - クラス定数が public かを調べる
    • ReflectionClassConstant::__construct - ReflectionClassConstant を構築する
    • ReflectionClassConstant::__toString - ReflectionClassConstant オブジェクトの文字列表現を返す
    • ReflectionEnum::getBackingType - 存在する場合に、列挙型が依存する型を取得する
    • ReflectionEnum::getCase - 列挙型の特定の case を返す
    • ReflectionEnum::getCases - 列挙型の全ての case を返す
    • ReflectionEnum::hasCase - 列挙型が case を持つかを調べる
    • ReflectionEnum::isBacked - 列挙型が Backed Enum かを調べる
    • ReflectionEnum::__construct - ReflectionEnum オブジェクトをインスタンス化する
    • ReflectionEnumBackedCase::getBackingValue - Backed Enum の case が持つスカラー値を取得する
    • ReflectionEnumBackedCase::__construct - ReflectionEnumBackedCase オブジェクトをインスタンス化する
    • ReflectionEnumUnitCase::getEnum - この case が属するリフレクションオブジェクトを取得する
    • ReflectionEnumUnitCase::getValue - このリフレクションオブジェクトが表す case オブジェクトを取得する
    • ReflectionEnumUnitCase::__construct - ReflectionEnumUnitCase オブジェクトをインスタンス化する
    • ReflectionExtension::export - エクスポートする
    • ReflectionExtension::getClasses - クラスを取得する
    • ReflectionExtension::getClassNames - クラス名を取得する
    • ReflectionExtension::getConstants - 定数を取得する
    • ReflectionExtension::getDependencies - 依存性を取得する
    • ReflectionExtension::getFunctions - 拡張モジュールの関数を取得する
    • ReflectionExtension::getINIEntries - 拡張モジュールの ini エントリを取得する
    • ReflectionExtension::getName - 拡張モジュール名を取得する
    • ReflectionExtension::getVersion - 拡張モジュールのバージョンを取得する
    • ReflectionExtension::info - 拡張モジュールの情報を表示する
    • ReflectionExtension::isPersistent - この拡張モジュールが永続性のあるものかどうかを返す
    • ReflectionExtension::isTemporary - この拡張モジュールが一時的なものかどうかを返す
    • ReflectionExtension::__clone - クローンする
    • ReflectionExtension::__construct - ReflectionExtension を作成する
    • ReflectionExtension::__toString - 文字列に変換する
    • ReflectionFiber::getCallable - Fiber の構築に使われた callable を取得する
    • ReflectionFiber::getExecutingFile - 現在実行中のファイル名を取得する
    • ReflectionFiber::getExecutingLine - 現在実行中の行番号を取得する
    • ReflectionFiber::getFiber - リフレクションされた Fiber クラスのインスタンスを取得する
    • ReflectionFiber::getTrace - 現在実行している時点のバックトレースを取得する
    • ReflectionFiber::__construct - Constructs a ReflectionFiber オブジェクトを構築する
    • ReflectionFunction::export - 関数をエクスポートする
    • ReflectionFunction::getClosure - この関数に動的に作成されたクロージャを返す
    • ReflectionFunction::invoke - 関数を起動する
    • ReflectionFunction::invokeArgs - 引数を指定して関数を起動する
    • ReflectionFunction::isAnonymous - 関数が無名関数かどうかを調べる
    • ReflectionFunction::isDisabled - 関数が無効になっているかどうかを調べる
    • ReflectionFunction::__construct - ReflectionFunction オブジェクトを作成する
    • ReflectionFunction::__toString - ReflectionFunction を表現する文字列を返す
    • ReflectionFunctionAbstract::getAttributes - アトリビュートを取得する
    • ReflectionFunctionAbstract::getClosureScopeClass - クロージャに関連づけられたスコープクラスを返す
    • ReflectionFunctionAbstract::getClosureThis - クロージャにバインドした this ポインタを返す
    • ReflectionFunctionAbstract::getClosureUsedVariables - クロージャ内で使われている変数の配列を返す
    • ReflectionFunctionAbstract::getDocComment - ドキュメントコメントを取得する
    • ReflectionFunctionAbstract::getEndLine - 終了行番号を取得する
    • ReflectionFunctionAbstract::getExtension - 拡張モジュールの情報を取得する
    • ReflectionFunctionAbstract::getExtensionName - 拡張モジュールの名前を取得する
    • ReflectionFunctionAbstract::getFileName - ファイル名を取得する
    • ReflectionFunctionAbstract::getName - 関数名を取得する
    • ReflectionFunctionAbstract::getNamespaceName - 名前空間名を取得する
    • ReflectionFunctionAbstract::getNumberOfParameters - パラメータ数を取得する
    • ReflectionFunctionAbstract::getNumberOfRequiredParameters - 必須パラメータの数を取得する
    • ReflectionFunctionAbstract::getParameters - パラメータを取得する
    • ReflectionFunctionAbstract::getReturnType - 指定された関数の戻り値の型を取得する
    • ReflectionFunctionAbstract::getShortName - 関数の短い名前を取得する
    • ReflectionFunctionAbstract::getStartLine - 開始行番号を取得する
    • ReflectionFunctionAbstract::getStaticVariables - static変数を取得する
    • ReflectionFunctionAbstract::getTentativeReturnType - 関数に関連付けられた仮の戻り値の型を返す
    • ReflectionFunctionAbstract::hasReturnType - 関数が戻り値の型を指定しているかを調べる
    • ReflectionFunctionAbstract::hasTentativeReturnType - 戻り値の型を仮で宣言しているかを返す
    • ReflectionFunctionAbstract::inNamespace - 関数が名前空間内にあるかどうかを調べる
    • ReflectionFunctionAbstract::isClosure - クロージャであるかどうかを調べる
    • ReflectionFunctionAbstract::isDeprecated - 非推奨であるかどうかを調べる
    • ReflectionFunctionAbstract::isGenerator - この関数がジェネレータかどうかを返す
    • ReflectionFunctionAbstract::isInternal - 内部関数かどうかを調べる
    • ReflectionFunctionAbstract::isStatic - 関数が static であるかどうかを調べる
    • ReflectionFunctionAbstract::isUserDefined - ユーザー定義関数であるかどうかを調べる
    • ReflectionFunctionAbstract::isVariadic - この関数の引数が可変長かを調べる
    • ReflectionFunctionAbstract::returnsReference - 参照返しかどうかを調べる
    • ReflectionFunctionAbstract::__clone - 関数のクローンを作成する
    • ReflectionFunctionAbstract::__toString - ReflectionFunctionAbstract を表現する文字列を返す
    • ReflectionGenerator::getExecutingFile - 現在実行中のジェネレータのファイル名を取得する
    • ReflectionGenerator::getExecutingGenerator - 実行中の Generator オブジェクトを取得する
    • ReflectionGenerator::getExecutingLine - 現在実行中のジェネレータの行を取得する
    • ReflectionGenerator::getFunction - ジェネレータの関数名を取得する
    • ReflectionGenerator::getThis - ジェネレータの $this の値を取得する
    • ReflectionGenerator::getTrace - 実行中のジェネレータのトレースを取得する
    • ReflectionGenerator::__construct - ReflectionGenerator オブジェクトを構築する
    • ReflectionIntersectionType::getTypes - 交差型に含まれている型を返す
    • ReflectionMethod::createFromMethodName - ReflectionMethod を作成する
    • ReflectionMethod::export - メソッドをエクスポートする
    • ReflectionMethod::getClosure - このメソッドに動的に作成されたクロージャを返す
    • ReflectionMethod::getDeclaringClass - メソッドが宣言されているクラスを取得する
    • ReflectionMethod::getModifiers - メソッドの修飾子を取得する
    • ReflectionMethod::getPrototype - メソッドのプロトタイプを (存在すれば) 取得する
    • ReflectionMethod::hasPrototype - メソッドがプロトタイプを持つかを調べる
    • ReflectionMethod::invoke - 実行する
    • ReflectionMethod::invokeArgs - 実行する
    • ReflectionMethod::isAbstract - 抽象メソッドであるかどうかを調べる
    • ReflectionMethod::isConstructor - コンストラクタであるかどうかを調べる
    • ReflectionMethod::isDestructor - デストラクタであるかどうかを調べる
    • ReflectionMethod::isFinal - final メソッドであるかどうかを調べる
    • ReflectionMethod::isPrivate - private メソッドであるかどうかを調べる
    • ReflectionMethod::isProtected - protected メソッドであるかどうかを調べる
    • ReflectionMethod::isPublic - public メソッドであるかどうかを調べる
    • ReflectionMethod::setAccessible - メソッドのアクセス範囲を設定する
    • ReflectionMethod::__construct - ReflectionMethod を作成する
    • ReflectionMethod::__toString - ReflectionMethod オブジェクトの文字列表現を返す
    • ReflectionNamedType::getName - 型の名前の文字列を取得する
    • ReflectionNamedType::isBuiltin - 組み込みの型であるかを調べる
    • ReflectionObject::export - エクスポートする
    • ReflectionObject::__construct - ReflectionObject を作成する
    • ReflectionParameter::allowsNull - null を許可するかどうかを調べる
    • ReflectionParameter::canBePassedByValue - このパラメータが値渡し可能かどうかを返す
    • ReflectionParameter::export - エクスポートする
    • ReflectionParameter::getAttributes - アトリビュートを取得する
    • ReflectionParameter::getClass - リフレクションされた ReflectionClass を取得する。
    • ReflectionParameter::getDeclaringClass - 宣言しているクラスを取得する
    • ReflectionParameter::getDeclaringFunction - 宣言している関数を取得する
    • ReflectionParameter::getDefaultValue - パラメータのデフォルト値を取得する
    • ReflectionParameter::getDefaultValueConstantName - デフォルト値が定数あるいは null の場合に、その定数名を返す
    • ReflectionParameter::getName - パラメータ名を取得する
    • ReflectionParameter::getPosition - パラメータの位置を取得する
    • ReflectionParameter::getType - 引数の型を取得する
    • ReflectionParameter::hasType - 引数が型を持つかを調べる
    • ReflectionParameter::isArray - 配列を受け取るパラメータであるかどうかを調べる
    • ReflectionParameter::isCallable - パラメータが callable かどうかを返す
    • ReflectionParameter::isDefaultValueAvailable - デフォルト値が存在するかどうかを調べる
    • ReflectionParameter::isDefaultValueConstant - このパラメータのデフォルト値が定数かどうかを返す
    • ReflectionParameter::isOptional - 省略可能であるかどうかを調べる
    • ReflectionParameter::isPassedByReference - 参照渡しかどうかを調べる
    • ReflectionParameter::isVariadic - 引数が可変長の個数であるかをチェックする
    • ReflectionParameter::__clone - クローンする
    • ReflectionParameter::__construct - コンストラクタ
    • ReflectionParameter::__toString - 文字列に変換する
    • ReflectionProperty::export - エクスポートする
    • ReflectionProperty::getAttributes - アトリビュートを取得する
    • ReflectionProperty::getDeclaringClass - 宣言しているクラスを取得する
    • ReflectionProperty::getDefaultValue - プロパティで宣言されたデフォルト値を返す
    • ReflectionProperty::getDocComment - プロパティのドキュメントコメントを取得する
    • ReflectionProperty::getModifiers - プロパティの修飾子を取得する
    • ReflectionProperty::getName - プロパティ名を取得する
    • ReflectionProperty::getType - プロパティの型を取得する
    • ReflectionProperty::getValue - 値を取得する
    • ReflectionProperty::hasDefaultValue - デフォルト値が宣言されているかをチェックする
    • ReflectionProperty::hasType - プロパティが型を持つかをチェックする
    • ReflectionProperty::isDefault - デフォルトプロパティであるかどうかを調べる
    • ReflectionProperty::isInitialized - プロパティが初期化されているかをチェックする
    • ReflectionProperty::isPrivate - private プロパティであるかどうかを調べる
    • ReflectionProperty::isPromoted - プロパティがコンストラクタの引数から昇格したものかを調べる
    • ReflectionProperty::isProtected - protected プロパティであるかどうかを調べる
    • ReflectionProperty::isPublic - public プロパティであるかどうかを調べる
    • ReflectionProperty::isReadOnly - プロパティが readonly かを調べる
    • ReflectionProperty::isStatic - staticプロパティであるかどうかを調べる
    • ReflectionProperty::setAccessible - プロパティのアクセス範囲を設定する
    • ReflectionProperty::setValue - プロパティの値を設定する
    • ReflectionProperty::__clone - クローンする
    • ReflectionProperty::__construct - ReflectionProperty オブジェクトを作成する
    • ReflectionProperty::__toString - 文字列に変換する
    • ReflectionReference::fromArrayElement - 配列の要素から、ReflectionReference を生成する
    • ReflectionReference::getId - リファレンスのユニークなIDを取得する
    • ReflectionReference::__construct - private なコンストラクタのため、直接インスタンス化できません
    • ReflectionType::allowsNull - null が許されるかをチェックする
    • ReflectionType::__toString - 文字列に変換する
    • ReflectionUnionType::getTypes - union 型に含まれる型を返す。
    • ReflectionZendExtension::export - エクスポート
    • ReflectionZendExtension::getAuthor - 作者を取得する
    • ReflectionZendExtension::getCopyright - 著作権情報を取得する
    • ReflectionZendExtension::getName - 名前を取得する
    • ReflectionZendExtension::getURL - URL を取得する
    • ReflectionZendExtension::getVersion - バージョンを取得する
    • ReflectionZendExtension::__clone - Clone のハンドラ
    • ReflectionZendExtension::__construct - ReflectionZendExtension オブジェクトを作成する
    • ReflectionZendExtension::__toString - 文字列変換のハンドラ
    • Reflector::export - エクスポートする
    • RegexIterator::accept - 受け入れ状況を取得する
    • RegexIterator::getFlags - フラグを取得する
    • RegexIterator::getMode - 操作モードを返す
    • RegexIterator::getPregFlags - 正規表現フラグを返す
    • RegexIterator::getRegex - 現在の正規表現を返す
    • RegexIterator::setFlags - フラグを設定する
    • RegexIterator::setMode - 操作モードを設定する
    • RegexIterator::setPregFlags - 正規表現フラグを設定する
    • RegexIterator::__construct - 新しい RegexIterator を作成する
    • register_shutdown_function - シャットダウン時に実行する関数を登録する
    • register_tick_function - 各 tick で実行する関数を登録する
    • rename - ファイルをリネームする
    • reset - 配列の内部ポインタを先頭の要素にセットする
    • ResourceBundle::count - バンドル内の要素数を取得する
    • ResourceBundle::create - リソースバンドルを作成する
    • ResourceBundle::get - バンドルからデータを取得する
    • ResourceBundle::getErrorCode - バンドルの直近のエラーコードを取得する
    • ResourceBundle::getErrorMessage - バンドルの直近のエラーメッセージを取得する
    • ResourceBundle::getLocales - サポートするロケールを取得する
    • restore_error_handler - 以前のエラーハンドラ関数を回復する
    • restore_exception_handler - 以前の例外ハンドラ関数を回復する
    • restore_include_path - include_path 設定オプションの値を元に戻す
    • Result::getAffectedItemsCount - 影響を受けた行数を得る
    • Result::getAutoIncrementValue - 自動インクリメントされた値を取得する
    • Result::getGeneratedIds - 生成された id を取得する
    • Result::getWarnings - 直近の操作から発生した警告を取得する
    • Result::getWarningsCount - 直近の操作から生じた警告の数を取得する
    • Result::__construct - Result のコンストラクタ
    • ReturnTypeWillChange::__construct - 新しい ReturnTypeWillChange のインスタンスを作成する
    • rewind - ファイルポインタの位置を先頭に戻す
    • rewinddir - ディレクトリハンドルを元に戻す
    • rmdir - ディレクトリを削除する
    • rnp_backend_string - Return cryptographic backend library name
    • rnp_backend_version - Return cryptographic backend library version
    • rnp_decrypt - Decrypt PGP message
    • rnp_dump_packets - Dump OpenPGP packets stream information in humand-readable format
    • rnp_dump_packets_to_json - Dump OpenPGP packets stream information to the JSON string
    • rnp_ffi_create - Create the top-level object used for interacting with the library
    • rnp_ffi_destroy - Destroy the top-level object used for interacting with the library
    • rnp_ffi_set_pass_provider - Set password provider callback function
    • rnp_import_keys - Import keys from PHP string to the keyring and receive JSON describing new/updated keys
    • rnp_import_signatures - Import standalone signatures to the keyring and receive JSON describing updated keys
    • rnp_key_export - Export a key
    • rnp_key_export_autocrypt - Export minimal key for autocrypt feature (just 5 packets: key, uid, signature, encryption subkey, signature)
    • rnp_key_export_revocation - Generate and export primary key revocation signature
    • rnp_key_get_info - Get information about the key
    • rnp_key_remove - Remove a key from keyring(s)
    • rnp_key_revoke - Revoke a key or subkey by generating and adding revocation signature
    • rnp_list_keys - Enumerate all keys present in a keyring by specified identifer type
    • rnp_load_keys - Load keys from PHP string
    • rnp_load_keys_from_path - Load keys from specified path
    • rnp_locate_key - Search for the key
    • rnp_op_encrypt - Encrypt message
    • rnp_op_generate_key - Generate key
    • rnp_op_sign - Perform signing operation on a binary data, return embedded signature(s)
    • rnp_op_sign_cleartext - Perform signing operation on a textual data, return cleartext signed message
    • rnp_op_sign_detached - Perform signing operation, return detached signature(s)
    • rnp_op_verify - Verify embedded or cleartext signatures
    • rnp_op_verify_detached - Verify detached signatures
    • rnp_save_keys - Save keys to PHP string
    • rnp_save_keys_to_path - Save keys to specified path
    • rnp_supported_features - Get supported features in JSON format
    • rnp_version_string - RNP library version
    • rnp_version_string_full - Full version string of RNP library
    • round - 浮動小数点数を丸める
    • RowResult::fetchAll - 結果セットから全ての行を取得する
    • RowResult::fetchOne - 結果セットから行を取得する
    • RowResult::getColumnNames - 全てのカラム名を取得する
    • RowResult::getColumns - カラムのメタデータを取得する
    • RowResult::getColumnsCount - カラムの数を取得する
    • RowResult::getWarnings - 直近の操作から生じた警告を取得する
    • RowResult::getWarningsCount - 直近の操作から生じた警告の数を取得する
    • RowResult::__construct - RowResult のコンストラクタ
    • rpmaddtag - Add tag retrieved in query
    • rpmdbinfo - Get information from installed RPM
    • rpmdbsearch - Search RPM packages
    • rpmgetsymlink - Get target of a symlink
    • rpminfo - Get information from a RPM file
    • rpmvercmp - RPM version comparison
    • RRDCreator::addArchive - Adds RRA - archive of data values for each data source
    • RRDCreator::addDataSource - Adds data source definition for RRD database
    • RRDCreator::save - Saves the RRD database to a file
    • RRDCreator::__construct - Creates new RRDCreator instance
    • rrdc_disconnect - Close any outstanding connection to rrd caching daemon
    • RRDGraph::save - Saves the result of query into image
    • RRDGraph::saveVerbose - Saves the RRD database query into image and returns the verbose information about generated graph
    • RRDGraph::setOptions - Sets the options for rrd graph export
    • RRDGraph::__construct - Creates new RRDGraph instance
    • RRDUpdater::update - Update the RRD database file
    • RRDUpdater::__construct - Creates new RRDUpdater instance
    • rrd_create - Creates rrd database file
    • rrd_error - Gets latest error message
    • rrd_fetch - Fetch the data for graph as array
    • rrd_first - Gets the timestamp of the first sample from rrd file
    • rrd_graph - Creates image from a data
    • rrd_info - Gets information about rrd file
    • rrd_last - Gets unix timestamp of the last sample
    • rrd_lastupdate - Gets information about last updated data
    • rrd_restore - Restores the RRD file from XML dump
    • rrd_tune - Tunes some RRD database file header options
    • rrd_update - Updates the RRD database
    • rrd_version - Gets information about underlying rrdtool library
    • rrd_xport - Exports the information about RRD database
    • rsort - 配列を降順にソートする
    • rtrim - 文字列の最後から空白 (もしくはその他の文字) を取り除く
    • runkit7_constant_add - Similar to define(), but allows defining in class definitions as well
    • runkit7_constant_redefine - Redefine an already defined constant
    • runkit7_constant_remove - Remove/Delete an already defined constant
    • runkit7_function_add - Add a new function, similar to create_function
    • runkit7_function_copy - Copy a function to a new function name
    • runkit7_function_redefine - Replace a function definition with a new implementation
    • runkit7_function_remove - Remove a function definition
    • runkit7_function_rename - Change a function's name
    • runkit7_import - Process a PHP file importing function and class definitions, overwriting where appropriate
    • runkit7_method_add - Dynamically adds a new method to a given class
    • runkit7_method_copy - Copies a method from class to another
    • runkit7_method_redefine - Dynamically changes the code of the given method
    • runkit7_method_remove - Dynamically removes the given method
    • runkit7_method_rename - Dynamically changes the name of the given method
    • runkit7_object_id - Return the integer object handle for given object
    • runkit7_superglobals - Return numerically indexed array of registered superglobals
    • runkit7_zval_inspect - Returns information about the passed in value with data types, reference counts, etc
  • s
    • sapi_windows_cp_conv - 文字列のコードページを別のものに変換する
    • sapi_windows_cp_get - 現在のコードページを取得する
    • sapi_windows_cp_is_utf8 - コードページがUTF-8と互換性があるかを返す
    • sapi_windows_cp_set - 現在のプロセスのコードページを設定する
    • sapi_windows_generate_ctrl_event - CTRLイベント を別プロセスに送信する
    • sapi_windows_set_ctrl_handler - CTRLイベント のハンドラを設定したり削除したりする
    • sapi_windows_vt100_support - Windows コンソールの出力バッファに関連付けられたストリームのVT100サポート状況を取得/設定する
    • scandir - 指定されたパスのファイルとディレクトリのリストを取得する
    • Schema::createCollection - スキーマにコレクションを追加する
    • Schema::dropCollection - スキーマからコレクションを削除する
    • Schema::existsInDatabase - データベースに存在するかをチェックする
    • Schema::getCollection - スキーマからコレクションを取得する
    • Schema::getCollectionAsTable - コレクションをテーブルオブジェクトとして取得する
    • Schema::getCollections - スキーマに属する全てのコレクションを取得する
    • Schema::getName - スキーマの名前を取得する
    • Schema::getSession - スキーマのセッションを取得する
    • Schema::getTable - スキーマのテーブルを取得する
    • Schema::getTables - スキーマのテーブルを取得する
    • Schema::__construct - Schema のコンストラクタ
    • SchemaObject::getSchema - スキーマオブジェクトを得る
    • scoutapm_get_calls - 収集する処理が呼ばれた情報の一覧を返す
    • scoutapm_list_instrumented_functions - scoutapm がデータを収集する関数の一覧
    • SeasLog::alert - Record alert log information
    • SeasLog::analyzerCount - Get log count by level, log_path and key_word
    • SeasLog::analyzerDetail - Get log detail by level, log_path, key_word, start, limit, order
    • SeasLog::closeLoggerStream - Manually release stream flow from logger
    • SeasLog::critical - Record critical log information
    • SeasLog::debug - Record debug log information
    • SeasLog::emergency - Record emergency log information
    • SeasLog::error - Record error log information
    • SeasLog::flushBuffer - Flush logs buffer, dump to appender file, or send to remote api with tcp/udp
    • SeasLog::getBasePath - Get SeasLog base path.
    • SeasLog::getBuffer - Get the logs buffer in memory as array
    • SeasLog::getBufferEnabled - Determin if buffer enabled
    • SeasLog::getDatetimeFormat - Get SeasLog datetime format style
    • SeasLog::getLastLogger - Get SeasLog last logger path
    • SeasLog::getRequestID - Get SeasLog request_id differentiated requests
    • SeasLog::getRequestVariable - Get SeasLog request variable
    • SeasLog::info - Record info log information
    • SeasLog::log - The Common Record Log Function
    • SeasLog::notice - Record notice log information
    • SeasLog::setBasePath - Set SeasLog base path
    • SeasLog::setDatetimeFormat - Set SeasLog datetime format style
    • SeasLog::setLogger - Set SeasLog logger name
    • SeasLog::setRequestID - Set SeasLog request_id differentiated requests
    • SeasLog::setRequestVariable - Manually set SeasLog request variable
    • SeasLog::warning - Record warning log information
    • SeasLog::__construct - Description
    • SeasLog::__destruct - Description
    • seaslog_get_author - Get SeasLog author.
    • seaslog_get_version - Get SeasLog version.
    • SeekableIterator::seek - 位置を移動する
    • sem_acquire - セマフォを得る
    • sem_get - セマフォ ID を得る
    • sem_release - セマフォを解放する
    • sem_remove - セマフォを削除する
    • SensitiveParameter::__construct - 新しい SensitiveParameter のインスタンスを作成する
    • SensitiveParameterValue::getValue - 秘密の値を返す
    • SensitiveParameterValue::__construct - 新しい SensitiveParameterValue オブジェクトを作成する
    • SensitiveParameterValue::__debugInfo - 秘密の値をうっかり公開することを防止する
    • Serializable::serialize - オブジェクトの文字列表現
    • Serializable::unserialize - オブジェクトを作成する
    • serialize - 値の保存可能な表現を生成する
    • Session::close - セッションを閉じる
    • Session::commit - トランザクションをコミットする
    • Session::createSchema - 新しいスキーマを作成する
    • Session::dropSchema - スキーマを削除します
    • Session::generateUUID - 新しいUUIDを取得する
    • Session::getDefaultSchema - デフォルトのスキーマ名を取得する
    • Session::getSchema - 新しいスキーマオブジェクトを取得する
    • Session::getSchemas - スキーマを取得する
    • Session::getServerVersion - サーバーのバージョンを取得する
    • Session::listClients - クライアントの一覧を取得する
    • Session::quoteName - クォートを追加する
    • Session::releaseSavepoint - 設定されたセーブポイントをリリースする
    • Session::rollback - トランザクションをロールバックする
    • Session::rollbackTo - セーブポイントまでトランザクションをロールバックする
    • Session::setSavepoint - セーブポイントを作成する
    • Session::sql - SQLクエリを作成する
    • Session::startTransaction - トランザクションを開始する
    • Session::__construct - Session のコンストラクタ
    • SessionHandler::close - セッションを閉じる
    • SessionHandler::create_sid - 新規セッション ID を返す
    • SessionHandler::destroy - セッションを破棄する
    • SessionHandler::gc - 古いセッションを削除する
    • SessionHandler::open - セッションを開始する
    • SessionHandler::read - セッションのデータを読み込む
    • SessionHandler::write - セッションのデータを書き込む
    • SessionHandlerInterface::close - セッションを閉じる
    • SessionHandlerInterface::destroy - セッションを破棄する
    • SessionHandlerInterface::gc - 古いセッションを削除する
    • SessionHandlerInterface::open - セッションを開始する
    • SessionHandlerInterface::read - セッションのデータを読み込む
    • SessionHandlerInterface::write - セッションのデータを書き込む
    • SessionIdInterface::create_sid - セッションIDを作成する
    • SessionUpdateTimestampHandlerInterface::updateTimestamp - タイムスタンプを更新する
    • SessionUpdateTimestampHandlerInterface::validateId - セッションIDを検証する
    • session_abort - session 配列の変更を破棄してセッションを終了します
    • session_cache_expire - 現在のキャッシュの有効期限を取得/設定する
    • session_cache_limiter - 現在のキャッシュリミッタを取得または設定する
    • session_commit - session_write_close のエイリアス
    • session_create_id - 新しいセッションIDを作成する
    • session_decode - セッションエンコードされた文字列からセッションデータをデコードする
    • session_destroy - セッションに登録されたデータを全て破棄する
    • session_encode - 現在のセッションデータを、セッションエンコードされた文字列に変換する
    • session_gc - セッションデータのガベージコレクションを実行する
    • session_get_cookie_params - セッションクッキーのパラメータを得る
    • session_id - 現在のセッション ID を取得または設定する
    • session_module_name - 現在のセッションモジュールを取得または設定する
    • session_name - 現在のセッション名を取得または設定する
    • session_regenerate_id - 現在のセッションIDを新しく生成したものと置き換える
    • session_register_shutdown - セッションのシャットダウン関数
    • session_reset - session 配列を元の値で再初期化します
    • session_save_path - 現在のセッションデータ保存パスを取得または設定する
    • session_set_cookie_params - セッションクッキーパラメータを設定する
    • session_set_save_handler - ユーザー定義のセッション保存関数を設定する
    • session_start - 新しいセッションを開始、あるいは既存のセッションを再開する
    • session_status - 現在のセッションの状態を返す
    • session_unset - 全てのセッション変数を開放する
    • session_write_close - セッションデータを書き込んでセッションを終了する
    • setcookie - クッキーを送信する
    • setlocale - ロケール情報を設定する
    • setrawcookie - 値を URL エンコードせずにクッキーを送信する
    • settype - 変数の型をセットする
    • set_error_handler - ユーザー定義のエラーハンドラ関数を設定する
    • set_exception_handler - ユーザー定義の例外ハンドラ関数を設定する
    • set_file_buffer - stream_set_write_buffer のエイリアス
    • set_include_path - include_path 設定オプションをセットする
    • set_time_limit - 実行時間の最大値を制限する
    • sha1 - 文字列の sha1 ハッシュを計算する
    • sha1_file - ファイルの sha1 ハッシュを計算する
    • shell_exec - シェルによりコマンドを実行し、文字列として出力全体を返す
    • shmop_close - 共有メモリブロックを閉じる
    • shmop_delete - 共有メモリブロックを削除する
    • shmop_open - 共有メモリブロックを作成またはオープンする
    • shmop_read - 共有メモリブロックからデータを読み取る
    • shmop_size - 共有メモリブロックの大きさを取得する
    • shmop_write - 共有メモリブロックにデータを書き込む
    • shm_attach - 共有メモリセグメントを作成またはオープンする
    • shm_detach - 共有メモリセグメントへの接続を閉じる
    • shm_get_var - 共有メモリから変数を返す
    • shm_has_var - 特定のエントリが存在するかどうかを調べる
    • shm_put_var - 共有メモリの変数を挿入または更新する
    • shm_remove - Unix システムから共有メモリを削除する
    • shm_remove_var - 共有メモリから変数を削除する
    • show_source - highlight_file のエイリアス
    • shuffle - 配列をシャッフルする
    • simdjson_decode - Decodes a JSON string
    • simdjson_is_valid - Check if a JSON string is valid
    • simdjson_key_count - Returns the value at a JSON pointer.
    • simdjson_key_exists - Check if the JSON contains the value referred to by a JSON pointer.
    • simdjson_key_value - Decodes the value of a JSON string located at the requested JSON pointer.
    • similar_text - 二つの文字列の間の類似性を計算する
    • SimpleXMLElement::addAttribute - SimpleXML 要素に属性を追加する
    • SimpleXMLElement::addChild - XML ノードに子要素を追加する
    • SimpleXMLElement::asXML - SimpleXML 要素に基づき整形式の XML 文字列を返す
    • SimpleXMLElement::attributes - 要素の属性を定義する
    • SimpleXMLElement::children - 指定したノードの子ノードを見付ける
    • SimpleXMLElement::count - 子要素を数える
    • SimpleXMLElement::current - 現在の要素を返す
    • SimpleXMLElement::getChildren - 現在の要素の子要素を返す
    • SimpleXMLElement::getDocNamespaces - ドキュメントで宣言されている名前空間を返す
    • SimpleXMLElement::getName - XML 要素の名前を取得する
    • SimpleXMLElement::getNamespaces - ドキュメントで使用している名前空間を返す
    • SimpleXMLElement::hasChildren - 現在の要素が子要素を持つかどうかを調べる
    • SimpleXMLElement::key - 現在のキーを返す
    • SimpleXMLElement::next - 次の要素に移動する
    • SimpleXMLElement::registerXPathNamespace - 次の XPath クエリ用の prefix/ns コンテキストを作成する
    • SimpleXMLElement::rewind - 最初の要素に巻き戻す
    • SimpleXMLElement::saveXML - SimpleXMLElement::asXML のエイリアス
    • SimpleXMLElement::valid - 現在の要素が有効かどうかを調べる
    • SimpleXMLElement::xpath - XML データに Xpath クエリを実行する
    • SimpleXMLElement::__construct - 新しい SimpleXMLElement オブジェクトを作成する
    • SimpleXMLElement::__toString - 文字列で要素の内容を返す
    • simplexml_import_dom - DOM ノードから SimpleXMLElement オブジェクトを取得する
    • simplexml_load_file - XMLファイルをパースし、オブジェクトに代入する
    • simplexml_load_string - XML 文字列をオブジェクトに代入する
    • sin - 正弦（サイン）
    • sinh - 双曲線正弦（ハイパボリックサイン）
    • sizeof - count のエイリアス
    • sleep - 実行を遅延させる
    • snmp2_get - SNMP オブジェクトを取得する
    • snmp2_getnext - 指定したオブジェクト ID に続く SNMP オブジェクトを取得する
    • snmp2_real_walk - 指定したすべてのオブジェクトとそのオブジェクト ID を返す
    • snmp2_set - SNMP オブジェクトの値を設定する
    • snmp2_walk - すべての SNMP オブジェクトをエージェントから取得する
    • snmp3_get - SNMP オブジェクトを取得する
    • snmp3_getnext - 指定したオブジェクト ID に続く SNMP オブジェクトを取得する
    • snmp3_real_walk - 指定したすべてのオブジェクトとそのオブジェクト ID を返す
    • snmp3_set - SNMP オブジェクトの値を設定する
    • snmp3_walk - すべての SNMP オブジェクトをエージェントから取得する
    • SNMP::close - SNMP セッションを閉じる
    • SNMP::get - SNMP オブジェクトを取得する
    • SNMP::getErrno - 直近のエラーコードを取得する
    • SNMP::getError - 直近のエラーメッセージを取得する
    • SNMP::getnext - 指定したオブジェクト ID に続く SNMP オブジェクトを取得する
    • SNMP::set - SNMP オブジェクトの値を設定する
    • SNMP::setSecurity - セキュリティ関連の SNMPv3 セッションパラメータを設定する
    • SNMP::walk - SNMP オブジェクトのサブツリーを取得する
    • SNMP::__construct - リモート SNMP エージェントへのセッションを表す SNMP インスタンスを作成する
    • snmpget - SNMP オブジェクトを取得する
    • snmpgetnext - 指定したオブジェクト ID に続く SNMP オブジェクトを取得する
    • snmprealwalk - 指定したオブジェクトに関するオブジェクト ID を含むすべてのオブジェクトを返す
    • snmpset - SNMP オブジェクトの値を設定する
    • snmpwalk - エージェントから全ての SNMP オブジェクトを取得する
    • snmpwalkoid - ネットワークエンティティに関する情報ツリーを検索する
    • snmp_get_quick_print - NET-SNMP ライブラリの quick_print の現在の設定値を取得する
    • snmp_get_valueretrieval - SNMP の値が返される方法を返す
    • snmp_read_mib - アクティブな MIB ツリーの中に MIB ファイルを読み込んでパースする
    • snmp_set_enum_print - すべての enum を、実際の整数値ではなく enum 値とともに返す
    • snmp_set_oid_numeric_print - snmp_set_oid_output_format のエイリアス
    • snmp_set_oid_output_format - OID の出力形式を設定する
    • snmp_set_quick_print - NET-SNMP ライブラリで enable の値を設定する
    • snmp_set_valueretrieval - SNMP の値が返される方法を設定する
    • SoapClient::__call - SOAP 関数をコールする (非推奨)
    • SoapClient::__construct - SoapClient のコンストラクタ
    • SoapClient::__doRequest - SOAP リクエストを実行する
    • SoapClient::__getCookies - クッキーの一覧を取得する
    • SoapClient::__getFunctions - SOAP 関数の一覧を返す
    • SoapClient::__getLastRequest - 直近の SOAP リクエストを返す
    • SoapClient::__getLastRequestHeaders - 直近の SOAP リクエストヘッダを返す
    • SoapClient::__getLastResponse - 直近の SOAP レスポンスを返す
    • SoapClient::__getLastResponseHeaders - 直近の SOAP レスポンスヘッダを返す
    • SoapClient::__getTypes - SOAP 型の一覧を返す
    • SoapClient::__setCookie - SOAP リクエストと共に送信されるクッキーを設定する
    • SoapClient::__setLocation - 使用するウェブサービスの場所を設定する
    • SoapClient::__setSoapHeaders - 以降のコール用の SOAP ヘッダを設定する
    • SoapClient::__soapCall - SOAP 関数をコールする
    • SoapFault::__construct - SoapFault コンストラクタ
    • SoapFault::__toString - SoapFault の文字列表現を取得する
    • SoapHeader::__construct - SoapHeader コンストラクタ
    • SoapParam::__construct - SoapParam コンストラクタ
    • SoapServer::addFunction - SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する
    • SoapServer::addSoapHeader - SOAP ヘッダをレスポンスに追加する
    • SoapServer::fault - エラーを示す SoapServer フォールト を発行する
    • SoapServer::getFunctions - 定義されている関数の一覧を返す
    • SoapServer::handle - SOAP リクエストを処理する
    • SoapServer::setClass - SOAP リクエストを処理するクラスを設定する
    • SoapServer::setObject - SOAP リクエストの処理に使用するオブジェクトを設定する
    • SoapServer::setPersistence - SoapServer の持続モードを設定する
    • SoapServer::__construct - SoapServer コンストラクタ
    • SoapVar::__construct - SoapVar コンストラクタ
    • socket_accept - ソケットへの接続を許可する
    • socket_addrinfo_bind - 与えられた addrinfo から、ソケットを作成してバインドする
    • socket_addrinfo_connect - 与えられた addrinfo から、ソケットを作って接続する
    • socket_addrinfo_explain - addrinfo に関する情報を取得する
    • socket_addrinfo_lookup - 与えられたホスト名に関する getaddrinfo の内容を配列で取得する
    • socket_atmark - ソケットに帯域外マークが付けられているかを調べる
    • socket_bind - ソケットに名前をバインドする
    • socket_clear_error - ソケットのエラーまたは直近のエラーコードをクリアする
    • socket_close - Socket クラスのインスタンスを閉じる
    • socket_cmsg_space - メッセージバッファサイズを計算する
    • socket_connect - ソケット上の接続を初期化する
    • socket_create - ソケット（通信時の終端）を作成する
    • socket_create_listen - 接続を受けつけるためにポートにソケットをオープンする
    • socket_create_pair - 区別できないソケットの組を作成し、配列に保存する
    • socket_export_stream - ソケットをカプセル化したストリームに、ソケットをエクスポートする
    • socket_getopt - socket_get_option のエイリアス
    • socket_getpeername - 指定したソケットのリモート側に問い合わせる
    • socket_getsockname - 指定したソケットのローカル側に問い合わせ、その型に応じてホスト/ポート、あるいは Unix ファイルシステムのパスを返す
    • socket_get_option - ソケットのオプションを取得する
    • socket_get_status - stream_get_meta_data のエイリアス
    • socket_import_stream - ストリームをインポートする
    • socket_last_error - ソケットの直近のエラーを返す
    • socket_listen - ソケット上で接続待ち(listen)する
    • socket_read - ソケットから最大バイト長まで読みこむ
    • socket_recv - 接続したソケットからデータを受信する
    • socket_recvfrom - 接続しているかどうかによらず、ソケットからデータを受信する
    • socket_recvmsg - メッセージを読む
    • socket_select - 与えられたソケットの配列に対し、指定した有効時間で select() システムコールを実行する
    • socket_send - 接続したソケットにデータを送信する
    • socket_sendmsg - メッセージを送信する
    • socket_sendto - 接続しているかどうかによらずソケットにメッセージを送信する
    • socket_setopt - socket_set_option のエイリアス
    • socket_set_block - ソケットのブロッキングモードを設定する
    • socket_set_blocking - stream_set_blocking のエイリアス
    • socket_set_nonblock - ソケットリソースを非ブロックモードに設定する
    • socket_set_option - ソケットのオプションを設定する
    • socket_set_timeout - stream_set_timeout のエイリアス
    • socket_shutdown - 受信、送信、または送受信用のソケットをシャットダウンする
    • socket_strerror - ソケットエラーの内容を文字列として返す
    • socket_write - ソケットに書き込む
    • socket_wsaprotocol_info_export - WSAPROTOCOL_INFO 構造体をエクスポートする
    • socket_wsaprotocol_info_import - 別のプロセスからソケットをインポートする
    • socket_wsaprotocol_info_release - エクスポートした WSAPROTOCOL_INF 構造体を解放する
    • sodium_add - 巨大な数を加算する
    • sodium_base642bin - base64 エンコードされた文字列を、生バイナリにデコードする
    • sodium_bin2base64 - 生バイナリを base64 文字列にエンコードする
    • sodium_bin2hex - 16進数にエンコードする
    • sodium_compare - 巨大な数を比較する
    • sodium_crypto_aead_aes256gcm_decrypt - AES-256-GCM を用いてメッセージを検証し、復号する
    • sodium_crypto_aead_aes256gcm_encrypt - AES-256-GCM を使って暗号化し、認証を行う
    • sodium_crypto_aead_aes256gcm_is_available - ハードウェアが AES256-GCM をサポートしているかを確認する
    • sodium_crypto_aead_aes256gcm_keygen - ランダムな AES-256-GCM 暗号化キーを生成する
    • sodium_crypto_aead_chacha20poly1305_decrypt - ChaCha20-Poly1305 を用いてメッセージを検証し、復号する
    • sodium_crypto_aead_chacha20poly1305_encrypt - ChaCha20-Poly1305 を使って暗号化し、認証を行う
    • sodium_crypto_aead_chacha20poly1305_ietf_decrypt - 暗号化されたテキストが、有効なタグを持っているかを調べる
    • sodium_crypto_aead_chacha20poly1305_ietf_encrypt - メッセージを暗号化する
    • sodium_crypto_aead_chacha20poly1305_ietf_keygen - ランダムな ChaCha20-Poly1305 (IETF) 暗号化キーを生成する
    • sodium_crypto_aead_chacha20poly1305_keygen - ランダムな ChaCha20-Poly1305 暗号化キーを生成する
    • sodium_crypto_aead_xchacha20poly1305_ietf_decrypt - XChaCha20-Poly1305 を用いてメッセージを検証し、復号する(AEADモードのうちもっとも好ましい)
    • sodium_crypto_aead_xchacha20poly1305_ietf_encrypt - XChaCha20-Poly1305 を使って暗号化し、認証を行う(AEADモードのうちもっとも好ましい)
    • sodium_crypto_aead_xchacha20poly1305_ietf_keygen - ランダムな XChaCha20-Poly1305 暗号化キーを生成する
    • sodium_crypto_auth - メッセージに対応するタグを計算する
    • sodium_crypto_auth_keygen - sodium_crypto_auth で使う、ランダムな鍵を生成する
    • sodium_crypto_auth_verify - メッセージのタグが有効かどうかを検証する
    • sodium_crypto_box - 認証付きの公開鍵による暗号化
    • sodium_crypto_box_keypair - 秘密鍵と、それに対応する公開鍵をランダムに生成する
    • sodium_crypto_box_keypair_from_secretkey_and_publickey - 秘密鍵と公開鍵から、鍵ペアを生成する
    • sodium_crypto_box_open - 認証付きの公開鍵による復号
    • sodium_crypto_box_publickey - crypto_box 鍵ペアから、公開鍵を取り出す
    • sodium_crypto_box_publickey_from_secretkey - 秘密鍵から公開鍵を計算する
    • sodium_crypto_box_seal - 匿名の公開鍵暗号による暗号化
    • sodium_crypto_box_seal_open - 匿名の公開鍵暗号による復号
    • sodium_crypto_box_secretkey - crypto_box 鍵ペアから、秘密鍵を取り出す
    • sodium_crypto_box_seed_keypair - 単一の鍵から、結果がひとつに定まる鍵ペアを派生させる
    • sodium_crypto_core_ristretto255_add - 要素を追加する
    • sodium_crypto_core_ristretto255_from_hash - ベクトルをマップする
    • sodium_crypto_core_ristretto255_is_valid_point - 座標が ristretto255 曲線上にあるかを調べる
    • sodium_crypto_core_ristretto255_random - ランダムな鍵を生成する
    • sodium_crypto_core_ristretto255_scalar_add - スカラー値を追加する
    • sodium_crypto_core_ristretto255_scalar_complement - The sodium_crypto_core_ristretto255_scalar_complement purpose
    • sodium_crypto_core_ristretto255_scalar_invert - スカラー値を反転させる
    • sodium_crypto_core_ristretto255_scalar_mul - スカラー値を乗算する
    • sodium_crypto_core_ristretto255_scalar_negate - スカラー値の論理否定を行う
    • sodium_crypto_core_ristretto255_scalar_random - ランダムな鍵を生成する
    • sodium_crypto_core_ristretto255_scalar_reduce - スカラー値を縮小する
    • sodium_crypto_core_ristretto255_scalar_sub - スカラー値を減らす
    • sodium_crypto_core_ristretto255_sub - 要素の値を減らす
    • sodium_crypto_generichash - メッセージのハッシュ値を得る
    • sodium_crypto_generichash_final - ハッシュ値を計算する
    • sodium_crypto_generichash_init - ストリーミングのためにハッシュを初期化する
    • sodium_crypto_generichash_keygen - ランダムなハッシュキーを生成する
    • sodium_crypto_generichash_update - メッセージをハッシュに追加する
    • sodium_crypto_kdf_derive_from_key - サブキーを派生させる
    • sodium_crypto_kdf_keygen - KDF インターフェイスのために、ランダムなルートキーを生成する
    • sodium_crypto_kx_client_session_keys - クライアント側のセッションキーを計算する
    • sodium_crypto_kx_keypair - 新しい sodium の鍵ペアを生成する
    • sodium_crypto_kx_publickey - crypto_kx 鍵ペアから、公開鍵を取り出す
    • sodium_crypto_kx_secretkey - crypto_kx 鍵ペアから、秘密鍵を取り出す
    • sodium_crypto_kx_seed_keypair - Description
    • sodium_crypto_kx_server_session_keys - サーバー側のセッションキーを計算する
    • sodium_crypto_pwhash - Argon2 アルゴリズムを使い、パスワードからキーを導出する
    • sodium_crypto_pwhash_scryptsalsa208sha256 - scrypt を使い、パスワードからキーを導出する
    • sodium_crypto_pwhash_scryptsalsa208sha256_str - ASCII 文字列でエンコードされたハッシュを得る
    • sodium_crypto_pwhash_scryptsalsa208sha256_str_verify - パスワードが、有効なパスワード検証文字列かを調べる
    • sodium_crypto_pwhash_str - ASCII 文字でエンコードされたハッシュ値を得る
    • sodium_crypto_pwhash_str_needs_rehash - パスワードを再計算する必要があるかを判定する
    • sodium_crypto_pwhash_str_verify - パスワードが、ハッシュ値と一致するかを調べる
    • sodium_crypto_scalarmult - ユーザーの秘密鍵と、別のユーザーの公開鍵を使って、共有シークレットを計算する
    • sodium_crypto_scalarmult_base - sodium_crypto_box_publickey_from_secretkey のエイリアス
    • sodium_crypto_scalarmult_ristretto255 - 共有シークレットを計算する
    • sodium_crypto_scalarmult_ristretto255_base - 秘密鍵から公開鍵を計算する
    • sodium_crypto_secretbox - 認証付きの共有鍵による暗号化
    • sodium_crypto_secretbox_keygen - sodium_crypto_secretbox で使うランダムな鍵を生成する
    • sodium_crypto_secretbox_open - 認証付きの共有鍵による復号
    • sodium_crypto_secretstream_xchacha20poly1305_init_pull - 復号のためのシークレットストリームのコンテキストを初期化する
    • sodium_crypto_secretstream_xchacha20poly1305_init_push - 暗号化のために、シークレットストリームのコンテキストを初期化する
    • sodium_crypto_secretstream_xchacha20poly1305_keygen - ランダムなシークレットストリームのキーを生成する
    • sodium_crypto_secretstream_xchacha20poly1305_pull - 暗号化されたストリームから、データのチャンクを複号する
    • sodium_crypto_secretstream_xchacha20poly1305_push - ストリーミングAPI で安全に復号できるように、データのチャンクを暗号化する
    • sodium_crypto_secretstream_xchacha20poly1305_rekey - シークレットストリームのステート中で、鍵を入れ替える
    • sodium_crypto_shorthash - メッセージと鍵のための短いハッシュ値を計算する
    • sodium_crypto_shorthash_keygen - 鍵のためのランダムなバイト値を得る
    • sodium_crypto_sign - メッセージに署名する
    • sodium_crypto_sign_detached - メッセージに署名する
    • sodium_crypto_sign_ed25519_pk_to_curve25519 - Ed25519 公開鍵を、Curve25519 公開鍵に変換する
    • sodium_crypto_sign_ed25519_sk_to_curve25519 - Ed25519 秘密鍵を、Curve25519 秘密鍵に変換する
    • sodium_crypto_sign_keypair - 秘密鍵と、対応する公開鍵をランダムに生成する
    • sodium_crypto_sign_keypair_from_secretkey_and_publickey - 秘密鍵と公開鍵を結合する
    • sodium_crypto_sign_open - 署名済みのメッセージが、有効な署名を持っているかを調べる
    • sodium_crypto_sign_publickey - 鍵ペアから、Ed25519 形式の公開鍵を取り出す
    • sodium_crypto_sign_publickey_from_secretkey - 秘密鍵から、Ed25519 形式の公開鍵を取り出す
    • sodium_crypto_sign_secretkey - 鍵ペアから、Ed25519 形式の秘密鍵を取り出す
    • sodium_crypto_sign_seed_keypair - 単一の鍵から、結果がひとつに定まる鍵ペアを派生させる
    • sodium_crypto_sign_verify_detached - メッセージの署名を検証する
    • sodium_crypto_stream - シードから、結果がひとつに定まるバイト列を生成する
    • sodium_crypto_stream_keygen - sodium_crypto_stream で用いる、ランダムな鍵を生成する
    • sodium_crypto_stream_xchacha20 - 秘密鍵と nonce を、疑似ランダムなバイト列の鍵ストリームに展開する
    • sodium_crypto_stream_xchacha20_keygen - ランダムな暗号化キーを生成する
    • sodium_crypto_stream_xchacha20_xor - nonce と秘密鍵を使ってメッセージを暗号化する(認証なし)
    • sodium_crypto_stream_xchacha20_xor_ic - nonce と秘密鍵を使ってメッセージを暗号化する(認証なし)
    • sodium_crypto_stream_xor - 認証を行わずにメッセージを暗号化する
    • sodium_hex2bin - 16進エンコードされたバイナリ文字列をデコードする
    • sodium_increment - 巨大な数をインクリメントする
    • sodium_memcmp - 定数時間での文字列の比較
    • sodium_memzero - 文字列をNUL文字で上書きする
    • sodium_pad - パディングデータを追加する
    • sodium_unpad - パディングを削除する
    • SolrClient::addDocument - Adds a document to the index
    • SolrClient::addDocuments - Adds a collection of SolrInputDocument instances to the index
    • SolrClient::commit - Finalizes all add/deletes made to the index
    • SolrClient::deleteById - Delete by Id
    • SolrClient::deleteByIds - Deletes by Ids
    • SolrClient::deleteByQueries - Removes all documents matching any of the queries
    • SolrClient::deleteByQuery - Deletes all documents matching the given query
    • SolrClient::getById - Get Document By Id. Utilizes Solr Realtime Get (RTG)
    • SolrClient::getByIds - Get Documents by their Ids. Utilizes Solr Realtime Get (RTG)
    • SolrClient::getDebug - Returns the debug data for the last connection attempt
    • SolrClient::getOptions - Returns the client options set internally
    • SolrClient::optimize - Defragments the index
    • SolrClient::ping - Checks if Solr server is still up
    • SolrClient::query - Sends a query to the server
    • SolrClient::request - Sends a raw update request
    • SolrClient::rollback - Rollbacks all add/deletes made to the index since the last commit
    • SolrClient::setResponseWriter - Sets the response writer used to prepare the response from Solr
    • SolrClient::setServlet - Changes the specified servlet type to a new value
    • SolrClient::system - Retrieve Solr Server information
    • SolrClient::threads - スレッドの状態をチェック
    • SolrClient::__construct - Constructor for the SolrClient object
    • SolrClient::__destruct - SolrClient に対するデストラクタ
    • SolrClientException::getInternalInfo - 例外がスローされた際の内部情報を返す
    • SolrCollapseFunction::getField - Returns the field that is being collapsed on
    • SolrCollapseFunction::getHint - Returns collapse hint
    • SolrCollapseFunction::getMax - Returns max parameter
    • SolrCollapseFunction::getMin - Returns min parameter
    • SolrCollapseFunction::getNullPolicy - Returns null policy
    • SolrCollapseFunction::getSize - Returns size parameter
    • SolrCollapseFunction::setField - Sets the field to collapse on
    • SolrCollapseFunction::setHint - Sets collapse hint
    • SolrCollapseFunction::setMax - Selects the group heads by the max value of a numeric field or function query
    • SolrCollapseFunction::setMin - Sets the initial size of the collapse data structures when collapsing on a numeric field only
    • SolrCollapseFunction::setNullPolicy - Sets the NULL Policy
    • SolrCollapseFunction::setSize - Sets the initial size of the collapse data structures when collapsing on a numeric field only
    • SolrCollapseFunction::__construct - Constructor
    • SolrCollapseFunction::__toString - Returns a string representing the constructed collapse function
    • SolrDisMaxQuery::addBigramPhraseField - Adds a Phrase Bigram Field (pf2 parameter)
    • SolrDisMaxQuery::addBoostQuery - Adds a boost query field with value and optional boost (bq parameter)
    • SolrDisMaxQuery::addPhraseField - Adds a Phrase Field (pf parameter)
    • SolrDisMaxQuery::addQueryField - Add a query field with optional boost (qf parameter)
    • SolrDisMaxQuery::addTrigramPhraseField - Adds a Trigram Phrase Field (pf3 parameter)
    • SolrDisMaxQuery::addUserField - Adds a field to User Fields Parameter (uf)
    • SolrDisMaxQuery::removeBigramPhraseField - Removes phrase bigram field (pf2 parameter)
    • SolrDisMaxQuery::removeBoostQuery - Removes a boost query partial by field name (bq)
    • SolrDisMaxQuery::removePhraseField - Removes a Phrase Field (pf parameter)
    • SolrDisMaxQuery::removeQueryField - Removes a Query Field (qf parameter)
    • SolrDisMaxQuery::removeTrigramPhraseField - Removes a Trigram Phrase Field (pf3 parameter)
    • SolrDisMaxQuery::removeUserField - Removes a field from The User Fields Parameter (uf)
    • SolrDisMaxQuery::setBigramPhraseFields - Sets Bigram Phrase Fields and their boosts (and slops) using pf2 parameter
    • SolrDisMaxQuery::setBigramPhraseSlop - Sets Bigram Phrase Slop (ps2 parameter)
    • SolrDisMaxQuery::setBoostFunction - Sets a Boost Function (bf parameter)
    • SolrDisMaxQuery::setBoostQuery - Directly Sets Boost Query Parameter (bq)
    • SolrDisMaxQuery::setMinimumMatch - Set Minimum "Should" Match (mm)
    • SolrDisMaxQuery::setPhraseFields - Sets Phrase Fields and their boosts (and slops) using pf2 parameter
    • SolrDisMaxQuery::setPhraseSlop - Sets the default slop on phrase queries (ps parameter)
    • SolrDisMaxQuery::setQueryAlt - Set Query Alternate (q.alt parameter)
    • SolrDisMaxQuery::setQueryPhraseSlop - Specifies the amount of slop permitted on phrase queries explicitly included in the user's query string (qf parameter)
    • SolrDisMaxQuery::setTieBreaker - Sets Tie Breaker parameter (tie parameter)
    • SolrDisMaxQuery::setTrigramPhraseFields - Directly Sets Trigram Phrase Fields (pf3 parameter)
    • SolrDisMaxQuery::setTrigramPhraseSlop - Sets Trigram Phrase Slop (ps3 parameter)
    • SolrDisMaxQuery::setUserFields - Sets User Fields parameter (uf)
    • SolrDisMaxQuery::useDisMaxQueryParser - Switch QueryParser to be DisMax Query Parser
    • SolrDisMaxQuery::useEDisMaxQueryParser - Switch QueryParser to be EDisMax
    • SolrDisMaxQuery::__construct - Class Constructor
    • SolrDocument::addField - 文書にフィールドを追加
    • SolrDocument::clear - Drops all the fields in the document
    • SolrDocument::current - 現行のフィールドを取得
    • SolrDocument::deleteField - 文書からフィールドを除去
    • SolrDocument::fieldExists - Checks if a field exists in the document
    • SolrDocument::getChildDocuments - Returns an array of child documents (SolrDocument)
    • SolrDocument::getChildDocumentsCount - Returns the number of child documents
    • SolrDocument::getField - 名前でフィールドを取得
    • SolrDocument::getFieldCount - この文書内のフィールド数を返す
    • SolrDocument::getFieldNames - 文書内のフィールド名の配列を返す
    • SolrDocument::getInputDocument - Returns a SolrInputDocument equivalent of the object
    • SolrDocument::hasChildDocuments - Checks whether the document has any child documents
    • SolrDocument::key - 現行のキーを返す
    • SolrDocument::merge - Merges source to the current SolrDocument
    • SolrDocument::next - 内部ポインタを次のフィールドに移動
    • SolrDocument::offsetExists - 特定のフィールドが存在するかどうかチェック
    • SolrDocument::offsetGet - フィールドを取得
    • SolrDocument::offsetSet - 文書にフィールドを追加
    • SolrDocument::offsetUnset - フィールドを除去
    • SolrDocument::reset - SolrDocument::clear のエイリアス
    • SolrDocument::rewind - 内部ポインタを先頭にリセット
    • SolrDocument::serialize - カスタムのシリアライズで使われます
    • SolrDocument::sort - Sorts the fields in the document
    • SolrDocument::toArray - 文書の配列表現を返す
    • SolrDocument::unserialize - Custom serialization of SolrDocument objects
    • SolrDocument::valid - Checks if the current position internally is still valid
    • SolrDocument::__clone - SolrDocument オブジェクトのコピーを作成
    • SolrDocument::__construct - コンストラクタ
    • SolrDocument::__destruct - デストラクタ
    • SolrDocument::__get - プロパティとしてフィールドにアクセス
    • SolrDocument::__isset - フィールドが存在するかチェック
    • SolrDocument::__set - Adds another field to the document
    • SolrDocument::__unset - 文書からフィールドを除去
    • SolrDocumentField::__construct - コンストラクタ
    • SolrDocumentField::__destruct - デストラクタ
    • SolrException::getInternalInfo - 例外がスローされた際の内部情報を返す
    • SolrGenericResponse::__construct - コンストラクタ
    • SolrGenericResponse::__destruct - デストラクタ
    • SolrIllegalArgumentException::getInternalInfo - 例外がスローされた際の内部情報を返す
    • SolrIllegalOperationException::getInternalInfo - 例外がスローされた際の内部情報を返す
    • SolrInputDocument::addChildDocument - Adds a child document for block indexing
    • SolrInputDocument::addChildDocuments - Adds an array of child documents
    • SolrInputDocument::addField - 文書にフィールドを追加
    • SolrInputDocument::clear - 入力した文書をリセット
    • SolrInputDocument::deleteField - 文書からフィールドを除去
    • SolrInputDocument::fieldExists - フィールドが存在するかチェック
    • SolrInputDocument::getBoost - 文書に対する現行の boost 値を取得
    • SolrInputDocument::getChildDocuments - Returns an array of child documents (SolrInputDocument)
    • SolrInputDocument::getChildDocumentsCount - Returns the number of child documents
    • SolrInputDocument::getField - 名前でフィールドを取得
    • SolrInputDocument::getFieldBoost - 特定のフィールドに対する boost 値を取得
    • SolrInputDocument::getFieldCount - 文書内のフィールド数を返す
    • SolrInputDocument::getFieldNames - 文書内のフィールドを全て含む配列を返す
    • SolrInputDocument::hasChildDocuments - Returns true if the document has any child documents
    • SolrInputDocument::merge - Merges one input document into another
    • SolrInputDocument::reset - SolrInputDocument::clear のエイリアス
    • SolrInputDocument::setBoost - この文書に対する boost 値を設定
    • SolrInputDocument::setFieldBoost - フィールドに対するインデキシング時間の boost 値を設定
    • SolrInputDocument::sort - Sorts the fields within the document
    • SolrInputDocument::toArray - 入力した文書の配列表現を返す
    • SolrInputDocument::__clone - SolrDocument のコピーを作成
    • SolrInputDocument::__construct - コンストラクタ
    • SolrInputDocument::__destruct - デストラクタ
    • SolrModifiableParams::__construct - コンストラクタ
    • SolrModifiableParams::__destruct - デストラクタ
    • SolrObject::getPropertyNames - 全てのプロパティ名の配列を返す
    • SolrObject::offsetExists - プロパティが存在するかチェック
    • SolrObject::offsetGet - プロパティを取得するために使用される
    • SolrObject::offsetSet - プロパティに対して値を設定
    • SolrObject::offsetUnset - プロパティに対して値の設定を解除
    • SolrObject::__construct - Solr オブジェクトを生成
    • SolrObject::__destruct - デストラクタ
    • SolrParams::add - SolrParams::addParam のエイリアス
    • SolrParams::addParam - オブジェクトにパラメータを追加
    • SolrParams::get - SolrParams::getParam のエイリアス
    • SolrParams::getParam - パラメータ値を返す
    • SolrParams::getParams - URL エンコードされていないパラメータの配列を返す
    • SolrParams::getPreparedParams - URL エンコードされたパラメータの配列を返す
    • SolrParams::serialize - カスタムのシリアライズで使われます
    • SolrParams::set - SolrParams::setParam のエイリアス
    • SolrParams::setParam - パラメータを指定された値に設定
    • SolrParams::toString - オブジェクト内の名前と値のペアのパラメータを全て返します
    • SolrParams::unserialize - カスタムのシリアライズで使われます
    • SolrPingResponse::getResponse - サーバーからのレスポンスを返す
    • SolrPingResponse::__construct - コンストラクタ
    • SolrPingResponse::__destruct - デストラクタ
    • SolrQuery::addExpandFilterQuery - Overrides main filter query, determines which documents to include in the main group
    • SolrQuery::addExpandSortField - Orders the documents within the expanded groups (expand.sort parameter)
    • SolrQuery::addFacetDateField - Maps to facet.date
    • SolrQuery::addFacetDateOther - Adds another facet.date.other parameter
    • SolrQuery::addFacetField - Adds another field to the facet
    • SolrQuery::addFacetQuery - Adds a facet query
    • SolrQuery::addField - Specifies which fields to return in the result
    • SolrQuery::addFilterQuery - Specifies a filter query
    • SolrQuery::addGroupField - Add a field to be used to group results
    • SolrQuery::addGroupFunction - Allows grouping results based on the unique values of a function query (group.func parameter)
    • SolrQuery::addGroupQuery - Allows grouping of documents that match the given query
    • SolrQuery::addGroupSortField - Add a group sort field (group.sort parameter)
    • SolrQuery::addHighlightField - Maps to hl.fl
    • SolrQuery::addMltField - Sets a field to use for similarity
    • SolrQuery::addMltQueryField - Maps to mlt.qf
    • SolrQuery::addSortField - Used to control how the results should be sorted
    • SolrQuery::addStatsFacet - Requests a return of sub results for values within the given facet
    • SolrQuery::addStatsField - Maps to stats.field parameter
    • SolrQuery::collapse - Collapses the result set to a single document per group
    • SolrQuery::getExpand - Returns true if group expanding is enabled
    • SolrQuery::getExpandFilterQueries - Returns the expand filter queries
    • SolrQuery::getExpandQuery - Returns the expand query expand.q parameter
    • SolrQuery::getExpandRows - Returns The number of rows to display in each group (expand.rows)
    • SolrQuery::getExpandSortFields - Returns an array of fields
    • SolrQuery::getFacet - Returns the value of the facet parameter
    • SolrQuery::getFacetDateEnd - Returns the value for the facet.date.end parameter
    • SolrQuery::getFacetDateFields - Returns all the facet.date fields
    • SolrQuery::getFacetDateGap - Returns the value of the facet.date.gap parameter
    • SolrQuery::getFacetDateHardEnd - Returns the value of the facet.date.hardend parameter
    • SolrQuery::getFacetDateOther - Returns the value for the facet.date.other parameter
    • SolrQuery::getFacetDateStart - Returns the lower bound for the first date range for all date faceting on this field
    • SolrQuery::getFacetFields - Returns all the facet fields
    • SolrQuery::getFacetLimit - Returns the maximum number of constraint counts that should be returned for the facet fields
    • SolrQuery::getFacetMethod - Returns the value of the facet.method parameter
    • SolrQuery::getFacetMinCount - Returns the minimum counts for facet fields should be included in the response
    • SolrQuery::getFacetMissing - Returns the current state of the facet.missing parameter
    • SolrQuery::getFacetOffset - Returns an offset into the list of constraints to be used for pagination
    • SolrQuery::getFacetPrefix - Returns the facet prefix
    • SolrQuery::getFacetQueries - Returns all the facet queries
    • SolrQuery::getFacetSort - Returns the facet sort type
    • SolrQuery::getFields - Returns the list of fields that will be returned in the response
    • SolrQuery::getFilterQueries - Returns an array of filter queries
    • SolrQuery::getGroup - Returns true if grouping is enabled
    • SolrQuery::getGroupCachePercent - Returns group cache percent value
    • SolrQuery::getGroupFacet - Returns the group.facet parameter value
    • SolrQuery::getGroupFields - Returns group fields (group.field parameter values)
    • SolrQuery::getGroupFormat - Returns the group.format value
    • SolrQuery::getGroupFunctions - Returns group functions (group.func parameter values)
    • SolrQuery::getGroupLimit - Returns the group.limit value
    • SolrQuery::getGroupMain - Returns the group.main value
    • SolrQuery::getGroupNGroups - Returns the group.ngroups value
    • SolrQuery::getGroupOffset - Returns the group.offset value
    • SolrQuery::getGroupQueries - Returns all the group.query parameter values
    • SolrQuery::getGroupSortFields - Returns the group.sort value
    • SolrQuery::getGroupTruncate - Returns the group.truncate value
    • SolrQuery::getHighlight - Returns the state of the hl parameter
    • SolrQuery::getHighlightAlternateField - Returns the highlight field to use as backup or default
    • SolrQuery::getHighlightFields - Returns all the fields that Solr should generate highlighted snippets for
    • SolrQuery::getHighlightFormatter - Returns the formatter for the highlighted output
    • SolrQuery::getHighlightFragmenter - Returns the text snippet generator for highlighted text
    • SolrQuery::getHighlightFragsize - Returns the number of characters of fragments to consider for highlighting
    • SolrQuery::getHighlightHighlightMultiTerm - Returns whether or not to enable highlighting for range/wildcard/fuzzy/prefix queries
    • SolrQuery::getHighlightMaxAlternateFieldLength - Returns the maximum number of characters of the field to return
    • SolrQuery::getHighlightMaxAnalyzedChars - Returns the maximum number of characters into a document to look for suitable snippets
    • SolrQuery::getHighlightMergeContiguous - Returns whether or not the collapse contiguous fragments into a single fragment
    • SolrQuery::getHighlightRegexMaxAnalyzedChars - Returns the maximum number of characters from a field when using the regex fragmenter
    • SolrQuery::getHighlightRegexPattern - Returns the regular expression for fragmenting
    • SolrQuery::getHighlightRegexSlop - Returns the deviation factor from the ideal fragment size
    • SolrQuery::getHighlightRequireFieldMatch - Returns if a field will only be highlighted if the query matched in this particular field
    • SolrQuery::getHighlightSimplePost - Returns the text which appears after a highlighted term
    • SolrQuery::getHighlightSimplePre - Returns the text which appears before a highlighted term
    • SolrQuery::getHighlightSnippets - Returns the maximum number of highlighted snippets to generate per field
    • SolrQuery::getHighlightUsePhraseHighlighter - Returns the state of the hl.usePhraseHighlighter parameter
    • SolrQuery::getMlt - Returns whether or not MoreLikeThis results should be enabled
    • SolrQuery::getMltBoost - Returns whether or not the query will be boosted by the interesting term relevance
    • SolrQuery::getMltCount - Returns the number of similar documents to return for each result
    • SolrQuery::getMltFields - Returns all the fields to use for similarity
    • SolrQuery::getMltMaxNumQueryTerms - Returns the maximum number of query terms that will be included in any generated query
    • SolrQuery::getMltMaxNumTokens - Returns the maximum number of tokens to parse in each document field that is not stored with TermVector support
    • SolrQuery::getMltMaxWordLength - Returns the maximum word length above which words will be ignored
    • SolrQuery::getMltMinDocFrequency - Returns the treshold frequency at which words will be ignored which do not occur in at least this many docs
    • SolrQuery::getMltMinTermFrequency - Returns the frequency below which terms will be ignored in the source document
    • SolrQuery::getMltMinWordLength - Returns the minimum word length below which words will be ignored
    • SolrQuery::getMltQueryFields - Returns the query fields and their boosts
    • SolrQuery::getQuery - 主なクエリーを返す
    • SolrQuery::getRows - Returns the maximum number of documents
    • SolrQuery::getSortFields - Returns all the sort fields
    • SolrQuery::getStart - Returns the offset in the complete result set
    • SolrQuery::getStats - Returns whether or not stats is enabled
    • SolrQuery::getStatsFacets - Returns all the stats facets that were set
    • SolrQuery::getStatsFields - Returns all the statistics fields
    • SolrQuery::getTerms - Returns whether or not the TermsComponent is enabled
    • SolrQuery::getTermsField - Returns the field from which the terms are retrieved
    • SolrQuery::getTermsIncludeLowerBound - Returns whether or not to include the lower bound in the result set
    • SolrQuery::getTermsIncludeUpperBound - Returns whether or not to include the upper bound term in the result set
    • SolrQuery::getTermsLimit - Returns the maximum number of terms Solr should return
    • SolrQuery::getTermsLowerBound - Returns the term to start at
    • SolrQuery::getTermsMaxCount - Returns the maximum document frequency
    • SolrQuery::getTermsMinCount - Returns the minimum document frequency to return in order to be included
    • SolrQuery::getTermsPrefix - Returns the term prefix
    • SolrQuery::getTermsReturnRaw - Whether or not to return raw characters
    • SolrQuery::getTermsSort - Returns an integer indicating how terms are sorted
    • SolrQuery::getTermsUpperBound - Returns the term to stop at
    • SolrQuery::getTimeAllowed - Returns the time in milliseconds allowed for the query to finish
    • SolrQuery::removeExpandFilterQuery - Removes an expand filter query
    • SolrQuery::removeExpandSortField - Removes an expand sort field from the expand.sort parameter
    • SolrQuery::removeFacetDateField - Removes one of the facet date fields
    • SolrQuery::removeFacetDateOther - Removes one of the facet.date.other parameters
    • SolrQuery::removeFacetField - Removes one of the facet.date parameters
    • SolrQuery::removeFacetQuery - Removes one of the facet.query parameters
    • SolrQuery::removeField - Removes a field from the list of fields
    • SolrQuery::removeFilterQuery - Removes a filter query
    • SolrQuery::removeHighlightField - Removes one of the fields used for highlighting
    • SolrQuery::removeMltField - Removes one of the moreLikeThis fields
    • SolrQuery::removeMltQueryField - Removes one of the moreLikeThis query fields
    • SolrQuery::removeSortField - Removes one of the sort fields
    • SolrQuery::removeStatsFacet - Removes one of the stats.facet parameters
    • SolrQuery::removeStatsField - Removes one of the stats.field parameters
    • SolrQuery::setEchoHandler - Toggles the echoHandler parameter
    • SolrQuery::setEchoParams - Determines what kind of parameters to include in the response
    • SolrQuery::setExpand - Enables/Disables the Expand Component
    • SolrQuery::setExpandQuery - Sets the expand.q parameter
    • SolrQuery::setExpandRows - Sets the number of rows to display in each group (expand.rows). Server Default 5
    • SolrQuery::setExplainOther - Sets the explainOther common query parameter
    • SolrQuery::setFacet - Maps to the facet parameter. Enables or disables facetting
    • SolrQuery::setFacetDateEnd - Maps to facet.date.end
    • SolrQuery::setFacetDateGap - Maps to facet.date.gap
    • SolrQuery::setFacetDateHardEnd - Maps to facet.date.hardend
    • SolrQuery::setFacetDateStart - Maps to facet.date.start
    • SolrQuery::setFacetEnumCacheMinDefaultFrequency - Sets the minimum document frequency used for determining term count
    • SolrQuery::setFacetLimit - Maps to facet.limit
    • SolrQuery::setFacetMethod - Specifies the type of algorithm to use when faceting a field
    • SolrQuery::setFacetMinCount - Maps to facet.mincount
    • SolrQuery::setFacetMissing - Maps to facet.missing
    • SolrQuery::setFacetOffset - Sets the offset into the list of constraints to allow for pagination
    • SolrQuery::setFacetPrefix - Specifies a string prefix with which to limits the terms on which to facet
    • SolrQuery::setFacetSort - Determines the ordering of the facet field constraints
    • SolrQuery::setGroup - Enable/Disable result grouping (group parameter)
    • SolrQuery::setGroupCachePercent - Enables caching for result grouping
    • SolrQuery::setGroupFacet - Sets group.facet parameter
    • SolrQuery::setGroupFormat - Sets the group format, result structure (group.format parameter)
    • SolrQuery::setGroupLimit - Specifies the number of results to return for each group. The server default value is 1
    • SolrQuery::setGroupMain - If true, the result of the first field grouping command is used as the main result list in the response, using group.format=simple
    • SolrQuery::setGroupNGroups - If true, Solr includes the number of groups that have matched the query in the results
    • SolrQuery::setGroupOffset - Sets the group.offset parameter
    • SolrQuery::setGroupTruncate - If true, facet counts are based on the most relevant document of each group matching the query
    • SolrQuery::setHighlight - Enables or disables highlighting
    • SolrQuery::setHighlightAlternateField - Specifies the backup field to use
    • SolrQuery::setHighlightFormatter - Specify a formatter for the highlight output
    • SolrQuery::setHighlightFragmenter - Sets a text snippet generator for highlighted text
    • SolrQuery::setHighlightFragsize - The size of fragments to consider for highlighting
    • SolrQuery::setHighlightHighlightMultiTerm - Use SpanScorer to highlight phrase terms
    • SolrQuery::setHighlightMaxAlternateFieldLength - Sets the maximum number of characters of the field to return
    • SolrQuery::setHighlightMaxAnalyzedChars - Specifies the number of characters into a document to look for suitable snippets
    • SolrQuery::setHighlightMergeContiguous - Whether or not to collapse contiguous fragments into a single fragment
    • SolrQuery::setHighlightRegexMaxAnalyzedChars - Specify the maximum number of characters to analyze
    • SolrQuery::setHighlightRegexPattern - Specify the regular expression for fragmenting
    • SolrQuery::setHighlightRegexSlop - Sets the factor by which the regex fragmenter can stray from the ideal fragment size
    • SolrQuery::setHighlightRequireFieldMatch - Require field matching during highlighting
    • SolrQuery::setHighlightSimplePost - Sets the text which appears after a highlighted term
    • SolrQuery::setHighlightSimplePre - Sets the text which appears before a highlighted term
    • SolrQuery::setHighlightSnippets - Sets the maximum number of highlighted snippets to generate per field
    • SolrQuery::setHighlightUsePhraseHighlighter - Whether to highlight phrase terms only when they appear within the query phrase
    • SolrQuery::setMlt - Enables or disables moreLikeThis
    • SolrQuery::setMltBoost - Set if the query will be boosted by the interesting term relevance
    • SolrQuery::setMltCount - Set the number of similar documents to return for each result
    • SolrQuery::setMltMaxNumQueryTerms - Sets the maximum number of query terms included
    • SolrQuery::setMltMaxNumTokens - Specifies the maximum number of tokens to parse
    • SolrQuery::setMltMaxWordLength - Sets the maximum word length
    • SolrQuery::setMltMinDocFrequency - Sets the mltMinDoc frequency
    • SolrQuery::setMltMinTermFrequency - Sets the frequency below which terms will be ignored in the source docs
    • SolrQuery::setMltMinWordLength - Sets the minimum word length
    • SolrQuery::setOmitHeader - Exclude the header from the returned results
    • SolrQuery::setQuery - 検索クエリーを設定
    • SolrQuery::setRows - Specifies the maximum number of rows to return in the result
    • SolrQuery::setShowDebugInfo - Flag to show debug information
    • SolrQuery::setStart - Specifies the number of rows to skip
    • SolrQuery::setStats - Enables or disables the Stats component
    • SolrQuery::setTerms - Enables or disables the TermsComponent
    • SolrQuery::setTermsField - Sets the name of the field to get the Terms from
    • SolrQuery::setTermsIncludeLowerBound - Include the lower bound term in the result set
    • SolrQuery::setTermsIncludeUpperBound - Include the upper bound term in the result set
    • SolrQuery::setTermsLimit - Sets the maximum number of terms to return
    • SolrQuery::setTermsLowerBound - Specifies the Term to start from
    • SolrQuery::setTermsMaxCount - Sets the maximum document frequency
    • SolrQuery::setTermsMinCount - Sets the minimum document frequency
    • SolrQuery::setTermsPrefix - Restrict matches to terms that start with the prefix
    • SolrQuery::setTermsReturnRaw - Return the raw characters of the indexed term
    • SolrQuery::setTermsSort - Specifies how to sort the returned terms
    • SolrQuery::setTermsUpperBound - Sets the term to stop at
    • SolrQuery::setTimeAllowed - The time allowed for search to finish
    • SolrQuery::__construct - コンストラクタ
    • SolrQuery::__destruct - デストラクタ
    • SolrQueryResponse::__construct - コンストラクタ
    • SolrQueryResponse::__destruct - デストラクタ
    • SolrResponse::getDigestedResponse - シリアライズされた PHP データとして XML レスポンスを返す
    • SolrResponse::getHttpStatus - レスポンスの HTTP ステータスを返す
    • SolrResponse::getHttpStatusMessage - HTTP ステータスに関する詳細を返す
    • SolrResponse::getRawRequest - Solr サーバーに送られた生のリクエストを返す
    • SolrResponse::getRawRequestHeaders - Solr サーバーに送られた生のリクエストヘッダを返す
    • SolrResponse::getRawResponse - Solr サーバーからの生のレスポンスを返す
    • SolrResponse::getRawResponseHeaders - Solr サーバーからの生のレスポンスヘッダを返す
    • SolrResponse::getRequestUrl - リクエストが送られた完全な URL を返す
    • SolrResponse::getResponse - サーバーからの XML レスポンスを表現する SolrObject を返す
    • SolrResponse::setParseMode - パースモードを設定
    • SolrResponse::success - リクエストが成功したか
    • SolrServerException::getInternalInfo - 例外がスローされた際の内部情報を返す
    • SolrUpdateResponse::__construct - コンストラクタ
    • SolrUpdateResponse::__destruct - デストラクタ
    • SolrUtils::digestXmlResponse - Parses an response XML string into a SolrObject
    • SolrUtils::escapeQueryChars - Escapes a lucene query string
    • SolrUtils::getSolrVersion - Solr 拡張モジュールの現行バージョンを返す
    • SolrUtils::queryPhrase - Prepares a phrase from an unescaped lucene string
    • solr_get_version - Apache Solr 拡張モジュールの現行バージョンを返す
    • sort - 配列を昇順にソートする
    • soundex - 文字列の soundex キーを計算する
    • SplDoublyLinkedList::add - 特定のインデックスに新しい値を 追加/挿入 する
    • SplDoublyLinkedList::bottom - 双方向リンクリストの最初のノードを取得する
    • SplDoublyLinkedList::count - 双方向リンクリストの要素数を数える
    • SplDoublyLinkedList::current - 現在の配列の要素を返す
    • SplDoublyLinkedList::getIteratorMode - 反復処理のモードを返す
    • SplDoublyLinkedList::isEmpty - 双方向リンクリストが空かどうかを調べる
    • SplDoublyLinkedList::key - 現在のノードのインデックスを返す
    • SplDoublyLinkedList::next - 次のエントリに移動する
    • SplDoublyLinkedList::offsetExists - 指定した $index が存在するかどうかを返す
    • SplDoublyLinkedList::offsetGet - 指定した $index の値を返す
    • SplDoublyLinkedList::offsetSet - 指定した $index の値を $value に設定する
    • SplDoublyLinkedList::offsetUnset - 指定した $index の値を削除する
    • SplDoublyLinkedList::pop - 双方向リンクリストの末尾からノードを取り出す
    • SplDoublyLinkedList::prev - 前のエントリに移動する
    • SplDoublyLinkedList::push - 双方向リンクリストの末尾に要素を追加する
    • SplDoublyLinkedList::rewind - イテレータを先頭に巻き戻す
    • SplDoublyLinkedList::serialize - ストレージをシリアライズする
    • SplDoublyLinkedList::setIteratorMode - 反復処理のモードを設定する
    • SplDoublyLinkedList::shift - 双方向リンクリストの先頭からノードを取り出す
    • SplDoublyLinkedList::top - 双方向リンクリストの最後のノードを取得する
    • SplDoublyLinkedList::unserialize - ストレージをアンシリアライズする
    • SplDoublyLinkedList::unshift - 双方向リンクリストの先頭に要素を追加する
    • SplDoublyLinkedList::valid - 双方向リンクリストにまだノードがあるかどうかを調べる
    • SplFileInfo::getATime - ファイルの最終アクセス時刻を取得する
    • SplFileInfo::getBasename - ファイルのベース名を取得する
    • SplFileInfo::getCTime - inode 変更時刻を取得する
    • SplFileInfo::getExtension - ファイルの拡張子を取得する
    • SplFileInfo::getFileInfo - ファイルの SplFileInfo オブジェクトを取得する
    • SplFileInfo::getFilename - ファイル名を取得する
    • SplFileInfo::getGroup - ファイルのグループを取得する
    • SplFileInfo::getInode - ファイルの inode を取得する
    • SplFileInfo::getLinkTarget - リンク先を取得する
    • SplFileInfo::getMTime - 最終変更時刻を取得する
    • SplFileInfo::getOwner - ファイルの所有者を取得する
    • SplFileInfo::getPath - ファイル名を除いたパスを取得する
    • SplFileInfo::getPathInfo - パスの SplFileInfo オブジェクトを取得する
    • SplFileInfo::getPathname - ファイルへのパスを取得する
    • SplFileInfo::getPerms - ファイルのパーミッションを取得する
    • SplFileInfo::getRealPath - ファイルへの絶対パスを取得する
    • SplFileInfo::getSize - ファイルサイズを取得する
    • SplFileInfo::getType - ファイルタイプを取得する
    • SplFileInfo::isDir - ファイルがディレクトリかどうかを調べる
    • SplFileInfo::isExecutable - ファイルが実行可能かどうかを調べる
    • SplFileInfo::isFile - オブジェクトの参照先が通常のファイルであるかどうかを調べる
    • SplFileInfo::isLink - ファイルがリンクであるかどうかを調べる
    • SplFileInfo::isReadable - ファイルが読み込み可能か調べる
    • SplFileInfo::isWritable - エントリが書き込み可能であるかどうかを調べる
    • SplFileInfo::openFile - ファイルの SplFileObject オブジェクトを取得する
    • SplFileInfo::setFileClass - SplFileInfo::openFile で使用するクラスを設定する
    • SplFileInfo::setInfoClass - SplFileInfo::getFileInfo および SplFileInfo::getPathInfo で使用するクラスを設定する
    • SplFileInfo::__construct - 新しい SplFileInfo オブジェクトを作成する
    • SplFileInfo::__toString - ファイルへのパスを文字列で返す
    • SplFileObject::current - ファイルの現在の行を取得する
    • SplFileObject::eof - ファイルの終端に到達しているか調べる
    • SplFileObject::fflush - 出力をファイルにフラッシュする
    • SplFileObject::fgetc - ファイルから文字を取り出す
    • SplFileObject::fgetcsv - ファイルから行を取り出し CSV フィールドとして処理する
    • SplFileObject::fgets - ファイルから 1 行取り出す
    • SplFileObject::fgetss - ファイルから 1 行取り出し HTML タグを取り除く
    • SplFileObject::flock - 簡易なファイルロックを行う
    • SplFileObject::fpassthru - ファイルポインタに残っているデータをすべて出力する
    • SplFileObject::fputcsv - フィールドの配列を CSV の行として書き出す
    • SplFileObject::fread - ファイルから読み取る
    • SplFileObject::fscanf - フォーマットに従ってファイルからの入力をパースする
    • SplFileObject::fseek - ファイルポインタを移動させる
    • SplFileObject::fstat - ファイルの情報を得る
    • SplFileObject::ftell - ファイルポインタの現在位置を返す
    • SplFileObject::ftruncate - ファイルを指定した長さに丸める
    • SplFileObject::fwrite - ファイルに書き込む
    • SplFileObject::getChildren - 用途はなし
    • SplFileObject::getCsvControl - CSV の区切り、囲み文字、エスケープ文字を取得する
    • SplFileObject::getCurrentLine - SplFileObject::fgets のエイリアス
    • SplFileObject::getFlags - SplFileObject のフラグを取得する
    • SplFileObject::getMaxLineLen - 行の最大バイト数を取得する
    • SplFileObject::hasChildren - SplFileObject は子を持ちません
    • SplFileObject::key - 行番号を取得する
    • SplFileObject::next - 次の行を読み出す
    • SplFileObject::rewind - ファイルポインタを先頭に巻き戻す
    • SplFileObject::seek - ファイルポインタを指定行に移動させる
    • SplFileObject::setCsvControl - CSV の区切り文字、囲み文字、エスケープ文字をセットする
    • SplFileObject::setFlags - SplFileObject のフラグをセットする
    • SplFileObject::setMaxLineLen - 読み込む行の最大バイト数をセットする
    • SplFileObject::valid - ファイル終端でないかチェックする
    • SplFileObject::__construct - 新しいファイルオブジェクトを作成する
    • SplFileObject::__toString - 現在の行を文字列として取得する
    • SplFixedArray::count - 配列のサイズを返す
    • SplFixedArray::current - 現在の配列の要素を返す
    • SplFixedArray::fromArray - PHP の配列を SplFixedArray インスタンスにインポートする
    • SplFixedArray::getIterator - 配列を走査するためのイテレータを取得する
    • SplFixedArray::getSize - 配列のサイズを取得する
    • SplFixedArray::jsonSerialize - JSON に変換可能な値の表現を返す
    • SplFixedArray::key - 現在の配列の添字を返す
    • SplFixedArray::next - 次のエントリに進む
    • SplFixedArray::offsetExists - 指定した添字が存在するかどうかを返す
    • SplFixedArray::offsetGet - 指定した添字の値を返す
    • SplFixedArray::offsetSet - 指定した添字の新しい値を設定する
    • SplFixedArray::offsetUnset - 指定した添字の値を消去する
    • SplFixedArray::rewind - イテレータを先頭に巻き戻す
    • SplFixedArray::setSize - 配列のサイズを変更する
    • SplFixedArray::toArray - 固定長配列から PHP の配列を返す
    • SplFixedArray::valid - 配列にまだ要素があるかどうかを調べる
    • SplFixedArray::__construct - 新しい固定長配列を作成する
    • SplFixedArray::__serialize - SplFixedArray オブジェクトをシリアライズする
    • SplFixedArray::__unserialize - data パラメータを SplFixedArray オブジェクトに復元する
    • SplFixedArray::__wakeup - アンシリアライズ後に配列を再初期化する
    • SplHeap::compare - 要素を比較し、ヒープ内の適切な位置に置く
    • SplHeap::count - ヒープ内の要素数を数える
    • SplHeap::current - イテレータが指す現在のノードを返す
    • SplHeap::extract - ヒープの先頭からノードを取り出す
    • SplHeap::insert - ヒープに要素を挿入する
    • SplHeap::isCorrupted - ヒープが壊れているかを調べる
    • SplHeap::isEmpty - ヒープが空かどうかを調べる
    • SplHeap::key - 現在のノードのインデックスを返す
    • SplHeap::next - 次のノードに移動する
    • SplHeap::recoverFromCorruption - 破壊されたヒープを復旧し、それ以降の操作をできるようにする
    • SplHeap::rewind - イテレータを先頭に巻き戻す (何もしない)
    • SplHeap::top - ヒープの先頭のノードを取り出す
    • SplHeap::valid - ヒープにまだノードがあるかどうかを調べる
    • SplMaxHeap::compare - 要素を比較し、ヒープ内の適切な位置に置く
    • SplMinHeap::compare - 要素を比較し、ヒープ内の適切な位置に置く
    • SplObjectStorage::addAll - 別のストレージからすべてのオブジェクトを追加する
    • SplObjectStorage::attach - オブジェクトをストレージに追加する
    • SplObjectStorage::contains - ストレージに特定のオブジェクトが含まれるかどうかを調べる
    • SplObjectStorage::count - ストレージ内のオブジェクトの数を返す
    • SplObjectStorage::current - 現在のストレージの要素を返す
    • SplObjectStorage::detach - オブジェクトをストレージから取り除く
    • SplObjectStorage::getHash - 中に含むオブジェクトの一意な識別子を算出する
    • SplObjectStorage::getInfo - イテレータの現在のエントリに関連づけられたデータを返す
    • SplObjectStorage::key - イテレータの現在位置を返す
    • SplObjectStorage::next - 次のエントリに移動する
    • SplObjectStorage::offsetExists - オブジェクトがストレージ内に存在するかどうかを調べる
    • SplObjectStorage::offsetGet - オブジェクトに関連づけられたデータを返す
    • SplObjectStorage::offsetSet - ストレージ内のオブジェクトにデータを関連づける
    • SplObjectStorage::offsetUnset - ストレージからオブジェクトを取り除く
    • SplObjectStorage::removeAll - 別のストレージに含まれているオブジェクトを現在のストレージから取り除く
    • SplObjectStorage::removeAllExcept - 別のストレージに含まれているもの以外のすべてのオブジェクトを現在のストレージから取り除く
    • SplObjectStorage::rewind - イテレータをストレージの最初の要素に巻き戻す
    • SplObjectStorage::serialize - ストレージをシリアライズする
    • SplObjectStorage::setInfo - イテレータの現在のエントリに関連づけるデータを設定する
    • SplObjectStorage::unserialize - ストレージの文字列表現をアンシリアライズする
    • SplObjectStorage::valid - イテレータの現在のエントリが有効かどうかを返す
    • SplObserver::update - subject の更新を受信する
    • SplPriorityQueue::compare - 要素の優先順位を比較し、ヒープ内の適切な位置に置く
    • SplPriorityQueue::count - キュー内の要素数を数える
    • SplPriorityQueue::current - イテレータが指す現在のノードを返す
    • SplPriorityQueue::extract - ヒープの先頭からノードを取り出す
    • SplPriorityQueue::getExtractFlags - 展開する時のフラグを取得する
    • SplPriorityQueue::insert - キューに要素を挿入する
    • SplPriorityQueue::isCorrupted - 優先度付きキューが壊れているかを調べる
    • SplPriorityQueue::isEmpty - キューが空かどうかを調べる
    • SplPriorityQueue::key - 現在のノードのインデックスを返す
    • SplPriorityQueue::next - 次のノードに移動する
    • SplPriorityQueue::recoverFromCorruption - 破壊されたキューを復旧し、それ以降の操作をできるようにする
    • SplPriorityQueue::rewind - イテレータを先頭に巻き戻す (何もしない)
    • SplPriorityQueue::setExtractFlags - 取り出しモードを設定する
    • SplPriorityQueue::top - キューの先頭のノードを取り出す
    • SplPriorityQueue::valid - キューにまだノードがあるかどうかを調べる
    • SplQueue::dequeue - キューからノードを取り出す
    • SplQueue::enqueue - 要素をキューに追加する
    • SplSubject::attach - SplObserver をアタッチする
    • SplSubject::detach - observer をデタッチする
    • SplSubject::notify - observer に通知する
    • SplTempFileObject::__construct - 新しい一時ファイルオブジェクトを作成する
    • spl_autoload - __autoload() のデフォルト実装
    • spl_autoload_call - 要求されたクラスを読み込むために、すべての登録済みの __autoload() 関数を試す
    • spl_autoload_extensions - spl_autoload 用のデフォルトの拡張子を登録し、それを返す
    • spl_autoload_functions - すべての登録済み __autoload() 関数を返す
    • spl_autoload_register - 指定した関数を __autoload() の実装として登録する
    • spl_autoload_unregister - 指定した関数の、__autoload() の実装としての登録を解除する
    • spl_classes - 利用可能な SPL クラスを返す
    • spl_object_hash - 指定したオブジェクトのハッシュ ID を返す
    • spl_object_id - 与えられたオブジェクトを扱う数値オブジェクトを返す
    • Spoofchecker::areConfusable - 指定された文字列が、読み手を混乱させうるかをチェックする
    • Spoofchecker::isSuspicious - 指定されたテキストに、疑わしい文字が含まれていないかをチェックする
    • Spoofchecker::setAllowedLocales - チェック時に使うロケールを設定する
    • Spoofchecker::setChecks - 実行するチェックを設定する
    • Spoofchecker::setRestrictionLevel - 制限レベルを設定する
    • Spoofchecker::__construct - コンストラクタ
    • sprintf - フォーマットされた文字列を返す
    • SQLite3::backup - あるデータベースを、別のデータベースにバックアップする
    • SQLite3::busyTimeout - 接続がビジー状態のときのハンドラを設定する
    • SQLite3::changes - 直近の SQL 文で変更 (あるいは挿入、削除) された行の数を返す
    • SQLite3::close - データベースとの接続を閉じる
    • SQLite3::createAggregate - SQL の集約関数として使用する PHP 関数を登録する
    • SQLite3::createCollation - SQLのcollate関数として使うPHP関数を登録する
    • SQLite3::createFunction - SQL のスカラー関数として使用する PHP 関数を登録する
    • SQLite3::enableExceptions - 例外のスローを有効にする
    • SQLite3::escapeString - 適切にエスケープされた文字列を返す
    • SQLite3::exec - 指定したデータベースに、結果を返さないクエリを実行する
    • SQLite3::lastErrorCode - 直近で失敗した SQLite リクエストの結果コードを数値で返す
    • SQLite3::lastErrorMsg - 直近で失敗した SQLite リクエストについての英文テキストの説明を返す
    • SQLite3::lastInsertRowID - 直近の INSERT 文でデータベースに追加された行の ID を返す
    • SQLite3::loadExtension - SQLite 拡張ライブラリを読み込む
    • SQLite3::open - SQLite データベースをオープンする
    • SQLite3::openBlob - BLOB を読み取るためのストリームリソースを開く
    • SQLite3::prepare - 実行する SQL 文を準備する
    • SQLite3::query - SQL クエリを実行する
    • SQLite3::querySingle - クエリを実行し、単一の結果を返す
    • SQLite3::setAuthorizer - SQL文が出来ることを限定するため、authorizer として使われるコールバックを設定する
    • SQLite3::version - SQLite3 ライブラリのバージョンを、文字列定数と数値で返す
    • SQLite3::__construct - SQLite3 オブジェクトを作成し、SQLite 3 データベースをオープンする
    • SQLite3Result::columnName - n 番目のカラムの名前を返す
    • SQLite3Result::columnType - n 番目のカラムの型を返す
    • SQLite3Result::fetchArray - 結果の行を、連想配列あるいは数値添字配列あるいはその両方で取得する
    • SQLite3Result::finalize - 結果セットを閉じる
    • SQLite3Result::numColumns - 結果セットのカラム数を返す
    • SQLite3Result::reset - 結果セットを最初の行に戻す
    • SQLite3Result::__construct - SQLite3Result を構築する
    • SQLite3Stmt::bindParam - パラメータを変数にバインドする
    • SQLite3Stmt::bindValue - パラメータの値を変数にバインドする
    • SQLite3Stmt::clear - 現在バインドされているすべてのパラメータをクリアする
    • SQLite3Stmt::close - プリペアドステートメントを閉じる
    • SQLite3Stmt::execute - プリペアドステートメントを実行し、結果セットオブジェクトを返す
    • SQLite3Stmt::getSQL - ステートメントのSQLを取得する
    • SQLite3Stmt::paramCount - プリペアドステートメント内のパラメータの数を返す
    • SQLite3Stmt::readOnly - ステートメントが読み取り専用かどうかを返す
    • SQLite3Stmt::reset - プリペアドステートメントをリセットする
    • SQLite3Stmt::__construct - SQLite3Stmt オブジェクトを構築する
    • sqlsrv_begin_transaction - Begins a database transaction
    • sqlsrv_cancel - Cancels a statement
    • sqlsrv_client_info - Returns information about the client and specified connection
    • sqlsrv_close - Closes an open connection and releases resourses associated with the connection
    • sqlsrv_commit - Commits a transaction that was begun with sqlsrv_begin_transaction
    • sqlsrv_configure - Changes the driver error handling and logging configurations
    • sqlsrv_connect - Opens a connection to a Microsoft SQL Server database
    • sqlsrv_errors - Returns error and warning information about the last SQLSRV operation performed
    • sqlsrv_execute - Executes a statement prepared with sqlsrv_prepare
    • sqlsrv_fetch - Makes the next row in a result set available for reading
    • sqlsrv_fetch_array - 行を配列として返す
    • sqlsrv_fetch_object - Retrieves the next row of data in a result set as an object
    • sqlsrv_field_metadata - Retrieves metadata for the fields of a statement prepared by sqlsrv_prepare or sqlsrv_query
    • sqlsrv_free_stmt - Frees all resources for the specified statement
    • sqlsrv_get_config - Returns the value of the specified configuration setting
    • sqlsrv_get_field - Gets field data from the currently selected row
    • sqlsrv_has_rows - Indicates whether the specified statement has rows
    • sqlsrv_next_result - Makes the next result of the specified statement active
    • sqlsrv_num_fields - Retrieves the number of fields (columns) on a statement
    • sqlsrv_num_rows - Retrieves the number of rows in a result set
    • sqlsrv_prepare - Prepares a query for execution
    • sqlsrv_query - Prepares and executes a query
    • sqlsrv_rollback - Rolls back a transaction that was begun with sqlsrv_begin_transaction
    • sqlsrv_rows_affected - Returns the number of rows modified by the last INSERT, UPDATE, or DELETE query executed
    • sqlsrv_send_stream_data - Sends data from parameter streams to the server
    • sqlsrv_server_info - Returns information about the server
    • SqlStatement::bind - ステートメントのパラメータをバインドする
    • SqlStatement::execute - 操作を実行する
    • SqlStatement::getNextResult - 次の結果を取得する
    • SqlStatement::getResult - 結果を取得する
    • SqlStatement::hasMoreResults - さらに結果があるかを調べる
    • SqlStatement::__construct - SqlStatement のコンストラクタ
    • SqlStatementResult::fetchAll - 結果セットから全行取得する
    • SqlStatementResult::fetchOne - 単一の行を取得する
    • SqlStatementResult::getAffectedItemsCount - 影響を受けた行数を取得する
    • SqlStatementResult::getColumnNames - カラム名を取得する
    • SqlStatementResult::getColumns - カラムを取得する
    • SqlStatementResult::getColumnsCount - カラムの数を取得する
    • SqlStatementResult::getGeneratedIds - 生成された id を取得する
    • SqlStatementResult::getLastInsertId - 最後に挿入されたidを取得する
    • SqlStatementResult::getWarnings - 直近の操作から発生した警告を取得する
    • SqlStatementResult::getWarningsCount - 直近の操作で発生した警告の数を取得する
    • SqlStatementResult::hasData - 結果がデータを持っているかを調べる
    • SqlStatementResult::nextResult - 次の結果を取得する
    • SqlStatementResult::__construct - SqlStatementResult のコンストラクタ
    • sqrt - 平方根
    • srand - 乱数生成器を初期化する
    • sscanf - フォーマット文字列に基づき入力を処理する
    • ssdeep_fuzzy_compare - Calculates the match score between two fuzzy hash signatures
    • ssdeep_fuzzy_hash - Create a fuzzy hash from a string
    • ssdeep_fuzzy_hash_filename - Create a fuzzy hash from a file
    • ssh2_auth_agent - SSH の認証を、ssh agent を使って行う
    • ssh2_auth_hostbased_file - ホスト公開鍵を使用して認証を行う
    • ssh2_auth_none - "none" として認証する
    • ssh2_auth_password - SSH 上でプレーンなパスワードを使用した認証を行う
    • ssh2_auth_pubkey_file - 公開鍵を使用した認証を行う
    • ssh2_connect - SSH サーバーに接続する
    • ssh2_disconnect - Close a connection to a remote SSH server
    • ssh2_exec - リモートサーバー上でコマンドを実行する
    • ssh2_fetch_stream - 拡張データストリームを取得する
    • ssh2_fingerprint - リモートサーバーのフィンガープリントを処理する
    • ssh2_forward_accept - リスナーによって作られた接続を受け付ける
    • ssh2_forward_listen - リモートサーバー上のポートにバインドし、接続を待つ
    • ssh2_methods_negotiated - ネゴシエートされたメソッドのリストを返す
    • ssh2_poll - チャンネル/リスナー/ストリーム のイベントをポーリングする
    • ssh2_publickey_add - 認証済み公開鍵を追加する
    • ssh2_publickey_init - 公開鍵サブシステムを初期化する
    • ssh2_publickey_list - 現在認証済みの公開鍵の一覧を表示する
    • ssh2_publickey_remove - 認証済み公開鍵を取り除く
    • ssh2_scp_recv - SCP 経由でファイルを要求する
    • ssh2_scp_send - SCP 経由でファイルを送信する
    • ssh2_send_eof - ストリームに EOF を送信する
    • ssh2_sftp - SFTP サブシステムを初期化する
    • ssh2_sftp_chmod - ファイルのモードを変更する
    • ssh2_sftp_lstat - シンボリックリンクの情報を取得する
    • ssh2_sftp_mkdir - ディレクトリを作成する
    • ssh2_sftp_readlink - シンボリックリンクのターゲットを返す
    • ssh2_sftp_realpath - 指定されたパス文字列の実パスを解決する
    • ssh2_sftp_rename - リモートファイルを改名する
    • ssh2_sftp_rmdir - ディレクトリを削除する
    • ssh2_sftp_stat - リモートファイルシステム上のファイルの情報を取得する
    • ssh2_sftp_symlink - シンボリックリンクを作成する
    • ssh2_sftp_unlink - ファイルを削除する
    • ssh2_shell - 対話式のシェルを要求する
    • ssh2_tunnel - リモートサーバーを経由するトンネルをオープンする
    • stat - ファイルに関する情報を取得する
    • Statement::getNextResult - 次の結果を取得する
    • Statement::getResult - 結果を取得する
    • Statement::hasMoreResults - さらに結果があるかを調べる
    • Statement::__construct - Statement のコンストラクタ
    • stats_absolute_deviation - Returns the absolute deviation of an array of values
    • stats_cdf_beta - Calculates any one parameter of the beta distribution given values for the others
    • stats_cdf_binomial - Calculates any one parameter of the binomial distribution given values for the others
    • stats_cdf_cauchy - Calculates any one parameter of the Cauchy distribution given values for the others
    • stats_cdf_chisquare - Calculates any one parameter of the chi-square distribution given values for the others
    • stats_cdf_exponential - Calculates any one parameter of the exponential distribution given values for the others
    • stats_cdf_f - Calculates any one parameter of the F distribution given values for the others
    • stats_cdf_gamma - Calculates any one parameter of the gamma distribution given values for the others
    • stats_cdf_laplace - Calculates any one parameter of the Laplace distribution given values for the others
    • stats_cdf_logistic - Calculates any one parameter of the logistic distribution given values for the others
    • stats_cdf_negative_binomial - Calculates any one parameter of the negative binomial distribution given values for the others
    • stats_cdf_noncentral_chisquare - Calculates any one parameter of the non-central chi-square distribution given values for the others
    • stats_cdf_noncentral_f - Calculates any one parameter of the non-central F distribution given values for the others
    • stats_cdf_noncentral_t - Calculates any one parameter of the non-central t-distribution give values for the others
    • stats_cdf_normal - Calculates any one parameter of the normal distribution given values for the others
    • stats_cdf_poisson - Calculates any one parameter of the Poisson distribution given values for the others
    • stats_cdf_t - Calculates any one parameter of the t-distribution given values for the others
    • stats_cdf_uniform - Calculates any one parameter of the uniform distribution given values for the others
    • stats_cdf_weibull - Calculates any one parameter of the Weibull distribution given values for the others
    • stats_covariance - Computes the covariance of two data sets
    • stats_dens_beta - Probability density function of the beta distribution
    • stats_dens_cauchy - Probability density function of the Cauchy distribution
    • stats_dens_chisquare - Probability density function of the chi-square distribution
    • stats_dens_exponential - Probability density function of the exponential distribution
    • stats_dens_f - Probability density function of the F distribution
    • stats_dens_gamma - Probability density function of the gamma distribution
    • stats_dens_laplace - Probability density function of the Laplace distribution
    • stats_dens_logistic - Probability density function of the logistic distribution
    • stats_dens_normal - Probability density function of the normal distribution
    • stats_dens_pmf_binomial - Probability mass function of the binomial distribution
    • stats_dens_pmf_hypergeometric - Probability mass function of the hypergeometric distribution
    • stats_dens_pmf_negative_binomial - Probability mass function of the negative binomial distribution
    • stats_dens_pmf_poisson - Probability mass function of the Poisson distribution
    • stats_dens_t - Probability density function of the t-distribution
    • stats_dens_uniform - Probability density function of the uniform distribution
    • stats_dens_weibull - Probability density function of the Weibull distribution
    • stats_harmonic_mean - Returns the harmonic mean of an array of values
    • stats_kurtosis - Computes the kurtosis of the data in the array
    • stats_rand_gen_beta - Generates a random deviate from the beta distribution
    • stats_rand_gen_chisquare - Generates a random deviate from the chi-square distribution
    • stats_rand_gen_exponential - Generates a random deviate from the exponential distribution
    • stats_rand_gen_f - Generates a random deviate from the F distribution
    • stats_rand_gen_funiform - Generates uniform float between low (exclusive) and high (exclusive)
    • stats_rand_gen_gamma - Generates a random deviate from the gamma distribution
    • stats_rand_gen_ibinomial - Generates a random deviate from the binomial distribution
    • stats_rand_gen_ibinomial_negative - Generates a random deviate from the negative binomial distribution
    • stats_rand_gen_int - Generates random integer between 1 and 2147483562
    • stats_rand_gen_ipoisson - Generates a single random deviate from a Poisson distribution
    • stats_rand_gen_iuniform - Generates integer uniformly distributed between LOW (inclusive) and HIGH (inclusive)
    • stats_rand_gen_noncentral_chisquare - Generates a random deviate from the non-central chi-square distribution
    • stats_rand_gen_noncentral_f - Generates a random deviate from the noncentral F distribution
    • stats_rand_gen_noncentral_t - Generates a single random deviate from a non-central t-distribution
    • stats_rand_gen_normal - Generates a single random deviate from a normal distribution
    • stats_rand_gen_t - Generates a single random deviate from a t-distribution
    • stats_rand_get_seeds - Get the seed values of the random number generator
    • stats_rand_phrase_to_seeds - Generate two seeds for the RGN random number generator
    • stats_rand_ranf - Generates a random floating point number between 0 and 1
    • stats_rand_setall - Set seed values to the random generator
    • stats_skew - Computes the skewness of the data in the array
    • stats_standard_deviation - Returns the standard deviation
    • stats_stat_binomial_coef - Returns a binomial coefficient
    • stats_stat_correlation - Returns the Pearson correlation coefficient of two data sets
    • stats_stat_factorial - Returns the factorial of an integer
    • stats_stat_independent_t - Returns the t-value from the independent two-sample t-test
    • stats_stat_innerproduct - Returns the inner product of two vectors
    • stats_stat_paired_t - Returns the t-value of the dependent t-test for paired samples
    • stats_stat_percentile - Returns the percentile value
    • stats_stat_powersum - Returns the power sum of a vector
    • stats_variance - Returns the variance
    • Stomp::abort - Rolls back a transaction in progress
    • Stomp::ack - Acknowledges consumption of a message
    • Stomp::begin - Starts a transaction
    • Stomp::commit - Commits a transaction in progress
    • Stomp::error - Gets the last stomp error
    • Stomp::getReadTimeout - Gets read timeout
    • Stomp::getSessionId - Gets the current stomp session ID
    • Stomp::hasFrame - Indicates whether or not there is a frame ready to read
    • Stomp::readFrame - Reads the next frame
    • Stomp::send - Sends a message
    • Stomp::setReadTimeout - Sets read timeout
    • Stomp::subscribe - Registers to listen to a given destination
    • Stomp::unsubscribe - Removes an existing subscription
    • Stomp::__construct - Opens a connection
    • Stomp::__destruct - Closes stomp connection
    • StompException::getDetails - Get exception details
    • StompFrame::__construct - Constructor
    • stomp_connect_error - Returns a string description of the last connect error
    • stomp_version - Gets the current stomp extension version
    • strcasecmp - 大文字小文字を区別しないバイナリセーフな文字列比較を行う
    • strchr - strstr のエイリアス
    • strcmp - バイナリセーフな文字列比較
    • strcoll - ロケールに基づく文字列比較
    • strcspn - マスクにマッチしない最初のセグメントの長さを返す
    • streamWrapper::dir_closedir - ディレクトリハンドルを閉じる
    • streamWrapper::dir_opendir - ディレクトリハンドルをオープンする
    • streamWrapper::dir_readdir - ディレクトリハンドルからエントリを読み込む
    • streamWrapper::dir_rewinddir - ディレクトリハンドルを巻き戻す
    • streamWrapper::mkdir - ディレクトリを作成する
    • streamWrapper::rename - ファイルあるいはディレクトリの名前を変える
    • streamWrapper::rmdir - ディレクトリを削除する
    • streamWrapper::stream_cast - 元となるリソースを取得する
    • streamWrapper::stream_close - リソースを閉じる
    • streamWrapper::stream_eof - ファイルポインタが終端にあるかどうかを調べる
    • streamWrapper::stream_flush - 出力をフラッシュする
    • streamWrapper::stream_lock - ファイルのアドバイザリ・ロック
    • streamWrapper::stream_metadata - ストリームメタデータを変更する
    • streamWrapper::stream_open - ファイルあるいは URL をオープンする
    • streamWrapper::stream_read - ストリームから読み込む
    • streamWrapper::stream_seek - ストリーム内の特定の場所に移動する
    • streamWrapper::stream_set_option - ストリームのオプションを変更する
    • streamWrapper::stream_stat - ファイルリソースについての情報を取得する
    • streamWrapper::stream_tell - ストリームの現在位置を取得する
    • streamWrapper::stream_truncate - ストリームを丸める
    • streamWrapper::stream_write - ストリームに書き込む
    • streamWrapper::unlink - ファイルを削除する
    • streamWrapper::url_stat - ファイルについての情報を取得する
    • streamWrapper::__construct - 新しいストリームラッパーを作成する
    • streamWrapper::__destruct - 既存のストリームラッパーを破棄する
    • stream_bucket_append - bucket を brigade に追加する
    • stream_bucket_make_writeable - 操作する brigade から bucket オブジェクトを返す
    • stream_bucket_new - 現在のストリームで使用する新しい bucket を作成する
    • stream_bucket_prepend - bucket を brigade の先頭に追加する
    • stream_context_create - ストリームコンテキストを作成する
    • stream_context_get_default - デフォルトのストリームコンテキストを取得する
    • stream_context_get_options - ストリーム / ラッパー / コンテキストに設定されているオプションを取得する
    • stream_context_get_params - コンテキストのパラメータを取得する
    • stream_context_set_default - デフォルトのストリームコンテキストを設定する
    • stream_context_set_option - ストリーム / ラッパー / コンテキストのオプションを設定する
    • stream_context_set_options - 指定されたコンテキストのオプションを設定する
    • stream_context_set_params - ストリーム / ラッパー / コンテキストのパラメータを設定する
    • stream_copy_to_stream - データをあるストリームから別のストリームにコピーする
    • stream_filter_append - ストリームにフィルタを付加する
    • stream_filter_prepend - フィルタをストリームに付加する
    • stream_filter_register - ユーザー定義のストリームフィルタを登録する
    • stream_filter_remove - ストリームからフィルタを取り除く
    • stream_get_contents - 残りのストリームを文字列に読み込む
    • stream_get_filters - 登録されているフィルタのリストを取得する
    • stream_get_line - 指定されたデリミタの位置までのデータを一行分としてストリームから読み込む
    • stream_get_meta_data - ヘッダーあるいはメタデータをストリームまたはファイルポインタから取得する
    • stream_get_transports - 登録されたソケットのトランスポートの一覧を取得する
    • stream_get_wrappers - 登録されているストリームのラッパーのリストを取得する
    • stream_isatty - ストリームがターミナル型のデバイスかを調べる
    • stream_is_local - ローカルストリームかどうかを調べる
    • stream_notification_callback - notification コンテキストパラメータ用のコールバック関数
    • stream_register_wrapper - stream_wrapper_register のエイリアス
    • stream_resolve_include_path - インクルードパスに対してファイル名を解決する
    • stream_select - select() システムコールと同等の操作を、 ストリームの配列に対して seconds と microseconds で指定されたタイムアウト時間をもって行う
    • stream_set_blocking - ストリームのブロックモードを有効にする / 解除する
    • stream_set_chunk_size - ストリームのチャンクサイズを設定する
    • stream_set_read_buffer - 指定したストリームのファイル読み込みバッファリングを有効にする
    • stream_set_timeout - ストリームにタイムアウトを設定する
    • stream_set_write_buffer - 指定されたストリームのファイル書き込みバッファリングを有効にする
    • stream_socket_accept - stream_socket_server で作られたソケットの接続を受け入れる
    • stream_socket_client - インターネットドメインまたは Unix ドメインのソケット接続を開く
    • stream_socket_enable_crypto - 接続済みのソケットについて暗号化の on/off を切り替える
    • stream_socket_get_name - ローカルまたはリモートのソケットの名前を取得する
    • stream_socket_pair - 接続された、区別できないソケットストリームの組を作成する
    • stream_socket_recvfrom - 接続されているかどうかにかかわらず、ソケットからのデータを受信する
    • stream_socket_sendto - 接続されているかどうかにかかわらず、ソケットにデータを送信する
    • stream_socket_server - インターネットドメインまたは Unix ドメインのサーバーソケットを作成する
    • stream_socket_shutdown - 全二重接続を終了する
    • stream_supports_lock - ストリームがロックをサポートしているかどうかを調べる
    • stream_wrapper_register - PHP のクラスとして実装された URL ラッパーを登録する
    • stream_wrapper_restore - 事前に登録を解除された組み込みラッパーを復元する
    • stream_wrapper_unregister - URL ラッパーの登録を解除する
    • strftime - ロケールの設定に基づいてローカルな日付・時間をフォーマットする
    • Stringable::__toString - オブジェクトの文字列表現を取得する
    • stripcslashes - addcslashes でクォートされた文字列をアンクォートする
    • stripos - 大文字小文字を区別せずに文字列が最初に現れる位置を探す
    • stripslashes - クォートされた文字列のクォート部分を取り除く
    • strip_tags - 文字列から HTML および PHP タグを取り除く
    • stristr - 大文字小文字を区別しない strstr
    • strlen - 文字列の長さを得る
    • strnatcasecmp - "自然順"アルゴリズムにより大文字小文字を区別しない文字列比較を行う
    • strnatcmp - "自然順"アルゴリズムにより文字列比較を行う
    • strncasecmp - バイナリセーフで大文字小文字を区別しない文字列比較を、最初の n 文字について行う
    • strncmp - 最初の n 文字についてバイナリセーフな文字列比較を行う
    • strpbrk - 文字列の中から任意の文字を探す
    • strpos - 文字列内の部分文字列が最初に現れる場所を見つける
    • strptime - strftime が生成した日付/時刻をパースする
    • strrchr - 文字列中に文字が最後に現れる場所を取得する
    • strrev - 文字列を逆順にする
    • strripos - 文字列中で、特定の(大文字小文字を区別しない)文字列が最後に現れた位置を探す
    • strrpos - 文字列中に、ある部分文字列が最後に現れる場所を探す
    • strspn - 指定したマスク内に含まれる文字からなる文字列の最初のセグメントの長さを探す
    • strstr - 文字列が最初に現れる位置を見つける
    • strtok - 文字列をトークンに分割する
    • strtolower - 文字列を小文字にする
    • strtotime - 英文形式の日付を Unix タイムスタンプに変換する
    • strtoupper - 文字列を大文字にする
    • strtr - 文字の変換あるいは部分文字列の置換を行う
    • strval - 変数の文字列としての値を取得する
    • str_contains - 指定された部分文字列が、文字列に含まれるかを調べる
    • str_decrement - 英数字からなる文字列をデクリメントする
    • str_ends_with - 文字列が、指定された文字列で終わるかを調べる。
    • str_getcsv - CSV 文字列をパースして配列に格納する
    • str_increment - 英数字からなる文字列をインクリメントする
    • str_ireplace - 大文字小文字を区別しない str_replace
    • str_pad - 文字列を固定長の他の文字列で埋める
    • str_repeat - 文字列を反復する
    • str_replace - 検索文字列に一致したすべての文字列を置換する
    • str_rot13 - 文字列に rot13 変換を行う
    • str_shuffle - 文字列をランダムにシャッフルする
    • str_split - 文字列を配列に変換する
    • str_starts_with - 文字列が指定された部分文字列で始まるかを調べる
    • str_word_count - 文字列に使用されている単語についての情報を返す
    • substr - 文字列の一部分を返す
    • substr_compare - 指定した位置から指定した長さの 2 つの文字列について、バイナリ対応で比較する
    • substr_count - 副文字列の出現回数を数える
    • substr_replace - 文字列の一部を置換する
    • SVM::crossvalidate - Test training params on subsets of the training data
    • SVM::getOptions - 現在の訓練パラメータを返す
    • SVM::setOptions - 訓練パラメータを設定
    • SVM::train - Create a SVMModel based on training data
    • SVM::__construct - SVM オブジェクトを新規構築
    • SVMModel::checkProbabilityModel - モデルが確率情報を持つ場合 TRUE を返す
    • SVMModel::getLabels - モデルが訓練されたラベルを取得
    • SVMModel::getNrClass - モデルが訓練されたクラスの個数を返す
    • SVMModel::getSvmType - モデルが訓練された SVM の種類を取得
    • SVMModel::getSvrProbability - 回帰モデルに対するσ（シグマ）値を取得
    • SVMModel::load - 保管された SVM モデルを読み込み
    • SVMModel::predict - Predict a value for previously unseen data
    • SVMModel::predict_probability - Return class probabilities for previous unseen data
    • SVMModel::save - モデルをファイルに保管
    • SVMModel::__construct - SVMModel を新規構築
    • svn_add - Schedules the addition of an item in a working directory
    • svn_auth_get_parameter - 認証パラメータを取得する
    • svn_auth_set_parameter - 認証パラメータを設定する
    • svn_blame - ファイルの SVN blame を取得する
    • svn_cat - リポジトリ内のファイルの内容を返す
    • svn_checkout - リポジトリから作業コピーをチェックアウトする
    • svn_cleanup - 作業コピーディレクトリを再帰的にクリーンアップし、中途半端な操作を解消してロックを削除する
    • svn_client_version - SVN クライアントライブラリのバージョンを返す
    • svn_commit - Sends changes from the local working copy to the repository
    • svn_delete - Delete items from a working copy or repository
    • svn_diff - ふたつのパスの差分を再帰的に取得する
    • svn_export - Export the contents of a SVN directory
    • svn_fs_abort_txn - トランザクションを中断する
    • svn_fs_apply_text - 置換に使用するストリームを作成して返す
    • svn_fs_begin_txn2 - 新しいトランザクションを作成する
    • svn_fs_change_node_prop - 成功したら true、失敗したら false を返す
    • svn_fs_check_path - 指定したリポジトリの fsroot パスにどんなアイテムが存在するかを調べる
    • svn_fs_contents_changed - コンテンツが変更されている場合に true、されていない場合に false を返す
    • svn_fs_copy - ファイルまたはディレクトリをコピーする
    • svn_fs_delete - ファイルまたはディレクトリを削除する
    • svn_fs_dir_entries - 指定したパスのディレクトリを列挙し、ディレクトリ名とファイルタイプのハッシュを返す
    • svn_fs_file_contents - 指定したバージョンの fs から、ファイルの中身を読み込むためのストリームを返す
    • svn_fs_file_length - 指定したバージョンの fs から、ファイルの長さを返す
    • svn_fs_is_dir - 指定されたパスがディレクトリかを判定する
    • svn_fs_is_file - 指定されたパスがファイルかを判定する
    • svn_fs_make_dir - 新しい空のディレクトリを作成する
    • svn_fs_make_file - 新しい空のファイルを作成する
    • svn_fs_node_created_rev - fsroot 配下のパスが作成されたリビジョンを返す
    • svn_fs_node_prop - ノードのプロパティの値を返す
    • svn_fs_props_changed - プロパティが変更されている場合に true、それ以外の場合に false を返す
    • svn_fs_revision_prop - 指定したプロパティの値を取得する
    • svn_fs_revision_root - リポジトリのルートの指定したバージョンのハンドルを取得する
    • svn_fs_txn_root - トランザクションのルートを作成して返す
    • svn_fs_youngest_rev - ファイルシステム内で一番若いリビジョン番号を返す
    • svn_import - バージョン管理されていないパスをリポジトリにインポートする
    • svn_log - 指定したリポジトリ URL のコミットログメッセージを返す
    • svn_ls - Returns list of directory contents in repository URL, optionally at revision number
    • svn_mkdir - 作業コピーあるいはリポジトリ内にディレクトリを作成する
    • svn_repos_create - 新しい subversion リポジトリを指定したパスに作成する
    • svn_repos_fs - リポジトリ用に、ファイルシステム上のハンドルを取得する
    • svn_repos_fs_begin_txn_for_commit - 新しいトランザクションを作成する
    • svn_repos_fs_commit_txn - トランザクションをコミットし、新しいリビジョンを返す
    • svn_repos_hotcopy - repospath にあるリポジトリのホットコピーを作成し、destpath にコピーする
    • svn_repos_open - Open a shared lock on a repository
    • svn_repos_recover - Run recovery procedures on the repository located at path
    • svn_revert - Revert changes to the working copy
    • svn_status - Returns the status of working copy files and directories
    • svn_update - Update working copy
    • Swoole\Async::dnsLookup - Async and non-blocking hostname to IP lookup.
    • Swoole\Async::read - Read file stream asynchronously.
    • Swoole\Async::readFile - Read a file asynchronously.
    • Swoole\Async::set - Update the async I/O options.
    • Swoole\Async::write - Write data to a file stream asynchronously.
    • Swoole\Async::writeFile - Description
    • Swoole\Atomic::add - Add a number to the value to the atomic object.
    • Swoole\Atomic::cmpset - Compare and set the value of the atomic object.
    • Swoole\Atomic::get - Get the current value of the atomic object.
    • Swoole\Atomic::set - Set a new value to the atomic object.
    • Swoole\Atomic::sub - Subtract a number to the value of the atomic object.
    • Swoole\Atomic::__construct - Construct a swoole atomic object.
    • Swoole\Buffer::append - Append the string or binary data at the end of the memory buffer and return the new size of memory allocated.
    • Swoole\Buffer::clear - Reset the memory buffer.
    • Swoole\Buffer::expand - Expand the size of memory buffer.
    • Swoole\Buffer::read - Read data from the memory buffer based on offset and length.
    • Swoole\Buffer::recycle - Release the memory to OS which is not used by the memory buffer.
    • Swoole\Buffer::substr - Read data from the memory buffer based on offset and length. Or remove data from the memory buffer.
    • Swoole\Buffer::write - Write data to the memory buffer. The memory allocated for the buffer will not be changed.
    • Swoole\Buffer::__construct - Fixed size memory blocks allocation.
    • Swoole\Buffer::__destruct - Destruct the Swoole memory buffer.
    • Swoole\Buffer::__toString - Get the string value of the memory buffer.
    • Swoole\Channel::pop - Read and pop data from swoole channel.
    • Swoole\Channel::push - Write and push data into Swoole channel.
    • Swoole\Channel::stats - Get stats of swoole channel.
    • Swoole\Channel::__construct - Construct a Swoole Channel
    • Swoole\Channel::__destruct - Destruct a Swoole channel.
    • Swoole\Client::close - Close the connection established.
    • Swoole\Client::connect - Connect to the remote TCP or UDP port.
    • Swoole\Client::getpeername - Get the remote socket name of the connection.
    • Swoole\Client::getsockname - Get the local socket name of the connection.
    • Swoole\Client::isConnected - Check if the connection is established.
    • Swoole\Client::on - Add callback functions triggered by events.
    • Swoole\Client::pause - Pause receiving data.
    • Swoole\Client::pipe - Redirect the data to another file descriptor.
    • Swoole\Client::recv - Receive data from the remote socket.
    • Swoole\Client::resume - Resume receiving data.
    • Swoole\Client::send - Send data to the remote TCP socket.
    • Swoole\Client::sendfile - Send file to the remote TCP socket.
    • Swoole\Client::sendto - Send data to the remote UDP address.
    • Swoole\Client::set - Set the Swoole client parameters before the connection is established.
    • Swoole\Client::sleep - Remove the TCP client from system event loop.
    • Swoole\Client::wakeup - Add the TCP client back into the system event loop.
    • Swoole\Client::__construct - Create Swoole sync or async TCP/UDP client, with or without SSL.
    • Swoole\Client::__destruct - Destruct the Swoole client.
    • Swoole\Connection\Iterator::count - Count connections.
    • Swoole\Connection\Iterator::current - Return current connection entry.
    • Swoole\Connection\Iterator::key - Return key of the current connection.
    • Swoole\Connection\Iterator::next - Move to the next connection.
    • Swoole\Connection\Iterator::offsetExists - Check if offet exists.
    • Swoole\Connection\Iterator::offsetGet - Offset to retrieve.
    • Swoole\Connection\Iterator::offsetSet - Assign a Connection to the specified offset.
    • Swoole\Connection\Iterator::offsetUnset - Unset an offset.
    • Swoole\Connection\Iterator::rewind - Rewinds iterator
    • Swoole\Connection\Iterator::valid - Check if current position is valid.
    • Swoole\Coroutine::call_user_func - Call a callback given by the first parameter
    • Swoole\Coroutine::call_user_func_array - Call a callback with an array of parameters
    • Swoole\Coroutine::cli_wait - Description
    • Swoole\Coroutine::create - Description
    • Swoole\Coroutine::getuid - Description
    • Swoole\Coroutine::resume - Description
    • Swoole\Coroutine::suspend - Description
    • Swoole\Coroutine\Client::close - Description
    • Swoole\Coroutine\Client::connect - Description
    • Swoole\Coroutine\Client::getpeername - Description
    • Swoole\Coroutine\Client::getsockname - Description
    • Swoole\Coroutine\Client::isConnected - Description
    • Swoole\Coroutine\Client::recv - Description
    • Swoole\Coroutine\Client::send - Description
    • Swoole\Coroutine\Client::sendfile - Description
    • Swoole\Coroutine\Client::sendto - Description
    • Swoole\Coroutine\Client::set - Description
    • Swoole\Coroutine\Client::__construct - Description
    • Swoole\Coroutine\Client::__destruct - Description
    • Swoole\Coroutine\Http\Client::addFile - Description
    • Swoole\Coroutine\Http\Client::close - Description
    • Swoole\Coroutine\Http\Client::execute - Description
    • Swoole\Coroutine\Http\Client::get - Description
    • Swoole\Coroutine\Http\Client::getDefer - Description
    • Swoole\Coroutine\Http\Client::isConnected - Description
    • Swoole\Coroutine\Http\Client::post - Description
    • Swoole\Coroutine\Http\Client::recv - Description
    • Swoole\Coroutine\Http\Client::set - Description
    • Swoole\Coroutine\Http\Client::setCookies - Description
    • Swoole\Coroutine\Http\Client::setData - Description
    • Swoole\Coroutine\Http\Client::setDefer - Description
    • Swoole\Coroutine\Http\Client::setHeaders - Description
    • Swoole\Coroutine\Http\Client::setMethod - Description
    • Swoole\Coroutine\Http\Client::__construct - Description
    • Swoole\Coroutine\Http\Client::__destruct - Description
    • Swoole\Coroutine\MySQL::close - Description
    • Swoole\Coroutine\MySQL::connect - Description
    • Swoole\Coroutine\MySQL::getDefer - Description
    • Swoole\Coroutine\MySQL::query - Description
    • Swoole\Coroutine\MySQL::recv - Description
    • Swoole\Coroutine\MySQL::setDefer - Description
    • Swoole\Coroutine\MySQL::__construct - Description
    • Swoole\Coroutine\MySQL::__destruct - Description
    • Swoole\Event::add - Add new callback functions of a socket into the EventLoop.
    • Swoole\Event::defer - Add a callback function to the next event loop.
    • Swoole\Event::del - Remove all event callback functions of a socket.
    • Swoole\Event::exit - Exit the eventloop, only available at client side.
    • Swoole\Event::set - Update the event callback functions of a socket.
    • Swoole\Event::wait - Description
    • Swoole\Event::write - Write data to the socket.
    • Swoole\Http\Client::addFile - Add a file to the post form.
    • Swoole\Http\Client::close - Close the http connection.
    • Swoole\Http\Client::download - Download a file from the remote server.
    • Swoole\Http\Client::execute - Send the HTTP request after setting the parameters.
    • Swoole\Http\Client::get - Send GET http request to the remote server.
    • Swoole\Http\Client::isConnected - Check if the HTTP connection is connected.
    • Swoole\Http\Client::on - Register callback function by event name.
    • Swoole\Http\Client::post - Send POST http request to the remote server.
    • Swoole\Http\Client::push - Push data to websocket client.
    • Swoole\Http\Client::set - Update the HTTP client parameters.
    • Swoole\Http\Client::setCookies - Set the http request cookies.
    • Swoole\Http\Client::setData - Set the HTTP request body data.
    • Swoole\Http\Client::setHeaders - Set the HTTP request headers.
    • Swoole\Http\Client::setMethod - Set the HTTP request method.
    • Swoole\Http\Client::upgrade - Upgrade to websocket protocol.
    • Swoole\Http\Client::__construct - Construct the async HTTP client.
    • Swoole\Http\Client::__destruct - Destruct the HTTP client.
    • Swoole\Http\Request::rawcontent - Get the raw HTTP POST body.
    • Swoole\Http\Request::__destruct - Destruct the HTTP request.
    • Swoole\Http\Response::cookie - Set the cookies of the HTTP response.
    • Swoole\Http\Response::end - Send data for the HTTP request and finish the response.
    • Swoole\Http\Response::gzip - Enable the gzip of response content.
    • Swoole\Http\Response::header - Set the HTTP response headers.
    • Swoole\Http\Response::initHeader - Init the HTTP response header.
    • Swoole\Http\Response::rawcookie - Set the raw cookies to the HTTP response.
    • Swoole\Http\Response::sendfile - Send file through the HTTP response.
    • Swoole\Http\Response::status - Set the status code of the HTTP response.
    • Swoole\Http\Response::write - Append HTTP body content to the HTTP response.
    • Swoole\Http\Response::__destruct - Destruct the HTTP response.
    • Swoole\Http\Server::on - Bind callback function to HTTP server by event name.
    • Swoole\Http\Server::start - Start the swoole http server.
    • Swoole\Lock::lock - Try to acquire the lock. It will block if the lock is not available.
    • Swoole\Lock::lock_read - Lock a read-write lock for reading.
    • Swoole\Lock::trylock - Try to acquire the lock and return straight away even the lock is not available.
    • Swoole\Lock::trylock_read - Try to lock a read-write lock for reading and return straight away even the lock is not available.
    • Swoole\Lock::unlock - Release the lock.
    • Swoole\Lock::__construct - Construct a memory lock.
    • Swoole\Lock::__destruct - Destory a Swoole memory lock.
    • Swoole\Mmap::open - Map a file into memory and return the stream resource which can be used by PHP stream operations.
    • Swoole\MySQL::close - Close the async MySQL connection.
    • Swoole\MySQL::connect - Connect to the remote MySQL server.
    • Swoole\MySQL::getBuffer - Description
    • Swoole\MySQL::on - Register callback function based on event name.
    • Swoole\MySQL::query - Run the SQL query.
    • Swoole\MySQL::__construct - Construct an async MySQL client.
    • Swoole\MySQL::__destruct - Destory the async MySQL client.
    • Swoole\Process::alarm - High precision timer which triggers signal with fixed interval.
    • Swoole\Process::close - Close the pipe to the child process.
    • Swoole\Process::daemon - Change the process to be a daemon process.
    • Swoole\Process::exec - Execute system commands.
    • Swoole\Process::exit - Stop the child processes.
    • Swoole\Process::freeQueue - Destroy the message queue created by swoole_process::useQueue.
    • Swoole\Process::kill - Send signal to the child process.
    • Swoole\Process::name - Set name of the process.
    • Swoole\Process::pop - Read and pop data from the message queue.
    • Swoole\Process::push - Write and push data into the message queue.
    • Swoole\Process::read - Read data sending to the process.
    • Swoole\Process::signal - Send signal to the child processes.
    • Swoole\Process::start - Start the process.
    • Swoole\Process::statQueue - Get the stats of the message queue used as the communication method between processes.
    • Swoole\Process::useQueue - Create a message queue as the communication method between the parent process and child processes.
    • Swoole\Process::wait - Wait for the events of child processes.
    • Swoole\Process::write - Write data into the pipe and communicate with the parent process or child processes.
    • Swoole\Process::__construct - Construct a process.
    • Swoole\Process::__destruct - Destroy the process.
    • Swoole\Redis\Server::format - Description
    • Swoole\Redis\Server::setHandler - Description
    • Swoole\Redis\Server::start - Description
    • Swoole\Serialize::pack - Serialize the data.
    • Swoole\Serialize::unpack - Unserialize the data.
    • Swoole\Server::addlistener - Add a new listener to the server.
    • Swoole\Server::addProcess - Add a user defined swoole_process to the server.
    • Swoole\Server::after - Trigger a callback function after a period of time.
    • Swoole\Server::bind - Bind the connection to a user defined user ID.
    • Swoole\Server::clearTimer - Stop and destroy a timer.
    • Swoole\Server::close - Close a connection to the client.
    • Swoole\Server::confirm - Check status of the connection.
    • Swoole\Server::connection_info - Get the connection info by file description.
    • Swoole\Server::connection_list - Get all of the established connections.
    • Swoole\Server::defer - Delay execution of the callback function at the end of current EventLoop.
    • Swoole\Server::exist - Check if the connection is existed.
    • Swoole\Server::finish - Used in task process for sending result to the worker process when the task is finished.
    • Swoole\Server::getClientInfo - Get the connection info by file description.
    • Swoole\Server::getClientList - Get all of the established connections.
    • Swoole\Server::getLastError - Get the error code of the most recent error.
    • Swoole\Server::heartbeat - Check all the connections on the server.
    • Swoole\Server::listen - Listen on the given IP and port, socket type.
    • Swoole\Server::on - Register a callback function by event name.
    • Swoole\Server::pause - Stop receiving data from the connection.
    • Swoole\Server::protect - Set the connection to be protected mode.
    • Swoole\Server::reload - Restart all the worker process.
    • Swoole\Server::resume - Start receving data from the connection.
    • Swoole\Server::send - Send data to the client.
    • Swoole\Server::sendfile - Send file to the connection.
    • Swoole\Server::sendMessage - Send message to worker processes by ID.
    • Swoole\Server::sendto - Send data to the remote UDP address.
    • Swoole\Server::sendwait - Send data to the remote socket in the blocking way.
    • Swoole\Server::set - Set the runtime settings of the swoole server.
    • Swoole\Server::shutdown - Shutdown the master server process, this function can be called in worker processes.
    • Swoole\Server::start - Start the Swoole server.
    • Swoole\Server::stats - Get the stats of the Swoole server.
    • Swoole\Server::stop - Stop the Swoole server.
    • Swoole\Server::task - Send data to the task worker processes.
    • Swoole\Server::taskwait - Send data to the task worker processes in blocking way.
    • Swoole\Server::taskWaitMulti - Execute multiple tasks concurrently.
    • Swoole\Server::tick - Repeats a given function at every given time-interval.
    • Swoole\Server::__construct - Construct a Swoole server.
    • Swoole\Server\Port::on - Register callback functions by event.
    • Swoole\Server\Port::set - Set protocol of the server port.
    • Swoole\Server\Port::__construct - Construct a server port
    • Swoole\Server\Port::__destruct - Destory server port
    • Swoole\Table::column - Set the data type and size of the columns.
    • Swoole\Table::count - Count the rows in the table, or count all the elements in the table if $mode = 1.
    • Swoole\Table::create - Create the swoole memory table.
    • Swoole\Table::current - Get the current row.
    • Swoole\Table::decr - Decrement the value in the Swoole table by $row_key and $column_key.
    • Swoole\Table::del - Delete a row in the Swoole table by $row_key.
    • Swoole\Table::destroy - Destroy the Swoole table.
    • Swoole\Table::exist - Check if a row is existed by $row_key.
    • Swoole\Table::get - Get the value in the Swoole table by $row_key and $column_key.
    • Swoole\Table::incr - Increment the value by $row_key and $column_key.
    • Swoole\Table::key - Get the key of current row.
    • Swoole\Table::next - Iterator the next row.
    • Swoole\Table::rewind - Rewind the iterator.
    • Swoole\Table::set - Update a row of the table by $row_key.
    • Swoole\Table::valid - Check if the current row is valid.
    • Swoole\Table::__construct - Construct a Swoole memory table with fixed size.
    • Swoole\Timer::after - Trigger a callback function after a period of time.
    • Swoole\Timer::clear - Delete a timer by timer ID.
    • Swoole\Timer::exists - Check if a timer is existed.
    • Swoole\Timer::tick - Repeats a given function at every given time-interval.
    • Swoole\WebSocket\Server::exist - Check if the file descriptor exists.
    • Swoole\WebSocket\Server::on - Register event callback function
    • Swoole\WebSocket\Server::pack - Get a pack of binary data to send in a single frame.
    • Swoole\WebSocket\Server::push - Push data to the remote client.
    • Swoole\WebSocket\Server::unpack - Unpack the binary data received from the client.
    • swoole_async_dns_lookup - Async and non-blocking hostname to IP lookup
    • swoole_async_read - Read file stream asynchronously
    • swoole_async_readfile - Read a file asynchronously
    • swoole_async_set - Update the async I/O options
    • swoole_async_write - Write data to a file stream asynchronously
    • swoole_async_writefile - Write data to a file asynchronously
    • swoole_clear_error - Clear errors in the socket or on the last error code
    • swoole_client_select - Get the file description which are ready to read/write or error
    • swoole_cpu_num - Get the number of CPU
    • swoole_errno - Get the error code of the latest system call
    • swoole_error_log - Output error messages to the log
    • swoole_event_add - Add new callback functions of a socket into the EventLoop
    • swoole_event_defer - Add callback function to the next event loop
    • swoole_event_del - Remove all event callback functions of a socket
    • swoole_event_exit - Exit the eventloop, only available at the client side
    • swoole_event_set - Update the event callback functions of a socket
    • swoole_event_wait - Start the event loop
    • swoole_event_write - Write data to a socket
    • swoole_get_local_ip - Get the IPv4 IP addresses of each NIC on the machine
    • swoole_last_error - Get the lastest error message
    • swoole_load_module - Load a swoole extension
    • swoole_select - Select the file descriptions which are ready to read/write or error in the eventloop
    • swoole_set_process_name - Set the process name
    • swoole_strerror - Convert the Errno into error messages
    • swoole_timer_after - Trigger a one time callback function in the future
    • swoole_timer_exists - Check if a timer callback function is existed
    • swoole_timer_tick - Trigger a timer tick callback function by time interval
    • swoole_version - Get the version of Swoole
    • symlink - シンボリックリンクを作成する
    • SyncEvent::fire - Fires/sets the event
    • SyncEvent::reset - Resets a manual event
    • SyncEvent::wait - Waits for the event to be fired/set
    • SyncEvent::__construct - Constructs a new SyncEvent object
    • SyncMutex::lock - Waits for an exclusive lock
    • SyncMutex::unlock - Unlocks the mutex
    • SyncMutex::__construct - Constructs a new SyncMutex object
    • SyncReaderWriter::readlock - Waits for a read lock
    • SyncReaderWriter::readunlock - Releases a read lock
    • SyncReaderWriter::writelock - Waits for an exclusive write lock
    • SyncReaderWriter::writeunlock - Releases a write lock
    • SyncReaderWriter::__construct - Constructs a new SyncReaderWriter object
    • SyncSemaphore::lock - Decreases the count of the semaphore or waits
    • SyncSemaphore::unlock - Increases the count of the semaphore
    • SyncSemaphore::__construct - Constructs a new SyncSemaphore object
    • SyncSharedMemory::first - Check to see if the object is the first instance system-wide of named shared memory
    • SyncSharedMemory::read - Copy data from named shared memory
    • SyncSharedMemory::size - Returns the size of the named shared memory
    • SyncSharedMemory::write - Copy data to named shared memory
    • SyncSharedMemory::__construct - Constructs a new SyncSharedMemory object
    • syslog - システムログのメッセージを生成する
    • system - 外部プログラムを実行し、出力を表示する
    • sys_getloadavg - システムの平均負荷を取得する
    • sys_get_temp_dir - 一時ファイル用に使用されるディレクトリのパスを返す
  • t
    • Table::count - 行の数を取得する
    • Table::delete - テーブルから行を削除する
    • Table::existsInDatabase - テーブルがデータベースに存在するかをチェックする
    • Table::getName - テーブル名を取得する
    • Table::getSchema - テーブルスキーマを取得する
    • Table::getSession - テーブルを操作するためのセッションを取得する
    • Table::insert - テーブルに行を挿入する
    • Table::isView - テーブルがビューかどうかを調べる
    • Table::select - テーブルから行を選択する
    • Table::update - テーブルの行を更新する
    • Table::__construct - Table のコンストラクタ
    • TableDelete::bind - delete のクエリパラメータをバインドする
    • TableDelete::execute - delete文を実行する
    • TableDelete::limit - 削除する行を限定する
    • TableDelete::orderby - 削除の際のソート条件を設定する
    • TableDelete::where - 削除時の検索条件を設定する
    • TableDelete::__construct - TableDelete のコンストラクタ
    • TableInsert::execute - insert クエリを実行する
    • TableInsert::values - 挿入する行の値を追加する
    • TableInsert::__construct - TableInsert クラスのコンストラクタ
    • TableSelect::bind - select のクエリパラメータをバインドする
    • TableSelect::execute - select ステートメントを実行する
    • TableSelect::groupBy - select 時のグループ化の条件を設定する
    • TableSelect::having - select 句の having 条件を設定する
    • TableSelect::limit - 選択される行の数を限定する
    • TableSelect::lockExclusive - EXCLUSIVE LOCK を実行する
    • TableSelect::lockShared - SHARED LOCK を実行する
    • TableSelect::offset - スキップするoffsetを設定する
    • TableSelect::orderby - select 文のソート条件を設定する
    • TableSelect::where - select 文の検索条件を設定する
    • TableSelect::__construct - TableSelect のコンストラクタ
    • TableUpdate::bind - update のクエリパラメータをバインドする
    • TableUpdate::execute - update クエリを実行する
    • TableUpdate::limit - 更新する行の数を限定する
    • TableUpdate::orderby - ソート条件を設定する
    • TableUpdate::set - 更新されるフィールドを追加する
    • TableUpdate::where - 検索フィルタを設定する
    • TableUpdate::__construct - TableUpdate のコンストラクタ
    • taint - 文字列を汚染させる
    • tan - 正接（タンジェント）
    • tanh - 双曲線正接（ハイパボリックタンジェント）
    • tcpwrap_check - tcpwrap のチェックを実行する
    • tempnam - 一意なファイル名を生成する
    • textdomain - デフォルトドメインを設定する
    • Thread::getCreatorId - 識別
    • Thread::getCurrentThread - Identification
    • Thread::getCurrentThreadId - Identification
    • Thread::getThreadId - 識別
    • Thread::isJoined - 状態を検出する
    • Thread::isStarted - 状態を検出する
    • Thread::join - 同期処理
    • Thread::start - 実行する
    • Threaded::chunk - Manipulation
    • Threaded::count - Manipulation
    • Threaded::extend - Runtime Manipulation
    • Threaded::isRunning - State Detection
    • Threaded::isTerminated - State Detection
    • Threaded::merge - Manipulation
    • Threaded::notify - Synchronization
    • Threaded::notifyOne - Synchronization
    • Threaded::pop - Manipulation
    • Threaded::run - Execution
    • Threaded::shift - Manipulation
    • Threaded::synchronized - Synchronization
    • Threaded::wait - Synchronization
    • Throwable::getCode - 例外コードを取得する
    • Throwable::getFile - オブジェクトが作られたファイル名を取得する
    • Throwable::getLine - オブジェクトのインスタンスが作られた行番号を取得する
    • Throwable::getMessage - メッセージを取得する
    • Throwable::getPrevious - ひとつ前の Throwable を返す
    • Throwable::getTrace - スタックトレースを取得する
    • Throwable::getTraceAsString - スタックトレースを文字列として取得する
    • Throwable::__toString - スローされたオブジェクトの文字列表現を取得する
    • tidy::$errorBuffer - 指定したドキュメントのパースで発生した警告とエラーを返す
    • tidy::body - Tidy パースツリーの <body> タグから始まる tidyNode オブジェクトを返す
    • tidy::cleanRepair - パースされたマークアップに設定に基く誤りの修正を行う
    • tidy::diagnose - パース、修正されたマークアップの診断を行う
    • tidy::getConfig - 現在の Tidy の設定を取得する
    • tidy::getHtmlVer - 指定したドキュメントで検出された HTML バージョンを取得する
    • tidy::getOpt - Tidy ドキュメントについて指定した設定オプションの値を返す
    • tidy::getOptDoc - 与えられたオプション名に対するドキュメントを返す
    • tidy::getRelease - Tidy ライブラリのリリース日 (バージョン) を取得する
    • tidy::getStatus - 指定したドキュメントのステータスを取得する
    • tidy::head - Tidy パースツリーの <head> タグから始まる tidyNode オブジェクトを返す
    • tidy::html - Tidy パースツリーの <html> タグから始まる tidyNode オブジェクトを返す
    • tidy::isXhtml - ドキュメントが XHTML ドキュメントかどうかを示す
    • tidy::isXml - ドキュメントが一般的な XML ドキュメント (非 HTML/XHTML) かどうかを示す
    • tidy::parseFile - ファイルまたは URI にあるマークアップをパースする
    • tidy::parseString - 文字列にストアされたドキュメントをパースする
    • tidy::repairFile - ファイルを修正し、それを文字列として返す
    • tidy::repairString - 別途提供される設定ファイルを使用して文字列を修正する
    • tidy::root - Tidy パースツリーのルートを表す tidyNode を返す
    • tidy::__construct - 新しい tidy オブジェクトを作成する
    • tidyNode::getParent - カレントノードの親ノードを返す
    • tidyNode::hasChildren - ノードが子を持つかどうかを調べる
    • tidyNode::hasSiblings - このノードが兄弟ノードを持つかどうかを調べる
    • tidyNode::isAsp - このノードが ASP かどうかを調べる
    • tidyNode::isComment - このノードがコメントを表すものかどうかを調べる
    • tidyNode::isHtml - このノードが HTML要素 であるかどうかを調べる
    • tidyNode::isJste - このノードが JSTE であるかどうかを調べる
    • tidyNode::isPhp - このノードが PHP であるかどうかを調べる
    • tidyNode::isText - このノードが (マークアップでない) テキストであるかどうかを調べる
    • tidyNode::__construct - private なコンストラクタのため、直接インスタンス化できません
    • tidy_access_count - 指定したドキュメントについて発生したTidyアクセシビリティ警告の数を返す
    • tidy_config_count - 指定したドキュメントについて発生した Tidy 設定エラーの数を返す
    • tidy_error_count - 指定したドキュメントについて発生した Tidy エラーの数を返す
    • tidy_get_output - パースされた Tidy マークアップを表す文字列を返す
    • tidy_warning_count - 指定したドキュメントについて発生した Tidy 警告の数を返す
    • time - 現在の Unix タイムスタンプを返す
    • timezone_abbreviations_list - DateTimeZone::listAbbreviations のエイリアス
    • timezone_identifiers_list - DateTimeZone::listIdentifiers のエイリアス
    • timezone_location_get - DateTimeZone::getLocation のエイリアス
    • timezone_name_from_abbr - 略称とUTCオフセットから、タイムゾーン名を推測して返す
    • timezone_name_get - DateTimeZone::getName のエイリアス
    • timezone_offset_get - DateTimeZone::getOffset のエイリアス
    • timezone_open - DateTimeZone::__construct のエイリアス
    • timezone_transitions_get - DateTimeZone::getTransitions のエイリアス
    • timezone_version_get - timezonedb のバージョンを取得する
    • time_nanosleep - 秒およびナノ秒単位で実行を遅延する
    • time_sleep_until - 指定した時刻まで実行を遅延する
    • tmpfile - テンポラリファイルを作成する
    • token_get_all - 指定したソースを PHP トークンに分割する
    • token_name - 指定した PHP トークンのシンボル名を取得する
    • touch - ファイルの最終アクセス時刻および最終更新日をセットする
    • trader_acos - Vector Trigonometric ACos
    • trader_ad - Chaikin A/D Line
    • trader_add - Vector Arithmetic Add
    • trader_adosc - Chaikin A/D Oscillator
    • trader_adx - Average Directional Movement Index
    • trader_adxr - Average Directional Movement Index Rating
    • trader_apo - Absolute Price Oscillator
    • trader_aroon - Aroon
    • trader_aroonosc - Aroon Oscillator
    • trader_asin - Vector Trigonometric ASin
    • trader_atan - Vector Trigonometric ATan
    • trader_atr - Average True Range
    • trader_avgprice - Average Price
    • trader_bbands - Bollinger Bands
    • trader_beta - Beta
    • trader_bop - Balance Of Power
    • trader_cci - Commodity Channel Index
    • trader_cdl2crows - Two Crows
    • trader_cdl3blackcrows - Three Black Crows
    • trader_cdl3inside - Three Inside Up/Down
    • trader_cdl3linestrike - Three-Line Strike
    • trader_cdl3outside - Three Outside Up/Down
    • trader_cdl3starsinsouth - Three Stars In The South
    • trader_cdl3whitesoldiers - Three Advancing White Soldiers
    • trader_cdlabandonedbaby - Abandoned Baby
    • trader_cdladvanceblock - Advance Block
    • trader_cdlbelthold - Belt-hold
    • trader_cdlbreakaway - Breakaway
    • trader_cdlclosingmarubozu - Closing Marubozu
    • trader_cdlconcealbabyswall - Concealing Baby Swallow
    • trader_cdlcounterattack - Counterattack
    • trader_cdldarkcloudcover - Dark Cloud Cover
    • trader_cdldoji - Doji
    • trader_cdldojistar - Doji Star
    • trader_cdldragonflydoji - Dragonfly Doji
    • trader_cdlengulfing - Engulfing Pattern
    • trader_cdleveningdojistar - Evening Doji Star
    • trader_cdleveningstar - Evening Star
    • trader_cdlgapsidesidewhite - Up/Down-gap side-by-side white lines
    • trader_cdlgravestonedoji - Gravestone Doji
    • trader_cdlhammer - Hammer
    • trader_cdlhangingman - Hanging Man
    • trader_cdlharami - Harami Pattern
    • trader_cdlharamicross - Harami Cross Pattern
    • trader_cdlhighwave - High-Wave Candle
    • trader_cdlhikkake - Hikkake Pattern
    • trader_cdlhikkakemod - Modified Hikkake Pattern
    • trader_cdlhomingpigeon - Homing Pigeon
    • trader_cdlidentical3crows - Identical Three Crows
    • trader_cdlinneck - In-Neck Pattern
    • trader_cdlinvertedhammer - Inverted Hammer
    • trader_cdlkicking - Kicking
    • trader_cdlkickingbylength - Kicking - bull/bear determined by the longer marubozu
    • trader_cdlladderbottom - Ladder Bottom
    • trader_cdllongleggeddoji - Long Legged Doji
    • trader_cdllongline - Long Line Candle
    • trader_cdlmarubozu - Marubozu
    • trader_cdlmatchinglow - Matching Low
    • trader_cdlmathold - Mat Hold
    • trader_cdlmorningdojistar - Morning Doji Star
    • trader_cdlmorningstar - Morning Star
    • trader_cdlonneck - On-Neck Pattern
    • trader_cdlpiercing - Piercing Pattern
    • trader_cdlrickshawman - Rickshaw Man
    • trader_cdlrisefall3methods - Rising/Falling Three Methods
    • trader_cdlseparatinglines - Separating Lines
    • trader_cdlshootingstar - Shooting Star
    • trader_cdlshortline - Short Line Candle
    • trader_cdlspinningtop - Spinning Top
    • trader_cdlstalledpattern - Stalled Pattern
    • trader_cdlsticksandwich - Stick Sandwich
    • trader_cdltakuri - Takuri (Dragonfly Doji with very long lower shadow)
    • trader_cdltasukigap - Tasuki Gap
    • trader_cdlthrusting - Thrusting Pattern
    • trader_cdltristar - Tristar Pattern
    • trader_cdlunique3river - Unique 3 River
    • trader_cdlupsidegap2crows - Upside Gap Two Crows
    • trader_cdlxsidegap3methods - Upside/Downside Gap Three Methods
    • trader_ceil - Vector Ceil
    • trader_cmo - Chande Momentum Oscillator
    • trader_correl - Pearson's Correlation Coefficient (r)
    • trader_cos - Vector Trigonometric Cos
    • trader_cosh - Vector Trigonometric Cosh
    • trader_dema - Double Exponential Moving Average
    • trader_div - Vector Arithmetic Div
    • trader_dx - Directional Movement Index
    • trader_ema - Exponential Moving Average
    • trader_errno - Get error code
    • trader_exp - Vector Arithmetic Exp
    • trader_floor - Vector Floor
    • trader_get_compat - Get compatibility mode
    • trader_get_unstable_period - Get unstable period
    • trader_ht_dcperiod - Hilbert Transform - Dominant Cycle Period
    • trader_ht_dcphase - Hilbert Transform - Dominant Cycle Phase
    • trader_ht_phasor - Hilbert Transform - Phasor Components
    • trader_ht_sine - Hilbert Transform - SineWave
    • trader_ht_trendline - Hilbert Transform - Instantaneous Trendline
    • trader_ht_trendmode - Hilbert Transform - Trend vs Cycle Mode
    • trader_kama - Kaufman Adaptive Moving Average
    • trader_linearreg - Linear Regression
    • trader_linearreg_angle - Linear Regression Angle
    • trader_linearreg_intercept - Linear Regression Intercept
    • trader_linearreg_slope - Linear Regression Slope
    • trader_ln - Vector Log Natural
    • trader_log10 - Vector Log10
    • trader_ma - Moving average
    • trader_macd - Moving Average Convergence/Divergence
    • trader_macdext - MACD with controllable MA type
    • trader_macdfix - Moving Average Convergence/Divergence Fix 12/26
    • trader_mama - MESA Adaptive Moving Average
    • trader_mavp - Moving average with variable period
    • trader_max - Highest value over a specified period
    • trader_maxindex - Index of highest value over a specified period
    • trader_medprice - Median Price
    • trader_mfi - Money Flow Index
    • trader_midpoint - MidPoint over period
    • trader_midprice - Midpoint Price over period
    • trader_min - Lowest value over a specified period
    • trader_minindex - Index of lowest value over a specified period
    • trader_minmax - Lowest and highest values over a specified period
    • trader_minmaxindex - Indexes of lowest and highest values over a specified period
    • trader_minus_di - Minus Directional Indicator
    • trader_minus_dm - Minus Directional Movement
    • trader_mom - Momentum
    • trader_mult - Vector Arithmetic Mult
    • trader_natr - Normalized Average True Range
    • trader_obv - On Balance Volume
    • trader_plus_di - Plus Directional Indicator
    • trader_plus_dm - Plus Directional Movement
    • trader_ppo - Percentage Price Oscillator
    • trader_roc - Rate of change : ((price/prevPrice)-1)*100
    • trader_rocp - Rate of change Percentage: (price-prevPrice)/prevPrice
    • trader_rocr - Rate of change ratio: (price/prevPrice)
    • trader_rocr100 - Rate of change ratio 100 scale: (price/prevPrice)*100
    • trader_rsi - Relative Strength Index
    • trader_sar - Parabolic SAR
    • trader_sarext - Parabolic SAR - Extended
    • trader_set_compat - Set compatibility mode
    • trader_set_unstable_period - Set unstable period
    • trader_sin - Vector Trigonometric Sin
    • trader_sinh - Vector Trigonometric Sinh
    • trader_sma - Simple Moving Average
    • trader_sqrt - Vector Square Root
    • trader_stddev - Standard Deviation
    • trader_stoch - Stochastic
    • trader_stochf - Stochastic Fast
    • trader_stochrsi - Stochastic Relative Strength Index
    • trader_sub - Vector Arithmetic Subtraction
    • trader_sum - Summation
    • trader_t3 - Triple Exponential Moving Average (T3)
    • trader_tan - Vector Trigonometric Tan
    • trader_tanh - Vector Trigonometric Tanh
    • trader_tema - Triple Exponential Moving Average
    • trader_trange - True Range
    • trader_trima - Triangular Moving Average
    • trader_trix - 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
    • trader_tsf - Time Series Forecast
    • trader_typprice - Typical Price
    • trader_ultosc - Ultimate Oscillator
    • trader_var - Variance
    • trader_wclprice - Weighted Close Price
    • trader_willr - Williams' %R
    • trader_wma - Weighted Moving Average
    • trait_exists - トレイトが存在するかどうかを調べる
    • Transliterator::create - Transliterator を作成する
    • Transliterator::createFromRules - 規則に基づいた Transliterator を作成する
    • Transliterator::createInverse - 逆方向の Transliterator を作成する
    • Transliterator::getErrorCode - 直近のエラーコードを取得する
    • Transliterator::getErrorMessage - 直近のエラーメッセージを取得する
    • Transliterator::listIDs - Transliterator の ID を取得する
    • Transliterator::transliterate - 文字列を音訳する
    • Transliterator::__construct - インスタンス化を拒否するために private にしたコンストラクタ
    • trigger_error - ユーザーレベルのエラー/警告/通知メッセージを生成する
    • trim - 文字列の先頭および末尾にあるホワイトスペースを取り除く
  • u
    • uasort - ユーザー定義の比較関数で配列をソートし、連想インデックスを保持する
    • ucfirst - 文字列の最初の文字を大文字にする
    • UConverter::convert - ある文字セットから別の文字セットに文字列を変換する
    • UConverter::fromUCallback - デフォルトの "from" コールバック関数
    • UConverter::getAliases - 指定した名前のエイリアスを取得する
    • UConverter::getAvailable - 利用可能なコンバーター名を取得する
    • UConverter::getDestinationEncoding - 変換先エンコーディングを取得する
    • UConverter::getDestinationType - 変換先のコンバーターの型を取得する
    • UConverter::getErrorCode - 直近のエラーコードを取得する
    • UConverter::getErrorMessage - 直近のエラーメッセージを取得する
    • UConverter::getSourceEncoding - 変換元エンコーディングを取得する
    • UConverter::getSourceType - 変換元のコンバーターの型を取得する
    • UConverter::getStandards - コンバーター名に対応する標準を取得する
    • UConverter::getSubstChars - 置換文字を取得する
    • UConverter::reasonText - コールバックの理由を表す文字列を取得する
    • UConverter::setDestinationEncoding - 変換先エンコーディングを設定する
    • UConverter::setSourceEncoding - 変換元エンコーディングを設定する
    • UConverter::setSubstChars - 置換文字を設定する
    • UConverter::toUCallback - デフォルトの "to" コールバック関数
    • UConverter::transcode - ある文字エンコーディングから別の文字エンコーディングに文字列を変換する
    • UConverter::__construct - UConverter オブジェクトを作る
    • ucwords - 文字列の各単語の最初の文字を大文字にする
    • UI\Area::onDraw - Draw Callback
    • UI\Area::onKey - Key Callback
    • UI\Area::onMouse - Mouse Callback
    • UI\Area::redraw - Redraw Area
    • UI\Area::scrollTo - Area Scroll
    • UI\Area::setSize - Set Size
    • UI\Control::destroy - Destroy Control
    • UI\Control::disable - Disable Control
    • UI\Control::enable - Enable Control
    • UI\Control::getParent - Get Parent Control
    • UI\Control::getTopLevel - Get Top Level
    • UI\Control::hide - Hide Control
    • UI\Control::isEnabled - Determine if Control is enabled
    • UI\Control::isVisible - Determine if Control is visible
    • UI\Control::setParent - Set Parent Control
    • UI\Control::show - Control Show
    • UI\Controls\Box::append - Append Control
    • UI\Controls\Box::delete - Delete Control
    • UI\Controls\Box::getOrientation - Get Orientation
    • UI\Controls\Box::isPadded - Padding Detection
    • UI\Controls\Box::setPadded - Set Padding
    • UI\Controls\Box::__construct - Construct a new Box
    • UI\Controls\Button::getText - Get Text
    • UI\Controls\Button::onClick - Click Handler
    • UI\Controls\Button::setText - Set Text
    • UI\Controls\Button::__construct - Construct a new Button
    • UI\Controls\Check::getText - Get Text
    • UI\Controls\Check::isChecked - Checked Detection
    • UI\Controls\Check::onToggle - Toggle Callback
    • UI\Controls\Check::setChecked - Set Checked
    • UI\Controls\Check::setText - Set Text
    • UI\Controls\Check::__construct - Construct a new Check
    • UI\Controls\ColorButton::getColor - Get Color
    • UI\Controls\ColorButton::onChange - Change Handler
    • UI\Controls\ColorButton::setColor - Set Color
    • UI\Controls\Combo::append - Append Option
    • UI\Controls\Combo::getSelected - Get Selected Option
    • UI\Controls\Combo::onSelected - Selected Handler
    • UI\Controls\Combo::setSelected - Set Selected Option
    • UI\Controls\EditableCombo::append - Append Option
    • UI\Controls\EditableCombo::getText - Get Text
    • UI\Controls\EditableCombo::onChange - Change Handler
    • UI\Controls\EditableCombo::setText - Set Text
    • UI\Controls\Entry::getText - Get Text
    • UI\Controls\Entry::isReadOnly - Detect Read Only
    • UI\Controls\Entry::onChange - Change Handler
    • UI\Controls\Entry::setReadOnly - Set Read Only
    • UI\Controls\Entry::setText - Set Text
    • UI\Controls\Entry::__construct - Construct a new Entry
    • UI\Controls\Form::append - Append Control
    • UI\Controls\Form::delete - Delete Control
    • UI\Controls\Form::isPadded - Padding Detection
    • UI\Controls\Form::setPadded - Set Padding
    • UI\Controls\Grid::append - Append Control
    • UI\Controls\Grid::isPadded - Padding Detection
    • UI\Controls\Grid::setPadded - Set Padding
    • UI\Controls\Group::append - Append Control
    • UI\Controls\Group::getTitle - Get Title
    • UI\Controls\Group::hasMargin - Margin Detection
    • UI\Controls\Group::setMargin - Set Margin
    • UI\Controls\Group::setTitle - Set Title
    • UI\Controls\Group::__construct - Construct a new Group
    • UI\Controls\Label::getText - Get Text
    • UI\Controls\Label::setText - Set Text
    • UI\Controls\Label::__construct - Construct a new Label
    • UI\Controls\MultilineEntry::append - Append Text
    • UI\Controls\MultilineEntry::getText - Get Text
    • UI\Controls\MultilineEntry::isReadOnly - Read Only Detection
    • UI\Controls\MultilineEntry::onChange - Change Handler
    • UI\Controls\MultilineEntry::setReadOnly - Set Read Only
    • UI\Controls\MultilineEntry::setText - Set Text
    • UI\Controls\MultilineEntry::__construct - Construct a new Multiline Entry
    • UI\Controls\Picker::__construct - Construct a new Picker
    • UI\Controls\Progress::getValue - Get Value
    • UI\Controls\Progress::setValue - Set Value
    • UI\Controls\Radio::append - Append Option
    • UI\Controls\Radio::getSelected - Get Selected Option
    • UI\Controls\Radio::onSelected - Selected Handler
    • UI\Controls\Radio::setSelected - Set Selected Option
    • UI\Controls\Separator::__construct - Construct a new Separator
    • UI\Controls\Slider::getValue - Get Value
    • UI\Controls\Slider::onChange - Change Handler
    • UI\Controls\Slider::setValue - Set Value
    • UI\Controls\Slider::__construct - Construct a new Slider
    • UI\Controls\Spin::getValue - Get Value
    • UI\Controls\Spin::onChange - Change Handler
    • UI\Controls\Spin::setValue - Set Value
    • UI\Controls\Spin::__construct - Construct a new Spin
    • UI\Controls\Tab::append - Append Page
    • UI\Controls\Tab::delete - Delete Page
    • UI\Controls\Tab::hasMargin - Margin Detection
    • UI\Controls\Tab::insertAt - Insert Page
    • UI\Controls\Tab::pages - Page Count
    • UI\Controls\Tab::setMargin - Set Margin
    • UI\Draw\Brush::getColor - Get Color
    • UI\Draw\Brush::setColor - Set Color
    • UI\Draw\Brush::__construct - Construct a new Brush
    • UI\Draw\Brush\Gradient::addStop - Stop Manipulation
    • UI\Draw\Brush\Gradient::delStop - Stop Manipulation
    • UI\Draw\Brush\Gradient::setStop - Stop Manipulation
    • UI\Draw\Brush\LinearGradient::__construct - Construct a Linear Gradient
    • UI\Draw\Brush\RadialGradient::__construct - Construct a new Radial Gradient
    • UI\Draw\Color::getChannel - Color Manipulation
    • UI\Draw\Color::setChannel - Color Manipulation
    • UI\Draw\Color::__construct - Construct new Color
    • UI\Draw\Matrix::invert - Invert Matrix
    • UI\Draw\Matrix::isInvertible - Invertible Detection
    • UI\Draw\Matrix::multiply - Multiply Matrix
    • UI\Draw\Matrix::rotate - Rotate Matrix
    • UI\Draw\Matrix::scale - Scale Matrix
    • UI\Draw\Matrix::skew - Skew Matrix
    • UI\Draw\Matrix::translate - Translate Matrix
    • UI\Draw\Path::addRectangle - Draw a Rectangle
    • UI\Draw\Path::arcTo - Draw an Arc
    • UI\Draw\Path::bezierTo - Draw Bezier Curve
    • UI\Draw\Path::closeFigure - Close Figure
    • UI\Draw\Path::end - Finalize Path
    • UI\Draw\Path::lineTo - Draw a Line
    • UI\Draw\Path::newFigure - Draw Figure
    • UI\Draw\Path::newFigureWithArc - Draw Figure with Arc
    • UI\Draw\Path::__construct - Construct a new Path
    • UI\Draw\Pen::clip - Clip a Path
    • UI\Draw\Pen::fill - Fill a Path
    • UI\Draw\Pen::restore - Restore
    • UI\Draw\Pen::save - Save
    • UI\Draw\Pen::stroke - Stroke a Path
    • UI\Draw\Pen::transform - Matrix Transform
    • UI\Draw\Pen::write - Draw Text at Point
    • UI\Draw\Stroke::getCap - Get Line Cap
    • UI\Draw\Stroke::getJoin - Get Line Join
    • UI\Draw\Stroke::getMiterLimit - Get Miter Limit
    • UI\Draw\Stroke::getThickness - Get Thickness
    • UI\Draw\Stroke::setCap - Set Line Cap
    • UI\Draw\Stroke::setJoin - Set Line Join
    • UI\Draw\Stroke::setMiterLimit - Set Miter Limit
    • UI\Draw\Stroke::setThickness - Set Thickness
    • UI\Draw\Stroke::__construct - Construct a new Stroke
    • UI\Draw\Text\Font::getAscent - Font Metrics
    • UI\Draw\Text\Font::getDescent - Font Metrics
    • UI\Draw\Text\Font::getLeading - Font Metrics
    • UI\Draw\Text\Font::getUnderlinePosition - Font Metrics
    • UI\Draw\Text\Font::getUnderlineThickness - Font Metrics
    • UI\Draw\Text\Font::__construct - Construct a new Font
    • UI\Draw\Text\Font\Descriptor::getFamily - Get Font Family
    • UI\Draw\Text\Font\Descriptor::getItalic - Style Detection
    • UI\Draw\Text\Font\Descriptor::getSize - Size Detection
    • UI\Draw\Text\Font\Descriptor::getStretch - Style Detection
    • UI\Draw\Text\Font\Descriptor::getWeight - Weight Detection
    • UI\Draw\Text\Font\Descriptor::__construct - Construct a new Font Descriptor
    • UI\Draw\Text\Font\fontFamilies - Retrieve Font Families
    • UI\Draw\Text\Layout::setColor - Set Color
    • UI\Draw\Text\Layout::setWidth - Set Width
    • UI\Draw\Text\Layout::__construct - Construct a new Text Layout
    • UI\Executor::kill - Stop Executor
    • UI\Executor::onExecute - Execution Callback
    • UI\Executor::setInterval - Interval Manipulation
    • UI\Executor::__construct - Construct a new Executor
    • UI\Menu::append - Append Menu Item
    • UI\Menu::appendAbout - Append About Menu Item
    • UI\Menu::appendCheck - Append Checkable Menu Item
    • UI\Menu::appendPreferences - Append Preferences Menu Item
    • UI\Menu::appendQuit - Append Quit Menu Item
    • UI\Menu::appendSeparator - Append Menu Item Separator
    • UI\Menu::__construct - Construct a new Menu
    • UI\MenuItem::disable - Disable Menu Item
    • UI\MenuItem::enable - Enable Menu Item
    • UI\MenuItem::isChecked - Detect Checked
    • UI\MenuItem::onClick - On Click Callback
    • UI\MenuItem::setChecked - Set Checked
    • UI\Point::at - Size Coercion
    • UI\Point::getX - Retrieves X
    • UI\Point::getY - Retrieves Y
    • UI\Point::setX - Set X
    • UI\Point::setY - Set Y
    • UI\Point::__construct - Construct a new Point
    • UI\quit - Quit UI Loop
    • UI\run - Enter UI Loop
    • UI\Size::getHeight - Retrieves Height
    • UI\Size::getWidth - Retrives Width
    • UI\Size::of - Point Coercion
    • UI\Size::setHeight - Set Height
    • UI\Size::setWidth - Set Width
    • UI\Size::__construct - Construct a new Size
    • UI\Window::add - Add a Control
    • UI\Window::error - Show Error Box
    • UI\Window::getSize - Get Window Size
    • UI\Window::getTitle - Get Title
    • UI\Window::hasBorders - Border Detection
    • UI\Window::hasMargin - Margin Detection
    • UI\Window::isFullScreen - Full Screen Detection
    • UI\Window::msg - Show Message Box
    • UI\Window::onClosing - Closing Callback
    • UI\Window::open - Open Dialog
    • UI\Window::save - Save Dialog
    • UI\Window::setBorders - Border Use
    • UI\Window::setFullScreen - Full Screen Use
    • UI\Window::setMargin - Margin Use
    • UI\Window::setSize - Set Size
    • UI\Window::setTitle - Window Title
    • UI\Window::__construct - Construct a new Window
    • uksort - ユーザー定義の比較関数を用いて、キーで配列をソートする
    • umask - 現在の umask を変更する
    • uniqid - 時刻ベースの識別子を生成する
    • UnitEnum::cases - 列挙型の case 一覧を生成する
    • unixtojd - Unix タイムスタンプをユリウス歴に変換する
    • unlink - ファイルを削除する
    • unpack - バイナリ文字列からデータを切り出す
    • unregister_tick_function - 各 tick の実行用の関数の登録を解除する
    • unserialize - 保存用表現から PHP の値を生成する
    • unset - 指定した変数の割当を解除する
    • untaint - 文字列の汚染を除去する
    • uopz_add_function - Adds non-existent function or method
    • uopz_allow_exit - Allows control over disabled exit opcode
    • uopz_backup - Backup a function
    • uopz_compose - Compose a class
    • uopz_copy - Copy a function
    • uopz_delete - Delete a function
    • uopz_del_function - Deletes previously added function or method
    • uopz_extend - 実行時にクラスを継承させる
    • uopz_flags - 関数またはクラスのフラグを 取得/設定 する
    • uopz_function - Creates a function at runtime
    • uopz_get_exit_status - Retrieve the last set exit status
    • uopz_get_hook - Gets previously set hook on function or method
    • uopz_get_mock - Get the current mock for a class
    • uopz_get_property - Gets value of class or instance property
    • uopz_get_return - Gets a previous set return value for a function
    • uopz_get_static - 関数またはメソッドスコープから、static変数を取得する
    • uopz_implement - 実行時にインターフェイスを実装させる
    • uopz_overload - Overload a VM opcode
    • uopz_redefine - 定数を再定義
    • uopz_rename - Rename a function at runtime
    • uopz_restore - Restore a previously backed up function
    • uopz_set_hook - Sets hook to execute when entering a function or method
    • uopz_set_mock - 新しいオブジェクトを生成する際に、クラスの代わりにモックを使う
    • uopz_set_property - Sets value of existing class or instance property
    • uopz_set_return - Provide a return value for an existing function
    • uopz_set_static - Sets the static variables in function or method scope
    • uopz_undefine - 定数を未定義化
    • uopz_unset_hook - Removes previously set hook on function or method
    • uopz_unset_mock - 以前に設定したモックを削除する
    • uopz_unset_return - Unsets a previously set return value for a function
    • urldecode - URL エンコードされた文字列をデコードする
    • urlencode - 文字列を URL エンコードする
    • user_error - trigger_error のエイリアス
    • use_soap_error_handler - SOAP エラーハンドラを使用するかどうかを設定する
    • usleep - マイクロ秒単位で実行を遅延する
    • usort - ユーザー定義の比較関数を使用して、配列を値でソートする
    • utf8_decode - UTF-8 エンコードされた文字列を、ISO-8859-1 に変換し、表現できない文字を置換する
    • utf8_encode - ISO-8859-1 文字列を UTF-8 に変換する
  • v
    • V8Js::executeString - 文字列を JavaScript のコードとして実行する
    • V8Js::getExtensions - 登録された拡張の配列を返す
    • V8Js::getPendingException - キャッチされなかった JavaScript 例外の中で未処理のものを返す
    • V8Js::registerExtension - V8Js で使う JavaScript の拡張を登録する
    • V8Js::__construct - 新しい V8Js オブジェクトを作成する
    • V8JsException::getJsFileName - getJsFileName
    • V8JsException::getJsLineNumber - getJsLineNumber
    • V8JsException::getJsSourceLine - getJsSourceLine
    • V8JsException::getJsTrace - getJsTrace
    • variant::__construct - variant クラスのコンストラクタ
    • variant_abs - variant の絶対値を返す
    • variant_add - 2 つの variant 値を「加算」し、結果を返す
    • variant_and - 2 つの variant の論理積を計算し、結果を返す
    • variant_cast - variant を、別の型の新しい variant に変換する
    • variant_cat - 2 つの variant 値を連結し、その結果を返す
    • variant_cmp - 2 つの variant を比較する
    • variant_date_from_timestamp - Unix タイムスタンプを、日付形式の variant で返す
    • variant_date_to_timestamp - 日付/時刻の variant 値を Unix タイムスタンプに変換する
    • variant_div - 2 つの variant の除算結果を返す
    • variant_eqv - 2 つの variant のビット値が等しいかどうかを調べる
    • variant_fix - variant の整数部を返す
    • variant_get_type - variant オブジェクトの型を返す
    • variant_idiv - variants を整数に変換し、除算の結果を返す
    • variant_imp - 2 つの variant のビット implication を行う
    • variant_int - variant の整数部を返す
    • variant_mod - 2 つの variant の除算を行い、剰余を返す
    • variant_mul - 2 つの variant の乗算を行い、その結果を返す
    • variant_neg - variant の論理否定演算を行う
    • variant_not - variant のビット否定演算を行う
    • variant_or - 2 つの variant の論理和を計算する
    • variant_pow - 2 つの variant の累乗計算を行い、その結果を返す
    • variant_round - 指定した桁で variant を丸める
    • variant_set - variant オブジェクトに新しい値を代入する
    • variant_set_type - variant を「その場で」別の型に変換する
    • variant_sub - 左の variant から右の variant を引き、その結果を返す
    • variant_xor - 2 つの variant の排他的論理和を計算する
    • VarnishAdmin::auth - varnish インスタンス上で認証する
    • VarnishAdmin::ban - VCL の式を使って URL を禁止する
    • VarnishAdmin::banUrl - VCL の式を使って URL を禁止する
    • VarnishAdmin::clearPanic - varnish インスタンスのパニックメッセージをクリアする
    • VarnishAdmin::connect - varnish インスタンスの管理インターフェイスに接続する
    • VarnishAdmin::disconnect - varnish インスタンスの管理インターフェイスとの接続を切断する
    • VarnishAdmin::getPanic - varnish インスタンスの直近のパニックメッセージを取得する
    • VarnishAdmin::getParams - 現在の varnish インスタンスの設定パラメータを取得する
    • VarnishAdmin::isRunning - varnish のスレーブプロセスが現在実行中かどうかを調べる
    • VarnishAdmin::setCompat - クラスのオプション compat を設定する
    • VarnishAdmin::setHost - クラスのオプション host を設定する
    • VarnishAdmin::setIdent - クラスのオプション ident を設定する
    • VarnishAdmin::setParam - 現在の varnish インスタンスの構成パラメータを設定する
    • VarnishAdmin::setPort - クラスのオプション port を設定する
    • VarnishAdmin::setSecret - クラスのオプション secret を設定する
    • VarnishAdmin::setTimeout - クラスのオプション timeout を設定する
    • VarnishAdmin::start - varnish ワーカープロセスを開始する
    • VarnishAdmin::stop - varnish ワーカープロセスを停止する
    • VarnishAdmin::__construct - VarnishAdmin のコンストラクタ
    • VarnishLog::getLine - ログの次の行を取得する
    • VarnishLog::getTagName - ログのタグ文字列を、インデックスから取得する
    • VarnishLog::__construct - Varnishlog のコンストラクタ
    • VarnishStat::getSnapshot - 現在の varnish インスタンスの統計スナップショットを取得する
    • VarnishStat::__construct - VarnishStat のコンストラクタ
    • var_dump - 変数に関する情報をダンプする
    • var_export - 変数の文字列表現を出力または返す
    • var_representation - Returns a short, readable, parsable string representation of a variable
    • version_compare - ふたつの "PHP 標準" バージョン番号文字列を比較する
    • vfprintf - フォーマットされた文字列をストリームに書き込む
    • virtual - Apache サブリクエストを実行する
    • vprintf - フォーマットされた文字列を出力する
    • vsprintf - フォーマットされた文字列を返す
    • Vtiful\Kernel\Excel::addSheet - Vtiful\Kernel\Excel addSheet
    • Vtiful\Kernel\Excel::autoFilter - Vtiful\Kernel\Excel autoFilter
    • Vtiful\Kernel\Excel::constMemory - Vtiful\Kernel\Excel constMemory
    • Vtiful\Kernel\Excel::data - Vtiful\Kernel\Excel data
    • Vtiful\Kernel\Excel::fileName - Vtiful\Kernel\Excel fileName
    • Vtiful\Kernel\Excel::getHandle - Vtiful\Kernel\Excel getHandle
    • Vtiful\Kernel\Excel::header - Vtiful\Kernel\Excel header
    • Vtiful\Kernel\Excel::insertFormula - Vtiful\Kernel\Excel insertFormula
    • Vtiful\Kernel\Excel::insertImage - Vtiful\Kernel\Excel insertImage
    • Vtiful\Kernel\Excel::insertText - Vtiful\Kernel\Excel insertText
    • Vtiful\Kernel\Excel::mergeCells - Vtiful\Kernel\Excel mergeCells
    • Vtiful\Kernel\Excel::output - Vtiful\Kernel\Excel output
    • Vtiful\Kernel\Excel::setColumn - Vtiful\Kernel\Excel setColumn
    • Vtiful\Kernel\Excel::setRow - Vtiful\Kernel\Excel setRow
    • Vtiful\Kernel\Excel::__construct - Vtiful\Kernel\Excel constructor
    • Vtiful\Kernel\Format::align - Vtiful\Kernel\Format align
    • Vtiful\Kernel\Format::bold - Vtiful\Kernel\Format bold
    • Vtiful\Kernel\Format::italic - Vtiful\Kernel\Format italic
    • Vtiful\Kernel\Format::underline - Vtiful\Kernel\Format underline
  • w
    • Warning::__construct - Warning のコンストラクタ
    • wddx_add_vars - 指定した ID の WDDX パケットに変数を追加する
    • wddx_deserialize - WDDX パケットをアンシリアライズする
    • wddx_packet_end - 指定した ID の WDDX パケットを終了する
    • wddx_packet_start - 新規の WDDX パケットを内部の構造体を用いて開始する
    • wddx_serialize_value - 単一の値を WDDX パケットにシリアライズする
    • wddx_serialize_vars - 変数を WDDX パケットにシリアライズする
    • WeakMap::count - マップ内に存在する有効なエントリの数を数える
    • WeakMap::getIterator - イテレータを取得する
    • WeakMap::offsetExists - あるオブジェクトがマップ内に存在するかを調べる
    • WeakMap::offsetGet - オブジェクトが指す値を返す
    • WeakMap::offsetSet - 新しいキーと値でマップを更新する
    • WeakMap::offsetUnset - マップからエントリを削除する
    • WeakReference::create - 弱い参照を生成する
    • WeakReference::get - 弱く参照されたオブジェクトを取得する
    • WeakReference::__construct - コンストラクタを使ってインスタンス化はできません
    • win32_continue_service - 中断したサービスを再開する
    • win32_create_service - SCM データベースに新しいサービスのエントリを作成する
    • win32_delete_service - SCM データベースからサービスのエントリを削除する
    • win32_get_last_control_message - サービスに送信された直近の制御メッセージを返す
    • win32_pause_service - サービスを中断する
    • win32_query_service_status - サービスの状態を問い合わせる
    • win32_send_custom_control - Send a custom control to the service
    • win32_set_service_exit_code - Define or return the exit code for the current running service
    • win32_set_service_exit_mode - Define or return the exit mode for the current running service
    • win32_set_service_status - サービスの状態を更新する
    • win32_start_service - サービスを開始する
    • win32_start_service_ctrl_dispatcher - スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
    • win32_stop_service - サービスを停止する
    • wincache_fcache_fileinfo - ファイルキャッシュにキャッシュされたファイルについての情報を取得する
    • wincache_fcache_meminfo - ファイルキャッシュのメモリ使用状況についての情報を取得する
    • wincache_lock - 指定したキーで排他ロックを確保する
    • wincache_ocache_fileinfo - opcode キャッシュにキャッシュされたファイルについての情報を取得する
    • wincache_ocache_meminfo - opcode キャッシュのメモリ使用状況についての情報を取得する
    • wincache_refresh_if_changed - キャッシュされたファイルのキャッシュエントリをリフレッシュする
    • wincache_rplist_fileinfo - ファイルパス解決キャッシュについての情報を取得する
    • wincache_rplist_meminfo - ファイルパス解決キャッシュのメモリ使用状況についての情報を取得する
    • wincache_scache_info - セッションキャッシュにキャッシュされたファイルについての情報を取得する
    • wincache_scache_meminfo - セッションキャッシュのメモリ使用状況についての情報を取得する
    • wincache_ucache_add - 変数が既にキャッシュに存在しない場合にのみ変数をユーザーキャッシュに追加する
    • wincache_ucache_cas - 変数を古い値と比較して新しい値を代入する
    • wincache_ucache_clear - ユーザーキャッシュの中身全体を削除する
    • wincache_ucache_dec - キーに関連づけられた値を減少させる
    • wincache_ucache_delete - 変数をユーザーキャッシュから削除する
    • wincache_ucache_exists - 変数がユーザーキャッシュに存在するかどうかを調べる
    • wincache_ucache_get - ユーザーキャッシュに格納された変数を取得する
    • wincache_ucache_inc - キーに関連づけられた値を増加させる
    • wincache_ucache_info - ユーザーキャッシュにキャッシュされたファイルについての情報を取得する
    • wincache_ucache_meminfo - ユーザーキャッシュのメモリ使用状況についての情報を取得する
    • wincache_ucache_set - 変数をユーザーキャッシュに追加し、変数が既にキャッシュに存在する場合はそれを上書きする
    • wincache_unlock - 指定したキーの排他ロックを解放する
    • wkhtmltox\Image\Converter::convert - Perform Image conversion
    • wkhtmltox\Image\Converter::getVersion - Determine version of Converter
    • wkhtmltox\Image\Converter::__construct - Create a new Image converter
    • wkhtmltox\PDF\Converter::add - Add an object for conversion
    • wkhtmltox\PDF\Converter::convert - Perform PDF conversion
    • wkhtmltox\PDF\Converter::getVersion - Determine version of Converter
    • wkhtmltox\PDF\Converter::__construct - Create a new PDF converter
    • wkhtmltox\PDF\Object::__construct - Create a new PDF Object
    • wordwrap - 指定した文字数で文字列を分割する
    • Worker::collect - Collect references to completed tasks
    • Worker::getStacked - Gets the remaining stack size
    • Worker::isShutdown - State Detection
    • Worker::shutdown - Shutdown the worker
    • Worker::stack - Stacking work
    • Worker::unstack - Unstacking work
  • x
    • xattr_get - 拡張属性を取得する
    • xattr_list - 拡張属性の一覧を取得する
    • xattr_remove - 拡張属性を削除する
    • xattr_set - 拡張属性を設定する
    • xattr_supported - ファイルシステムが拡張属性をサポートしているかどうかを調べる
    • xdiff_file_bdiff - 2 つのファイルのバイナリ diff を作成する
    • xdiff_file_bdiff_size - バイナリ diff を適用して作成するファイルのサイズを読み込む
    • xdiff_file_bpatch - ファイルにバイナリ diff 形式のパッチを適用する
    • xdiff_file_diff - 2 つのファイルの unified diff を作成する
    • xdiff_file_diff_binary - xdiff_file_bdiff のエイリアス
    • xdiff_file_merge3 - 3 つのファイルをひとつに統合する
    • xdiff_file_patch - ファイルに unified diff 形式のパッチを適用する
    • xdiff_file_patch_binary - xdiff_file_bpatch のエイリアス
    • xdiff_file_rabdiff - 2 つのファイルのバイナリ diff を、Rabin の polynomial fingerprinting アルゴリズムで作成する
    • xdiff_string_bdiff - 2 つの文字列のバイナリ diff を作成する
    • xdiff_string_bdiff_size - バイナリ diff を適用して作成するファイルのサイズを読み込む
    • xdiff_string_bpatch - 文字列にバイナリ diff 形式のパッチを適用する
    • xdiff_string_diff - 2 つの文字列の unified diff を作成する
    • xdiff_string_diff_binary - xdiff_string_bdiff のエイリアス
    • xdiff_string_merge3 - 3 つの文字列をひとつに統合する
    • xdiff_string_patch - 文字列に unified diff 形式のパッチを適用する
    • xdiff_string_patch_binary - xdiff_string_bpatch のエイリアス
    • xdiff_string_rabdiff - 2 つの文字列のバイナリ diff を、Rabin の polynomial fingerprinting アルゴリズムで作成する
    • xhprof_disable - xhprof プロファイラを終了する
    • xhprof_enable - xhprof プロファイラを開始する
    • xhprof_sample_disable - xhprof サンプルプロファイラを終了する
    • xhprof_sample_enable - サンプリングモードでの XHProf プロファイリングを開始する
    • XMLDiff\Base::diff - Produce diff of two XML documents
    • XMLDiff\Base::merge - Produce new XML document based on diff
    • XMLDiff\Base::__construct - Constructor
    • XMLDiff\DOM::diff - Diff two DOMDocument objects
    • XMLDiff\DOM::merge - Produce merged DOMDocument
    • XMLDiff\File::diff - Diff two XML files
    • XMLDiff\File::merge - Produce merged XML document
    • XMLDiff\Memory::diff - Diff two XML documents
    • XMLDiff\Memory::merge - Produce merged XML document
    • XMLReader::close - XMLReader の入力を閉じる
    • XMLReader::expand - 現在のノードのコピーを DOM オブジェクトとして返す
    • XMLReader::getAttribute - 名前をもとに、属性の値を取得する
    • XMLReader::getAttributeNo - インデックスをもとに、属性の値を取得する
    • XMLReader::getAttributeNs - 名前および URI をもとに、属性の値を取得する
    • XMLReader::getParserProperty - 指定したプロパティが設定されているかどうかを示す
    • XMLReader::isValid - パースしているドキュメントの妥当性を示す
    • XMLReader::lookupNamespace - プレフィックスから、名前空間を検索する
    • XMLReader::moveToAttribute - 指定した名前の属性にカーソルを移動する
    • XMLReader::moveToAttributeNo - 指定したインデックスの属性にカーソルを移動する
    • XMLReader::moveToAttributeNs - 指定した名前の属性にカーソルを移動する
    • XMLReader::moveToElement - 現在の属性の親要素にカーソルを移動する
    • XMLReader::moveToFirstAttribute - 最初の属性にカーソルを移動する
    • XMLReader::moveToNextAttribute - 次の属性にカーソルを移動する
    • XMLReader::next - すべてのサブツリーを飛ばして、次のノードにカーソルを移動する
    • XMLReader::open - パースする XML を含む URI を設定する
    • XMLReader::read - ドキュメント内の次のノードに移動する
    • XMLReader::readInnerXml - 現在のノードから XML を取得する
    • XMLReader::readOuterXml - 現在のノードから自分自身も含めた XML を取得する
    • XMLReader::readString - 現在のノードの内容を文字列で読み込む
    • XMLReader::setParserProperty - パーサのオプションを設定する
    • XMLReader::setRelaxNGSchema - RelaxNG スキーマのファイル名あるいは URI を設定する
    • XMLReader::setRelaxNGSchemaSource - RelaxNG スキーマを含むデータを設定する
    • XMLReader::setSchema - ドキュメントを XSD で検証する
    • XMLReader::XML - パースする XML を含むデータを設定する
    • xmlrpc_decode - XML をネイティブな PHP 型にデコードする
    • xmlrpc_decode_request - XML をネイティブなPHP 型にデコードする
    • xmlrpc_encode - PHP の値に関する XML を生成する
    • xmlrpc_encode_request - メソッドリクエスト用の XML を生成する
    • xmlrpc_get_type - PHP の値に関する xmlrpc 型を取得する
    • xmlrpc_is_fault - 配列の値が XMLRPC の失敗であるかどうかを調べる
    • xmlrpc_parse_method_descriptions - XML を、メソッド説明のリストにデコードする
    • xmlrpc_server_add_introspection_data - introspection ドキュメントを追加する
    • xmlrpc_server_call_method - XML リクエストをパースし、メソッドをコールする
    • xmlrpc_server_create - xmlrpc サーバーを作成する
    • xmlrpc_server_destroy - サーバーリソースを破棄する
    • xmlrpc_server_register_introspection_callback - ドキュメントを生成する PHP 関数を登録する
    • xmlrpc_server_register_method - メソッド名が一致するメソッドリソースに PHP 関数を登録する
    • xmlrpc_set_type - PHP 文字列型用に xmlrpc 型、base64 または datetime を設定する
    • XMLWriter::endAttribute - 属性を終了する
    • XMLWriter::endCdata - 現在の CDATA を終了する
    • XMLWriter::endComment - コメントの終了部を作成する
    • XMLWriter::endDocument - 現在のドキュメントを終了する
    • XMLWriter::endDtd - 現在の DTD を終了する
    • XMLWriter::endDtdAttlist - 現在の DTD 属性リストを終了する
    • XMLWriter::endDtdElement - 現在の DTD 要素を終了する
    • XMLWriter::endDtdEntity - 現在の DTD エンティティを終了する
    • XMLWriter::endElement - 現在の要素を終了する
    • XMLWriter::endPi - 現在の PI (処理命令) を終了する
    • XMLWriter::flush - 現在のバッファをフラッシュする
    • XMLWriter::fullEndElement - 現在の要素を終了する
    • XMLWriter::openMemory - 文字列の出力にメモリを使用する新しい xmlwriter を作成する
    • XMLWriter::openUri - ソース URI を指定して新しい xmlwriter を作成する
    • XMLWriter::outputMemory - 現在のバッファを返す
    • XMLWriter::setIndent - 字下げの on/off を切り替える
    • XMLWriter::setIndentString - 字下げに使用する文字列を設定する
    • XMLWriter::startAttribute - 属性を開始する
    • XMLWriter::startAttributeNs - 名前空間つきの属性を開始する
    • XMLWriter::startCdata - CDATA の開始タグを作成する
    • XMLWriter::startComment - コメントを開始する
    • XMLWriter::startDocument - ドキュメントタグを作成する
    • XMLWriter::startDtd - DTD の開始タグを作成する
    • XMLWriter::startDtdAttlist - DTD 属性リストを開始する
    • XMLWriter::startDtdElement - DTD 要素を開始する
    • XMLWriter::startDtdEntity - DTD エンティティを開始する
    • XMLWriter::startElement - 要素の開始タグを作成する
    • XMLWriter::startElementNs - 名前空間つき要素の開始タグを作成する
    • XMLWriter::startPi - PI (処理命令) の開始タグを作成する
    • XMLWriter::text - テキストを書き込む
    • XMLWriter::writeAttribute - 属性全体を書き込む
    • XMLWriter::writeAttributeNs - 名前空間つき属性全体を書き込む
    • XMLWriter::writeCdata - CDATA タグ全体を書き込む
    • XMLWriter::writeComment - コメントタグ全体を書き込む
    • XMLWriter::writeDtd - DTD タグ全体を書き込む
    • XMLWriter::writeDtdAttlist - DTD 属性リストタグ全体を書き込む
    • XMLWriter::writeDtdElement - DTD 要素タグ全体を書き込む
    • XMLWriter::writeDtdEntity - DTD エンティティタグ全体を書き込む
    • XMLWriter::writeElement - 要素タグ全体を書き込む
    • XMLWriter::writeElementNs - 名前空間つき要素タグ全体を書き込む
    • XMLWriter::writePi - PI (処理命令) 書き込む
    • XMLWriter::writeRaw - 生の XML テキストを書き込む
    • xml_error_string - XML パーサのエラー文字列を得る
    • xml_get_current_byte_index - XML パーサのカレントのバイトインデックスを得る
    • xml_get_current_column_number - XML パーサのカレントのカラム番号を取得する
    • xml_get_current_line_number - XML パーサのカレントの行番号を得る
    • xml_get_error_code - XML パーサのエラーコードを得る
    • xml_parse - XML ドキュメントの処理を開始する
    • xml_parser_create - XML パーサを作成する
    • xml_parser_create_ns - 名前空間をサポートした XML パーサを生成する
    • xml_parser_free - XML パーサを解放する
    • xml_parser_get_option - XML パーサからオプションを得る
    • xml_parser_set_option - XML パーサのオプションを設定する
    • xml_parse_into_struct - 配列構造体に XML データを処理する
    • xml_set_character_data_handler - 文字データハンドラを設定する
    • xml_set_default_handler - デフォルトのハンドラを設定する
    • xml_set_element_handler - 開始要素および終了要素のハンドラを設定する
    • xml_set_end_namespace_decl_handler - 名前空間終了ハンドラを設定する
    • xml_set_external_entity_ref_handler - 外部エンティティリファレンスハンドラを設定する
    • xml_set_notation_decl_handler - 表記法宣言ハンドラを設定する
    • xml_set_object - オブジェクト内部で XML パーサを使用する
    • xml_set_processing_instruction_handler - 処理命令 (PI) 用ハンドラを設定する
    • xml_set_start_namespace_decl_handler - 名前空間開始ハンドラを設定する
    • xml_set_unparsed_entity_decl_handler - 処理されないエンティティ宣言用ハンドラを設定する
    • XSLTProcessor::getParameter - パラメータの値を取得する
    • XSLTProcessor::getSecurityPrefs - セキュリティ設定を取得する
    • XSLTProcessor::hasExsltSupport - PHP が EXSLT をサポートしているかどうかを判定する
    • XSLTProcessor::importStylesheet - スタイルシートを取り込む
    • XSLTProcessor::registerPHPFunctions - PHP 関数を XSLT 関数として利用できるようにする
    • XSLTProcessor::removeParameter - パラメータを削除する
    • XSLTProcessor::setParameter - パラメータの値を設定する
    • XSLTProcessor::setProfiling - プロファイル情報の出力ファイルを設定する
    • XSLTProcessor::setSecurityPrefs - セキュリティ設定を指定する
    • XSLTProcessor::transformToDoc - ドキュメント に変換する
    • XSLTProcessor::transformToUri - URI に変換する
    • XSLTProcessor::transformToXml - XML に変換する
    • XSLTProcessor::__construct - 新しい XSLTProcessor オブジェクトを作成する
  • y
    • Yac::add - Store into cache
    • Yac::delete - Remove items from cache
    • Yac::dump - Dump cache
    • Yac::flush - Flush the cache
    • Yac::get - Retrieve values from cache
    • Yac::info - Status of cache
    • Yac::set - Store into cache
    • Yac::__construct - Constructor
    • Yac::__get - Getter
    • Yac::__set - Setter
    • Yaconf::get - Retrieve a item
    • Yaconf::has - Determine if a item exists
    • Yaf_Action_Abstract::execute - アクションのエントリポイント
    • Yaf_Action_Abstract::getController - コントローラオブジェクトを取得する
    • Yaf_Action_Abstract::getControllerName - Get controller name
    • Yaf_Application::app - アプリケーションのインスタンスを取得する
    • Yaf_Application::bootstrap - ブートストラップをコールする
    • Yaf_Application::clearLastError - 直近のエラー情報を消す
    • Yaf_Application::environ - 環境を取得する
    • Yaf_Application::execute - コールバックを実行する
    • Yaf_Application::getAppDirectory - アプリケーションディレクトリを取得する
    • Yaf_Application::getConfig - 設定情報を取得する
    • Yaf_Application::getDispatcher - Yaf_Dispatcher のインスタンスを取得する
    • Yaf_Application::getLastErrorMsg - 直近で発生したエラーのメッセージを取得する
    • Yaf_Application::getLastErrorNo - 直近で発生したエラーのコードを取得する
    • Yaf_Application::getModules - 定義済みのモジュール名を取得する
    • Yaf_Application::run - Yaf_Application を開始する
    • Yaf_Application::setAppDirectory - アプリケーションディレクトリを変更する
    • Yaf_Application::__construct - Yaf_Application のコンストラクタ
    • Yaf_Application::__destruct - デストラクタ
    • Yaf_Config_Abstract::get - ゲッター
    • Yaf_Config_Abstract::readonly - 設定項目が読み込み専用かどうかを調べる
    • Yaf_Config_Abstract::set - セッター
    • Yaf_Config_Abstract::toArray - 配列に変換する
    • Yaf_Config_Ini::count - Yaf_Config.ini の全ての要素を数える
    • Yaf_Config_Ini::current - 現在の値を取得する
    • Yaf_Config_Ini::key - 現在の要素のキーを取得する
    • Yaf_Config_Ini::next - 内部ポインタを進める
    • Yaf_Config_Ini::offsetExists - The offsetExists purpose
    • Yaf_Config_Ini::offsetGet - The offsetGet purpose
    • Yaf_Config_Ini::offsetSet - The offsetSet purpose
    • Yaf_Config_Ini::offsetUnset - The offsetUnset purpose
    • Yaf_Config_Ini::readonly - The readonly purpose
    • Yaf_Config_Ini::rewind - The rewind purpose
    • Yaf_Config_Ini::toArray - PHP の配列として構成を返す
    • Yaf_Config_Ini::valid - The valid purpose
    • Yaf_Config_Ini::__construct - Yaf_Config_Ini のコンストラクタ
    • Yaf_Config_Ini::__get - 要素を取得する
    • Yaf_Config_Ini::__isset - キーが存在するかを判定する
    • Yaf_Config_Ini::__set - The __set purpose
    • Yaf_Config_Simple::count - The count purpose
    • Yaf_Config_Simple::current - The current purpose
    • Yaf_Config_Simple::key - The key purpose
    • Yaf_Config_Simple::next - The next purpose
    • Yaf_Config_Simple::offsetExists - The offsetExists purpose
    • Yaf_Config_Simple::offsetGet - The offsetGet purpose
    • Yaf_Config_Simple::offsetSet - The offsetSet purpose
    • Yaf_Config_Simple::offsetUnset - The offsetUnset purpose
    • Yaf_Config_Simple::readonly - The readonly purpose
    • Yaf_Config_Simple::rewind - The rewind purpose
    • Yaf_Config_Simple::toArray - PHP の配列を返す
    • Yaf_Config_Simple::valid - The valid purpose
    • Yaf_Config_Simple::__construct - コンストラクタ
    • Yaf_Config_Simple::__get - The __get purpose
    • Yaf_Config_Simple::__isset - The __isset purpose
    • Yaf_Config_Simple::__set - The __set purpose
    • Yaf_Controller_Abstract::display - The display purpose
    • Yaf_Controller_Abstract::forward - 別のアクションに転送する
    • Yaf_Controller_Abstract::getInvokeArg - The getInvokeArg purpose
    • Yaf_Controller_Abstract::getInvokeArgs - The getInvokeArgs purpose
    • Yaf_Controller_Abstract::getModuleName - モジュール名を取得する
    • Yaf_Controller_Abstract::getName - Get self name
    • Yaf_Controller_Abstract::getRequest - 現在のリクエストオブジェクトを取得する
    • Yaf_Controller_Abstract::getResponse - 現在のレスポンスオブジェクトを取得する
    • Yaf_Controller_Abstract::getView - ビューエンジンを取得する
    • Yaf_Controller_Abstract::getViewpath - getViewpath の目的を書く
    • Yaf_Controller_Abstract::init - コントローラを初期化する
    • Yaf_Controller_Abstract::initView - The initView purpose
    • Yaf_Controller_Abstract::redirect - URL にリダイレクトする
    • Yaf_Controller_Abstract::render - ビューテンプレートをレンダリングする
    • Yaf_Controller_Abstract::setViewpath - The setViewpath purpose
    • Yaf_Controller_Abstract::__construct - Yaf_Controller_Abstract のコンストラクタ
    • Yaf_Dispatcher::autoRender - 自動レンダリングのオン/オフを切り替える
    • Yaf_Dispatcher::catchException - 例外のキャッチのオン/オフを切り替える
    • Yaf_Dispatcher::disableView - ビューのレンダリングを無効にする
    • Yaf_Dispatcher::dispatch - リクエストをディスパッチする
    • Yaf_Dispatcher::enableView - ビューのレンダリングを有効にする
    • Yaf_Dispatcher::flushInstantly - その場でのフラッシュのオン/オフを切り替える
    • Yaf_Dispatcher::getApplication - アプリケーションを取得する
    • Yaf_Dispatcher::getDefaultAction - Retrive the default action name
    • Yaf_Dispatcher::getDefaultController - Retrive the default controller name
    • Yaf_Dispatcher::getDefaultModule - Retrive the default module name
    • Yaf_Dispatcher::getInstance - ディスパッチャのインスタンスを取得する
    • Yaf_Dispatcher::getRequest - リクエストのインスタンスを取得する
    • Yaf_Dispatcher::getRouter - ルーターのインスタンスを取得する
    • Yaf_Dispatcher::initView - ビューを初期化して返す
    • Yaf_Dispatcher::registerPlugin - プラグインを登録する
    • Yaf_Dispatcher::returnResponse - The returnResponse purpose
    • Yaf_Dispatcher::setDefaultAction - デフォルトのアクション名を変更する
    • Yaf_Dispatcher::setDefaultController - デフォルトのコントローラ名を変更する
    • Yaf_Dispatcher::setDefaultModule - デフォルトのモジュール名を変更する
    • Yaf_Dispatcher::setErrorHandler - エラーハンドラを設定する
    • Yaf_Dispatcher::setRequest - The setRequest purpose
    • Yaf_Dispatcher::setView - カスタムビューエンジンを設定する
    • Yaf_Dispatcher::throwException - 例外のスローのオン/オフを切り替える
    • Yaf_Dispatcher::__construct - Yaf_Dispatcher のコンストラクタ
    • Yaf_Exception::getPrevious - The getPrevious purpose
    • Yaf_Exception::__construct - コンストラクタ
    • Yaf_Loader::autoload - The autoload purpose
    • Yaf_Loader::clearLocalNamespace - The clearLocalNamespace purpose
    • Yaf_Loader::getInstance - The getInstance purpose
    • Yaf_Loader::getLibraryPath - ライブラリパスを取得する
    • Yaf_Loader::getLocalNamespace - Retrive all register namespaces info
    • Yaf_Loader::getNamespacePath - Retieve path of a registered namespace
    • Yaf_Loader::import - The import purpose
    • Yaf_Loader::isLocalName - The isLocalName purpose
    • Yaf_Loader::registerLocalNamespace - ローカルクラスプレフィックスを登録する
    • Yaf_Loader::registerNamespace - Register namespace with searching path
    • Yaf_Loader::setLibraryPath - ライブラリパスを変更する
    • Yaf_Loader::__construct - The __construct purpose
    • Yaf_Plugin_Abstract::dispatchLoopShutdown - The dispatchLoopShutdown purpose
    • Yaf_Plugin_Abstract::dispatchLoopStartup - ディスパッチループの前にフックする
    • Yaf_Plugin_Abstract::postDispatch - The postDispatch purpose
    • Yaf_Plugin_Abstract::preDispatch - The preDispatch purpose
    • Yaf_Plugin_Abstract::preResponse - The preResponse purpose
    • Yaf_Plugin_Abstract::routerShutdown - The routerShutdown purpose
    • Yaf_Plugin_Abstract::routerStartup - RouterStartup フック
    • Yaf_Registry::del - アイテムをレジストリから削除する
    • Yaf_Registry::get - アイテムをレジストリから取得する
    • Yaf_Registry::has - アイテムが存在するかどうかを調べる
    • Yaf_Registry::set - アイテムをレジストリに追加する
    • Yaf_Registry::__construct - Yaf_Registry はシングルトンを実装する
    • Yaf_Request_Abstract::clearParams - Remove all params
    • Yaf_Request_Abstract::getActionName - The getActionName purpose
    • Yaf_Request_Abstract::getBaseUri - The getBaseUri purpose
    • Yaf_Request_Abstract::getControllerName - The getControllerName purpose
    • Yaf_Request_Abstract::getEnv - ENV 変数を取得する
    • Yaf_Request_Abstract::getException - The getException purpose
    • Yaf_Request_Abstract::getLanguage - クライアントの好きな言語を取得する
    • Yaf_Request_Abstract::getMethod - リクエストメソッドを取得する
    • Yaf_Request_Abstract::getModuleName - The getModuleName purpose
    • Yaf_Request_Abstract::getParam - 呼び出しパラメータを取得する
    • Yaf_Request_Abstract::getParams - 全ての呼び出しパラメータを取得する
    • Yaf_Request_Abstract::getRequestUri - The getRequestUri purpose
    • Yaf_Request_Abstract::getServer - SERVER 変数を取得する
    • Yaf_Request_Abstract::isCli - CLIリクエストかを判定する
    • Yaf_Request_Abstract::isDispatched - リクエストがディスパッチ済みかを判定する
    • Yaf_Request_Abstract::isGet - GETリクエストかどうかを判定する
    • Yaf_Request_Abstract::isHead - HEADリクエストかどうかを判定する
    • Yaf_Request_Abstract::isOptions - OPTIONS リクエストかどうかを判定する
    • Yaf_Request_Abstract::isPost - POST リクエストかどうかを判定する
    • Yaf_Request_Abstract::isPut - PUTリクエストかどうかを判定する
    • Yaf_Request_Abstract::isRouted - リクエストがルーティング済みかを判定する
    • Yaf_Request_Abstract::isXmlHttpRequest - AJAXリクエストかどうかを判定する
    • Yaf_Request_Abstract::setActionName - アクション名を設定する
    • Yaf_Request_Abstract::setBaseUri - ベース URI を設定する
    • Yaf_Request_Abstract::setControllerName - コントローラー名を設定する
    • Yaf_Request_Abstract::setDispatched - The setDispatched purpose
    • Yaf_Request_Abstract::setModuleName - モジュール名を設定する
    • Yaf_Request_Abstract::setParam - 呼び出しパラメータをリクエストに設定する
    • Yaf_Request_Abstract::setRequestUri - The setRequestUri purpose
    • Yaf_Request_Abstract::setRouted - The setRouted purpose
    • Yaf_Request_Http::get - クライアントからの変数を取得する
    • Yaf_Request_Http::getCookie - Cookie 変数を取得する
    • Yaf_Request_Http::getFiles - The getFiles purpose
    • Yaf_Request_Http::getPost - POST 変数を取得する
    • Yaf_Request_Http::getQuery - クエリパラメータを取得する
    • Yaf_Request_Http::getRaw - 生のリクエストボディを取得する
    • Yaf_Request_Http::getRequest - The getRequest purpose
    • Yaf_Request_Http::isXmlHttpRequest - リクエストが Ajax リクエストかどうかを判断する
    • Yaf_Request_Http::__construct - Yaf_Request_Http のコンストラクタ
    • Yaf_Request_Simple::get - The get purpose
    • Yaf_Request_Simple::getCookie - The getCookie purpose
    • Yaf_Request_Simple::getFiles - The getFiles purpose
    • Yaf_Request_Simple::getPost - The getPost purpose
    • Yaf_Request_Simple::getQuery - The getQuery purpose
    • Yaf_Request_Simple::getRequest - The getRequest purpose
    • Yaf_Request_Simple::isXmlHttpRequest - リクエストが AJAX 経由のリクエストかどうかを判定する
    • Yaf_Request_Simple::__construct - Yaf_Request_Simple のコンストラクタ
    • Yaf_Response_Abstract::appendBody - レスポンス本文に追記する
    • Yaf_Response_Abstract::clearBody - 既存のすべてのレスポンス本文を破棄します
    • Yaf_Response_Abstract::clearHeaders - すべてのヘッダをクリアする
    • Yaf_Response_Abstract::getBody - コンテンツを取得する
    • Yaf_Response_Abstract::getHeader - getHeader の目的
    • Yaf_Response_Abstract::prependBody - The prependBody purpose
    • Yaf_Response_Abstract::response - レスポンスを送信する
    • Yaf_Response_Abstract::setAllHeaders - The setAllHeaders purpose
    • Yaf_Response_Abstract::setBody - コンテンツをレスポンスに設定する
    • Yaf_Response_Abstract::setHeader - レスポンスヘッダを設定する
    • Yaf_Response_Abstract::setRedirect - The setRedirect purpose
    • Yaf_Response_Abstract::__construct - The __construct purpose
    • Yaf_Response_Abstract::__destruct - The __destruct purpose
    • Yaf_Response_Abstract::__toString - すべてのレスポンスボディを文字列として取得する
    • Yaf_Router::addConfig - 設定で定義したルートをルーターに追加する
    • Yaf_Router::addRoute - 新しいルートをルーターに追加する
    • Yaf_Router::getCurrentRoute - 使われているルート名を取得する
    • Yaf_Router::getRoute - 名前を指定してルートを取得する
    • Yaf_Router::getRoutes - 登録済みのルートを取得する
    • Yaf_Router::route - The route purpose
    • Yaf_Router::__construct - Yaf_Router のコンストラクタ
    • Yaf_Route_Interface::assemble - リクエストを組み立てる
    • Yaf_Route_Interface::route - リクエストをルーティングする
    • Yaf_Route_Map::assemble - URLを組み立てる
    • Yaf_Route_Map::route - route の目的
    • Yaf_Route_Map::__construct - The __construct purpose
    • Yaf_Route_Regex::assemble - URL を組み立てる
    • Yaf_Route_Regex::route - The route purpose
    • Yaf_Route_Regex::__construct - Yaf_Route_Regex のコンストラクタ
    • Yaf_Route_Rewrite::assemble - URLを組み立てる
    • Yaf_Route_Rewrite::route - The route purpose
    • Yaf_Route_Rewrite::__construct - Yaf_Route_Rewrite のコンストラクタ
    • Yaf_Route_Simple::assemble - URLを組み立てる
    • Yaf_Route_Simple::route - リクエストをルーティングする
    • Yaf_Route_Simple::__construct - Yaf_Route_Simple のコンストラクタ
    • Yaf_Route_Static::assemble - URL を組み立てる
    • Yaf_Route_Static::match - The match purpose
    • Yaf_Route_Static::route - リクエストをルーティングする
    • Yaf_Route_Supervar::assemble - URL を組み立てる
    • Yaf_Route_Supervar::route - The route purpose
    • Yaf_Route_Supervar::__construct - The __construct purpose
    • Yaf_Session::count - The count purpose
    • Yaf_Session::current - The current purpose
    • Yaf_Session::del - The del purpose
    • Yaf_Session::getInstance - The getInstance purpose
    • Yaf_Session::has - The has purpose
    • Yaf_Session::key - The key purpose
    • Yaf_Session::next - The next purpose
    • Yaf_Session::offsetExists - The offsetExists purpose
    • Yaf_Session::offsetGet - The offsetGet purpose
    • Yaf_Session::offsetSet - The offsetSet purpose
    • Yaf_Session::offsetUnset - The offsetUnset purpose
    • Yaf_Session::rewind - The rewind purpose
    • Yaf_Session::start - The start purpose
    • Yaf_Session::valid - The valid purpose
    • Yaf_Session::__construct - Yaf_Session のコンストラクタ
    • Yaf_Session::__get - The __get purpose
    • Yaf_Session::__isset - The __isset purpose
    • Yaf_Session::__set - The __set purpose
    • Yaf_Session::__unset - The __unset purpose
    • Yaf_View_Interface::assign - 値をビューエンジンに代入する
    • Yaf_View_Interface::display - テンプレートをレンダリングして出力する
    • Yaf_View_Interface::getScriptPath - The getScriptPath purpose
    • Yaf_View_Interface::render - テンプレートをレンダリングする
    • Yaf_View_Interface::setScriptPath - The setScriptPath purpose
    • Yaf_View_Simple::assign - 値を代入する
    • Yaf_View_Simple::assignRef - The assignRef purpose
    • Yaf_View_Simple::clear - 代入した値をクリアする
    • Yaf_View_Simple::display - レンダリングして表示する
    • Yaf_View_Simple::eval - テンプレートをレンダリングする
    • Yaf_View_Simple::getScriptPath - テンプレートのディレクトリを取得する
    • Yaf_View_Simple::render - テンプレートをレンダリングする
    • Yaf_View_Simple::setScriptPath - テンプレートのディレクトリを設定する
    • Yaf_View_Simple::__construct - Yaf_View_Simple のコンストラクタ
    • Yaf_View_Simple::__get - Retrieve assigned variable
    • Yaf_View_Simple::__isset - The __isset purpose
    • Yaf_View_Simple::__set - 値をエンジンに設定する
    • yaml_emit - YAML 形式にした値を返す
    • yaml_emit_file - YAML 形式にした値をファイルに送る
    • yaml_parse - YAML ストリームをパースする
    • yaml_parse_file - ファイルからの YAML ストリームをパースする
    • yaml_parse_url - URL からの YAML ストリームをパースする
    • Yar_Client::setOpt - Set calling contexts
    • Yar_Client::__call - Call service
    • Yar_Client::__construct - Create a client
    • Yar_Client_Exception::getType - Retrieve exception's type
    • Yar_Concurrent_Client::call - Register a concurrent call
    • Yar_Concurrent_Client::loop - Send all calls
    • Yar_Concurrent_Client::reset - Clean all registered calls
    • Yar_Server::handle - Start RPC Server
    • Yar_Server::__construct - Register a server
    • Yar_Server_Exception::getType - Retrieve exception's type
    • yaz_addinfo - 詳細なエラー情報を返す
    • yaz_ccl_conf - CCL パーサを設定する
    • yaz_ccl_parse - CCL パーサを起動する
    • yaz_close - YAZ 接続をクローズする
    • yaz_connect - Z39.50 サーバーへの接続を準備する
    • yaz_database - セッション内のデータベースを指定する
    • yaz_element - 取得時の要素集合の名前を指定する
    • yaz_errno - エラー番号を返す
    • yaz_error - エラーの内容を返す
    • yaz_es - 拡張サービスのリクエストを準備する
    • yaz_es_result - 拡張サービスの結果を調査する
    • yaz_get_option - 接続に関するオプションの値を返す
    • yaz_hits - 直近の検索に関するヒット数を返す
    • yaz_itemorder - ILL リクエストパッケージを関して Z39.50 Item Order を準備する
    • yaz_present - (Z39.50による)取得の準備を行う
    • yaz_range - 取得するレコードの範囲を指定する
    • yaz_record - レコードを返す
    • yaz_scan - スキャンの準備をする
    • yaz_scan_result - スキャンリクエストの結果を返す
    • yaz_schema - 取得するスキーマを指定する
    • yaz_search - 検索を準備する
    • yaz_set_option - 接続に関するひとつあるいは複数のオプションを設定する
    • yaz_sort - ソート条件を設定する
    • yaz_syntax - 取得用に適当なレコード構文を指定する
    • yaz_wait - Z39.50 リクエストが完了するまで待つ
  • z
    • zend_thread_id - 現在のスレッドの一意な ID を返す
    • zend_version - 現在の Zend Engine のバージョンを取得する
    • ZipArchive::addEmptyDir - 新しいディレクトリを追加する
    • ZipArchive::addFile - 指定したパスからファイルを ZIP アーカイブに追加する
    • ZipArchive::addFromString - 内容を指定して、ファイルを ZIP アーカイブに追加する
    • ZipArchive::addGlob - ディレクトリから、glob パターンを使ってファイルを追加する
    • ZipArchive::addPattern - ディレクトリから、PCRE パターンを使ってファイルを追加する
    • ZipArchive::clearError - ステータスエラーメッセージか、システムエラー/ zip メッセージをクリアする
    • ZipArchive::close - アクティブな (オープンされた、あるいは新しく作成された) アーカイブを閉じる
    • ZipArchive::count - アーカイブにあるファイルの数を数える
    • ZipArchive::deleteIndex - インデックスを使用して、アーカイブ内のエントリを削除する
    • ZipArchive::deleteName - 名前を使用して、アーカイブからエントリを削除する
    • ZipArchive::extractTo - アーカイブの内容を展開する
    • ZipArchive::getArchiveComment - ZIP アーカイブのコメントを返す
    • ZipArchive::getArchiveFlag - Zip アーカイブのグローバルフラグの値を返す
    • ZipArchive::getCommentIndex - エントリのインデックスを使用して、エントリのコメントを返す
    • ZipArchive::getCommentName - エントリ名を使用して、エントリのコメントを返す
    • ZipArchive::getExternalAttributesIndex - インデックスで定義されたエントリの外部属性を取得する
    • ZipArchive::getExternalAttributesName - 名前で定義されたエントリの外部属性を取得する
    • ZipArchive::getFromIndex - インデックスを使用して、エントリの内容を返す
    • ZipArchive::getFromName - 名前を使用して、エントリの内容を返す
    • ZipArchive::getNameIndex - インデックスを使用して、エントリの名前を返す
    • ZipArchive::getStatusString - システムエラー、または ZIP メッセージに関するエラー情報を返す
    • ZipArchive::getStream - 名前を使用して、エントリのファイルハンドラ (読み込み専用) を取得する
    • ZipArchive::getStreamIndex - インデックスで指定されたエントリへの、ファイルハンドラを取得する(読み取り専用)
    • ZipArchive::getStreamName - 名前で指定されたエントリへの、ファイルハンドラを取得する(読み取り専用)
    • ZipArchive::isCompressionMethodSupported - 圧縮方式を libzip がサポートしているかをチェックする
    • ZipArchive::isEncryptionMethodSupported - 暗号化方式を libzip がサポートしているかどうかをチェックする
    • ZipArchive::locateName - アーカイブ内のエントリのインデックスを返す
    • ZipArchive::open - ZIP ファイルアーカイブをオープンする
    • ZipArchive::registerCancelCallback - アーカイブを閉じている間にキャンセルできるようにコールバックを登録する
    • ZipArchive::registerProgressCallback - アーカイブを閉じている間に更新できるようにコールバックを登録する
    • ZipArchive::renameIndex - インデックスを使用してエントリ名を変更する
    • ZipArchive::renameName - 名前を使用してエントリ名を変更する
    • ZipArchive::replaceFile - 指定されたパスのファイルにアーカイブの一部を置き換える
    • ZipArchive::setArchiveComment - ZIP アーカイブのコメントを設定する
    • ZipArchive::setArchiveFlag - Zip アーカイブのグローバルフラグを設定する
    • ZipArchive::setCommentIndex - インデックスを使用してエントリのコメントを設定する
    • ZipArchive::setCommentName - 名前を使用してエントリのコメントを設定する
    • ZipArchive::setCompressionIndex - インデックスで定義されたエントリの圧縮方法を設定する
    • ZipArchive::setCompressionName - 名前で定義されたエントリの圧縮メソッドを設定する
    • ZipArchive::setEncryptionIndex - index で定義されたエントリの暗号化方法を指定する
    • ZipArchive::setEncryptionName - 名前で定義されたエントリの暗号化方式を設定する
    • ZipArchive::setExternalAttributesIndex - インデックスで定義されたエントリの外部属性を設定する
    • ZipArchive::setExternalAttributesName - 名前で定義されたエントリの外部属性を設定する
    • ZipArchive::setMtimeIndex - インデックスを使用してエントリの変更時間を設定する
    • ZipArchive::setMtimeName - 名前を使ってエントリの変更時間を設定する
    • ZipArchive::setPassword - アクティブなアーカイブにパスワードを設定する
    • ZipArchive::statIndex - インデックスを使用してエントリの詳細を取得する
    • ZipArchive::statName - 名前を使用してエントリの詳細を取得する
    • ZipArchive::unchangeAll - アーカイブに対するすべての変更を取り消す
    • ZipArchive::unchangeArchive - アーカイブ全体に対して行われたすべての変更を取り消す
    • ZipArchive::unchangeIndex - 指定したインデックスのエントリに対するすべての変更を取り消す
    • ZipArchive::unchangeName - 指定した名前のエントリに対するすべての変更を取り消す
    • zip_close - ZIP ファイルアーカイブを閉じる
    • zip_entry_close - ディレクトリエントリを閉じる
    • zip_entry_compressedsize - ディレクトリエントリの圧縮時のサイズを取得する
    • zip_entry_compressionmethod - ディレクトリエントリの圧縮方法を取得する
    • zip_entry_filesize - ディレクトリエントリの実際のファイルサイズを取得する
    • zip_entry_name - ディレクトリエントリの名前を取得する
    • zip_entry_open - 読込み用にディレクトリエントリをオープンする
    • zip_entry_read - オープンされたディレクトリエントリから読み込む
    • zip_open - Zip ファイルアーカイブをオープンする
    • zip_read - Zip ファイルアーカイブの中の次のエントリを読み込む
    • zlib_decode - raw/gzip/zlib で符号化されたデータを復元する
    • zlib_encode - 指定した符号化方式でデータを圧縮する
    • zlib_get_coding_type - 出力圧縮に使用されたコーディングの種類を返す
    • ZMQ::__construct - ZMQ constructor
    • ZMQContext::getOpt - Get context option
    • ZMQContext::getSocket - Create a new socket
    • ZMQContext::isPersistent - Whether the context is persistent
    • ZMQContext::setOpt - Set a socket option
    • ZMQContext::__construct - Construct a new ZMQContext object
    • ZMQDevice::getIdleTimeout - Get the idle timeout
    • ZMQDevice::getTimerTimeout - Get the timer timeout
    • ZMQDevice::run - Run the new device
    • ZMQDevice::setIdleCallback - Set the idle callback function
    • ZMQDevice::setIdleTimeout - Set the idle timeout
    • ZMQDevice::setTimerCallback - Set the timer callback function
    • ZMQDevice::setTimerTimeout - Set the timer timeout
    • ZMQDevice::__construct - Construct a new device
    • ZMQPoll::add - Add item to the poll set
    • ZMQPoll::clear - Clear the poll set
    • ZMQPoll::count - Count items in the poll set
    • ZMQPoll::getLastErrors - Get poll errors
    • ZMQPoll::poll - Poll the items
    • ZMQPoll::remove - Remove item from poll set
    • ZMQSocket::bind - Bind the socket
    • ZMQSocket::connect - Connect the socket
    • ZMQSocket::disconnect - Disconnect a socket
    • ZMQSocket::getEndpoints - Get list of endpoints
    • ZMQSocket::getPersistentId - Get the persistent id
    • ZMQSocket::getSocketType - Get the socket type
    • ZMQSocket::getSockOpt - Get socket option
    • ZMQSocket::isPersistent - Whether the socket is persistent
    • ZMQSocket::recv - Receives a message
    • ZMQSocket::recvMulti - Receives a multipart message
    • ZMQSocket::send - Sends a message
    • ZMQSocket::sendmulti - マルチパートメッセージを送る
    • ZMQSocket::setSockOpt - Set a socket option
    • ZMQSocket::unbind - Unbind the socket
    • ZMQSocket::__construct - Construct a new ZMQSocket
    • Zookeeper::addAuth - Specify application credentials
    • Zookeeper::close - Close the zookeeper handle and free up any resources
    • Zookeeper::connect - Create a handle to used communicate with zookeeper
    • Zookeeper::create - Create a node synchronously
    • Zookeeper::delete - Delete a node in zookeeper synchronously
    • Zookeeper::exists - Checks the existence of a node in zookeeper synchronously
    • Zookeeper::get - Gets the data associated with a node synchronously
    • Zookeeper::getAcl - Gets the acl associated with a node synchronously
    • Zookeeper::getChildren - Lists the children of a node synchronously
    • Zookeeper::getClientId - Return the client session id, only valid if the connections is currently connected (ie. last watcher state is ZOO_CONNECTED_STATE)
    • Zookeeper::getConfig - Get instance of ZookeeperConfig
    • Zookeeper::getRecvTimeout - Return the timeout for this session, only valid if the connections is currently connected (ie. last watcher state is ZOO_CONNECTED_STATE). This value may change after a server re-connect
    • Zookeeper::getState - Get the state of the zookeeper connection
    • Zookeeper::isRecoverable - Checks if the current zookeeper connection state can be recovered
    • Zookeeper::set - Sets the data associated with a node
    • Zookeeper::setAcl - Sets the acl associated with a node synchronously
    • Zookeeper::setDebugLevel - Sets the debugging level for the library
    • Zookeeper::setDeterministicConnOrder - Enable/disable quorum endpoint order randomization
    • Zookeeper::setLogStream - Sets the stream to be used by the library for logging
    • Zookeeper::setWatcher - Set a watcher function
    • Zookeeper::__construct - Create a handle to used communicate with zookeeper
    • ZookeeperConfig::add - Add servers to the ensemble
    • ZookeeperConfig::get - Gets the last committed configuration of the ZooKeeper cluster as it is known to the server to which the client is connected, synchronously
    • ZookeeperConfig::remove - Remove servers from the ensemble
    • ZookeeperConfig::set - Change ZK cluster ensemble membership and roles of ensemble peers
    • zookeeper_dispatch - Calls callbacks for pending operations
  • _
    • _ - のエイリアス gettext
    • __autoload - 未定義のクラスのロードを試みる
    • __halt_compiler - コンパイラの実行を中止する

User Contributed Notes

There are no user contributed notes for this page.


サンプル

マニュアル内の全サンプルの一覧

  • Example#0 - 初歩的な例
  • Example#1 - 初めての PHP スクリプト: hello.php
  • Example#2 - PHP からシステムに関する情報を取得する
  • Example#3 - 変数を出力する (配列要素)
  • Example#4 - 制御構造 および 関数の使用例
  • Example#5 - HTML および PHP モードの両方を混在させる
  • Example#6 - 簡単な HTML フォーム
  • Example#7 - フォームからのデータを出力する
  • Example#8 - lighttpd.conf の抜粋
  • Example#9 - FastCGI レスポンダの起動
  • Example#10 - リモートの php-fastcgi インスタンスへの接続
  • Example#11 - OpenBSD パッケージインストールの例
  • Example#12 - Debian で Apache 2 と組み合わせるインストール例
  • Example#13 - PHP インストール後に Apache を停止・起動させる
  • Example#14 - 追加の PHP パッケージを探す方法
  • Example#15 - PHP と MySQL、cURL のインストール
  • Example#16 - OpCache の推奨構成
  • Example#17 - WinCache の推奨構成
  • Example#18 - IIS と PHP の設定をするためのコマンドライン
  • Example#19 - Registry changes
  • Example#20 - PHP を Apache 2.x ハンドラとして使う設定
  • Example#21 - PHP を Apache 2.x 上で CGI として動かす例
  • Example#22 - PHP を FastCGI として動かす Apache の設定
  • Example#23 - 環境変数や PHP の設定をプールに渡す
  • Example#24 - PHP の設定を nginx.conf で行う例
  • Example#25 - phpinfo のコール
  • Example#26 - php.ini での環境変数
  • Example#27 - php.ini の例
  • Example#28 - Apache 設定の例
  • Example#29 - PHP の開始タグと終了タグ
  • Example#30 - 条件文を使った高度な脱出
  • Example#31 - 改行を囲んだ終了タグを表示させる例
  • Example#32 - 整数リテラル
  • Example#33 - 32 ビットシステムにおける整数のオーバーフロー
  • Example#34 - 64 ビットシステムにおける整数のオーバーフロー
  • Example#35 - PHP 7.3.0 以降での、基本的なヒアドキュメントの使い方
  • Example#36 - 終端ID は 文字列本体よりも奥にインデントしてはいけない
  • Example#37 - 文字列本体 や 終端ID のインデントに違う文字を使う
  • Example#38 - 終端ID の後に式を継続する
  • Example#39 - 文字列本体に 終端ID が含まれると、ParseError が起きがち
  • Example#40 - PHP 7.3.0 より前のバージョンでの間違った例
  • Example#41 - PHP 7.3.0 より前のバージョンでも有効な例
  • Example#42 - ヒアドキュメントで文字列を括る例
  • Example#43 - ヒアドキュメントを引数に使用する例
  • Example#44 - ヒアドキュメントを用いた静的な値の初期化
  • Example#45 - ヒアドキュメントでのダブルクォート
  • Example#46 - Nowdoc による文字列のクォートの例
  • Example#47 - 変数がある場合の、Nowdoc による文字列のクォートの例
  • Example#48 - 静的なデータの例
  • Example#49 - 簡単な構文の例
  • Example#50 - 負の数値インデックス
  • Example#51 - 文字列の例
  • Example#52 - 不正な文字列のオフセットの例
  • Example#53 - シンプルな配列定義
  • Example#54 - 型のキャストと値の上書きの例
  • Example#55 - 整数と文字列のキーの混在例
  • Example#56 - 数値添字配列でキーを省略する例
  • Example#57 - 一部の要素にだけキーを指定する例
  • Example#58 - 複雑な型のキャストと上書きの例
  • Example#59 - 配列の要素へのアクセス
  • Example#60 - 配列のデリファレンス
  • Example#61 - 簡単な配列のアンパック
  • Example#62 - キーが重複した場合の配列のアンパック
  • Example#63 - array() の使用例
  • Example#64 - コレクション
  • Example#65 - ループ内での要素の変更
  • Example#66 - 1 から始まる添字
  • Example#67 - 配列に代入する
  • Example#68 - 配列のソート
  • Example#69 - 再帰および多次元配列
  • Example#70 - コールバック関数の例
  • Example#71 - クロージャを使ったコールバックの例
  • Example#72 - iterable を戻り値の型として使った、ジェネレータの例
  • Example#73 - リファレンス渡しのパラメータに対する型宣言
  • Example#74 - 引数にnullを許容する古いやり方
  • Example#75 - クラスによる型宣言の基本
  • Example#76 - インターフェイスによる型宣言の基本
  • Example#77 - 基本的な戻り値の型宣言
  • Example#78 - オブジェクトを返す
  • Example#79 - Null を許容する型宣言
  • Example#80 - Null を許容する戻り値の型宣言
  • Example#81 - クラスのプロパティで型宣言
  • Example#82 - 引数の値に対する厳密な型付け
  • Example#83 - 引数の値に対する型の自動変換
  • Example#84 - 戻り値に対する厳密な型付け
  • Example#85 - union の型のひとつに変換される例
  • Example#86 - 初期化されていない変数のデフォルト値
  • Example#87 - global の使用
  • Example#88 - globalのかわりに$GLOBALSを使用する
  • Example#89 - スーパーグローバルとスコープの例
  • Example#90 - static 変数が必要な場面の例
  • Example#91 - static 変数の使用例
  • Example#92 - 再帰関数でのstatic変数の使用
  • Example#93 - static 変数の宣言
  • Example#94 - 継承されたメソッドのstatic 変数を使う
  • Example#95 - 可変プロパティの例
  • Example#96 - 簡単なHTMLフォーム
  • Example#97 - 簡単なPOST HTMLフォームからのデータにアクセスする
  • Example#98 - より複雑なフォーム変数
  • Example#99 - setcookieの例
  • Example#100 - 有効/無効な定数名の例
  • Example#101 - 定数の定義
  • Example#102 - const キーワードによる定数の定義
  • Example#103 - 結合時の評価
  • Example#104 - 評価順序は未定義
  • Example#105 - +、-、. の優先順位は同じ(PHP 8.0.0 より前のバージョン)
  • Example#106 - Perl 風に、文字列をインクリメントする例
  • Example#107 - 英数字が浮動小数点数にキャストされる挙動
  • Example#108 - 参照による代入
  • Example#109 - 整数値におけるビット AND、OR および XOR 演算
  • Example#110 - 文字列でのビット XOR 演算
  • Example#111 - 整数値のビットシフト
  • Example#112 - Boolean/null の比較
  • Example#113 - 一般的な配列の比較
  • Example#114 - デフォルト値を設定する
  • Example#115 - 三項演算子のわかりにくい挙動
  • Example#116 - 三項演算子の短縮形
  • Example#117 - デフォルト値の代入
  • Example#118 - Null 合体演算子のネスト
  • Example#119 - 論理演算子についての説明
  • Example#120 - 配列の比較
  • Example#121 - クラスでの instanceof の使用法
  • Example#122 - 継承したクラスでの instanceof の使用法
  • Example#123 - instanceof を使用して、オブジェクトがクラスのインスタンスで ない かどうかを調べる方法
  • Example#124 - インターフェイスでの instanceof の使用法
  • Example#125 - 変数を用いた instanceof の使用法
  • Example#126 - instanceof での他の変数の調べかた
  • Example#127 - instanceof を使って定数を確認する
  • Example#128 - instanceof を任意の式と一緒に使う
  • Example#129 - switch 文の構造
  • Example#130 - 基本式な match 式の使い方
  • Example#131 - 比較演算子と match 式を一緒に使う例
  • Example#132 - match 式の構造
  • Example#133 - 処理されない match 式の例
  • Example#134 - 整数の範囲に応じてmatch式を分岐させる一般的な使い方
  • Example#135 - 文字列の内容に応じてmatch式を分岐させる一般的な使い方
  • Example#136 - Tick の使用例
  • Example#137 - スクリプトのエンコーディングの宣言
  • Example#138 - 基本的な include の例
  • Example#139 - 関数内での読み込み
  • Example#140 - HTTP経由の include
  • Example#141 - インクルードの戻り値を比較する
  • Example#142 - include と return 文
  • Example#143 - 出力バッファリングを用い、 PHP ファイルの内容を文字列として読み込む
  • Example#144 - goto の例
  • Example#145 - ループでの goto の例
  • Example#146 - これは動作しません
  • Example#147 - 関数の使用法を説明するための擬似コード
  • Example#148 - 条件つきの関数
  • Example#149 - 関数の中の関数
  • Example#150 - 再帰的な関数
  • Example#151 - 関数に配列を渡す
  • Example#152 - 関数の引数リストの最後にカンマを付ける
  • Example#153 - 関数のパラメータのリファレンス渡し
  • Example#154 - 関数におけるデフォルト引数の使用法
  • Example#155 - スカラー型以外をデフォルト値として使用する
  • Example#156 - オブジェクトをデフォルト値として使用する(PHP 8.1.0 以降)
  • Example#157 - 関数の引数のデフォルト値の 間違った使用法
  • Example#158 - 関数の引数のデフォルト値の 正しい使用法
  • Example#159 - 関数の引数のデフォルト値の 正しい使用法
  • Example#160 - デフォルト値を指定した引数は、必須の引数の後に宣言する
  • Example#161 - ... を使った、可変長引数へのアクセス
  • Example#162 - 引数での ... の使用例
  • Example#163 - 型宣言つきの可変長引数
  • Example#164 - 名前付き引数の文法
  • Example#165 - 位置を指定した引数と、名前付き引数
  • Example#166 - 上と同じ例を、引数の順番を変えて渡す
  • Example#167 - 位置を指定した引数と、名前付き引数を組み合わせる
  • Example#168 - 同じ引数を複数回渡すと、Error がスローされる
  • Example#169 - 引数を展開した後に、名前付き引数を使う
  • Example#170 - return の使用法
  • Example#171 - 複数の値を得るために配列を返す例
  • Example#172 - 関数からリファレンスを返す
  • Example#173 - 可変関数の例
  • Example#174 - 可変メソッドの例
  • Example#175 - staticプロパティを含む可変メソッドの例
  • Example#176 - 複雑な callable
  • Example#177 - 無名関数の例
  • Example#178 - 変数への無名関数の代入
  • Example#179 - 親のスコープからの変数の引き継ぎ
  • Example#180 - クロージャのスコープ
  • Example#181 - $this の自動バインド
  • Example#182 - static な無名関数内での $this の使用例
  • Example#183 - static な無名関数へのオブジェクトのバインド
  • Example#184 - アロー関数は参照ではなく値を自動でキャプチャする
  • Example#185 - アロー関数は、ネストされた場合でも変数を値でキャプチャする
  • Example#186 - アロー関数の例
  • Example#187 - 外部のスコープの値はアロー関数では変更できない
  • Example#188 - 簡単な例
  • Example#189 - 古い callable の生成方法と、CallableExpr(...) の比較
  • Example#190 - 簡単なクラス定義
  • Example#191 - $this 疑似変数の例
  • Example#192 - インスタンスを作成する
  • Example#193 - オブジェクトの代入
  • Example#194 - 任意の式を使ってインスタンスを生成する
  • Example#195 - 新しいオブジェクトの作成
  • Example#196 - 新しく作成したオブジェクトのメンバーへのアクセス
  • Example#197 - プロパティへのアクセスとメソッドの呼び出し
  • Example#198 - プロパティに格納した無名関数の呼び出し
  • Example#199 - 簡単なクラスの継承
  • Example#200 - 互換性がある子クラスのメソッド
  • Example#201 - 子クラスのメソッドで引数を削除すると致命的なエラーになる
  • Example#202 - 子クラスのメソッドで、オプションの引数を必須にすると致命的なエラーになる
  • Example#203 - 子クラスで引数の名前を変更し、かつ名前付き引数を使うとエラーになる
  • Example#204 - クラス名の解決
  • Example#205 - クラス名が存在しない場合の名前解決
  • Example#206 - オブジェクトの名前解決
  • Example#207 - nullsafe 演算子
  • Example#208 - プロパティの宣言
  • Example#209 - 型付きプロパティの例
  • Example#210 - プロパティにアクセスする
  • Example#211 - 読み取り専用プロパティの例
  • Example#212 - 読み取り専用プロパティの不正な初期化
  • Example#213 - 定数の定義と使用
  • Example#214 - 名前空間の ::class の例
  • Example#215 - クラス内での定数式の例
  • Example#216 - PHP 7.1.0 以降の、クラス定数のアクセス範囲
  • Example#217 - オートロードの例
  • Example#218 - オートロードの別の例
  • Example#219 - 継承とコンストラクタ
  • Example#220 - コンストラクタを引数と一緒に使う
  • Example#221 - コンストラクタのプロモーションを使う
  • Example#222 - 初期化時に new キーワードを使う
  • Example#223 - static な生成メソッドを使う
  • Example#224 - デストラクタの例
  • Example#225 - プロパティの宣言
  • Example#226 - メソッドの宣言
  • Example#227 - PHP 7.1.0 以降での定数の宣言
  • Example#228 - 同じ型のオブジェクトの private メンバーへのアクセス
  • Example#229 - 継承の例
  • Example#230 - 戻り値の型を宣言せずにメソッドをオーバーライドする場合
  • Example#231 - 間違った型を宣言してメソッドをオーバーライドする場合
  • Example#232 - 間違った型を宣言してメソッドをオーバーライドする場合でも、警告を抑制する
  • Example#233 - クラス定義の外からの ::
  • Example#234 - クラス定義の中からの ::
  • Example#235 - 親クラスのメソッドをコールする
  • Example#236 - static メソッドの例
  • Example#237 - static プロパティの例
  • Example#238 - 抽象クラスの例
  • Example#239 - 抽象クラスの例
  • Example#240 - Interface の例
  • Example#241 - インターフェイスの継承
  • Example#242 - 共変性を保った形で、複数のインターフェイスを実装する
  • Example#243 - 複数のインターフェイスの継承
  • Example#244 - インターフェイスでの定数
  • Example#245 - 抽象クラスとインターフェイス
  • Example#246 - 継承と実装を同時に行う
  • Example#247 - トレイトの例
  • Example#248 - 優先順位の例
  • Example#249 - もうひとつの優先順位の例
  • Example#250 - 複数のトレイトの使用例
  • Example#251 - 衝突の解決
  • Example#252 - メソッドのアクセス権を変更する
  • Example#253 - トレイトを組み合わせたトレイト
  • Example#254 - 抽象メソッドによる、要件の明示
  • Example#255 - static変数
  • Example#256 - staticメソッド
  • Example#257 - staticプロパティ
  • Example#258 - プロパティの定義
  • Example#259 - 衝突の解決
  • Example#260 - 定数を定義する
  • Example#261 - 衝突の解決
  • Example#262 - __get()、
     __set()、__isset() および
     __unset() メソッドを使ったプロパティのオーバーロードの例
  • Example#263 - __call() および __callStatic() メソッドによる、メソッドのオーバーロードの例
  • Example#264 - 単純なオブジェクトの反復の例
  • Example#265 - sleep と wakeup
  • Example#266 - Serialize と unserialize
  • Example#267 - 簡単な例
  • Example#268 - __invoke() の使用
  • Example#269 - __invoke() の使用
  • Example#270 - __set_state() の使用法
  • Example#271 - __debugInfo() の使用法
  • Example#272 - finalメソッドの例
  • Example#273 - finalクラスの例
  • Example#274 - final定数の例(PHP 8.1.0 以降)
  • Example#275 - オブジェクトのクローン作成
  • Example#276 - クローンしたオブジェクトのメンバーへのアクセス
  • Example#277 - オブジェクト比較の例
  • Example#278 - self:: の使用例
  • Example#279 - static:: のシンプルな使用法
  • Example#280 - 非静的コンテキストにおける static:: の使用法
  • Example#281 - 転送するコールと転送しないコール
  • Example#282 - 参照とオブジェクト
  • Example#283 - 名前空間構文の例
  • Example#284 - 名前空間の宣言
  • Example#285 - 名前空間の宣言
  • Example#286 - 階層つきの名前空間の宣言
  • Example#287 - シンプルな組み合わせ方式による複数の名前空間の宣言
  • Example#288 - 波括弧構文による複数の名前空間の宣言
  • Example#289 - 複数の名前空間および名前空間に属さないコードの宣言
  • Example#290 - 複数の名前空間および名前空間に属さないコードの宣言
  • Example#291 - グローバルなクラス、関数および定数への名前空間内からのアクセス
  • Example#292 - 要素への動的なアクセス
  • Example#293 - 名前空間つき要素への動的なアクセス
  • Example#294 - 名前空間内のコードでの __NAMESPACE__ の例
  • Example#295 - グローバルなコードでの __NAMESPACE__ の例
  • Example#296 - __NAMESPACE__ による動的な名前の作成
  • Example#297 - 名前空間内での namespace 演算子
  • Example#298 - グローバルコードでの namespace 演算子
  • Example#299 - use 演算子によるインポート/エイリアス
  • Example#300 - use 演算子によるインポート/エイリアスで、複数の use 文を組み合わせる例
  • Example#301 - インポートと動的名
  • Example#302 - インポートと完全修飾名
  • Example#303 - 間違ったインポートの例
  • Example#304 - グローバル空間を指定する方法
  • Example#305 - 名前空間内からのグローバルクラスへのアクセス
  • Example#306 - 名前空間内からのグローバル関数/定数への移行
  • Example#307 - 名前解決の例
  • Example#308 - 名前空間の外部にあるグローバルクラスへのアクセス
  • Example#309 - 名前空間の外部にあるグローバルクラスへのアクセス
  • Example#310 - 名前空間内からの内部クラスへのアクセス
  • Example#311 - 名前空間内のクラス、関数あるいは定数へのアクセス
  • Example#312 - 完全修飾名
  • Example#313 - 修飾名
  • Example#314 - 非修飾クラス名
  • Example#315 - 非修飾関数/定数名
  • Example#316 - ダブルクォートで囲んだ文字列内で名前空間名を扱う際の危険
  • Example#317 - 未定義の定数
  • Example#318 - 未定義の定数
  • Example#319 - 基本的な、値を限定する例
  • Example#320 - 唯一の値を指定する、高度な例
  • Example#321 - エラーを例外に変換する
  • Example#322 - 例外をスローする
  • Example#323 - 例外処理での finally ブロック
  • Example#324 - finally ブロックと return の相互作用
  • Example#325 - ネストした例外
  • Example#326 - 複数の例外ハンドリングをひとつの catch で行う
  • Example#327 - キャッチする時に変数を省略する
  • Example#328 - throw を 式として扱う
  • Example#329 - 組み込みの例外クラス
  • Example#330 - 例外クラスを拡張する
  • Example#331 - ファイバーの基本的な使い方
  • Example#332 - ジェネレータを使った range の実装
  • Example#333 - 値を yield する単純な例
  • Example#334 - キー/値 のペアの yield
  • Example#335 - null の yield
  • Example#336 - 参照による値の yield
  • Example#337 - yield from と iterator_to_array
  • Example#338 - yield from の基本的な使いかた
  • Example#339 - yield from の返す値
  • Example#340 - アトリビュートを使い、インターフェイスのオプションのメソッドを実装する
  • Example#341 - アトリビュートの文法
  • Example#342 - リフレクションAPIを使い、アトリビュートを読み取る
  • Example#343 - リフレクションAPIを使い、特定のアトリビュートを読み取る
  • Example#344 - 単純なアトリビュートクラスの例
  • Example#345 - アトリビュートを使える場所を限定するために、ターゲットとなるクラスを作る
  • Example#346 - 宣言時にアトリビュートを複数回使えるように、IS_REPEATABLE を使う
  • Example#347 - 未定義の変数のリファレンスの使用
  • Example#348 - 関数内でのグローバル変数の参照
  • Example#349 - リファレンスと foreach ステートメント
  • Example#350 - $GLOBALS の例
  • Example#351 - $GLOBALS 配列全体を書き換える操作はエラーになる
  • Example#352 - $_SERVER の例
  • Example#353 - $_GET の例
  • Example#354 - $_POST の例
  • Example#355 - $_ENV の例
  • Example#356 - $_COOKIE の例
  • Example#357 - $php_errormsg の例
  • Example#358 - $http_response_header の例
  • Example#359 - $argc の例
  • Example#360 - $argv の例
  • Example#361 - Exception::getMessage の例
  • Example#362 - Exception::getPrevious の例
  • Example#363 - Exception::getCode の例
  • Example#364 - Exception::getFile の例
  • Example#365 - Exception::getLine の例
  • Example#366 - Exception::getTrace の例
  • Example#367 - Exception::getTraceAsString の例
  • Example#368 - Exception::__toString の例
  • Example#369 - set_error_handler を使用した、エラーメッセージから ErrorException への変換
  • Example#370 - ErrorException::getSeverity の例
  • Example#371 - Error::getMessage の例
  • Example#372 - Error::getPrevious の例
  • Example#373 - Error::getCode の例
  • Example#374 - Error::getFile の例
  • Example#375 - Error::getLine の例
  • Example#376 - Error::getTrace の例
  • Example#377 - Error::getTraceAsString の例
  • Example#378 - Error::__toString の例
  • Example#379 - 基本的な使用法
  • Example#380 - 基本的な例
  • Example#381 - 基本的な使用法
  • Example#382 - ArrayAccess::offsetExists の例
  • Example#383 - 基本的な使用法
  • Example#384 - Closure::bind の例
  • Example#385 - Closure::bindTo の例
  • Example#386 - Closure::call の例
  • Example#387 - オブジェクトへの型変換を使い、stdClass を作る
  • Example#388 - json_decode によって、stdClass を作る
  • Example#389 - 動的にプロパティを宣言する
  • Example#390 - Generator::getReturn の例
  • Example#391 - Generator::key の例
  • Example#392 - Generator::send による値の注入
  • Example#393 - ジェネレータへの例外のスロー
  • Example#394 - 基本的な WeakReference クラスの使い方
  • Example#395 - Weakmap の使い方の例
  • Example#396 - 基本的な Stringable インターフェイスの使い方
  • Example#397 - 基本的な使用法
  • Example#398 - 基本的な使用法
  • Example#399 - 基本的な使用法
  • Example#400 - SensitiveParameterValue オブジェクトを var_dump に渡す
  • Example#401 - SensitiveParameterValue::getValue の例
  • Example#402 - unserialize によって生成されるクラス
  • Example#403 - 基本的な bindto の使用例
  • Example#404 - ページの取得と POST データの送信
  • Example#405 - リダイレクトを無視し、ヘッダとコンテンツの取得
  • Example#406 - password の基本的な使用例
  • Example#407 - リダイレクト後の URL の検出
  • Example#408 - php://temp/maxmemory
  • Example#409 - php://filter/resource=<フィルタの対象となるストリーム>
  • Example#410 - php://filter/read=<読み込みチェーンに適用するフィルタのリスト>
  • Example#411 - php://filter/write=<書き込みチェーンに適用するフィルタのリスト>
  • Example#412 - php://memory と php://temp は再利用できない
  • Example#413 - data:// の内容の表示
  • Example#414 - media type の取得
  • Example#415 - 基本的な使用法
  • Example#416 - アクティブな接続からストリームをオープンする
  • Example#417 - $session を有効にしておかないといけない!
  • Example#418 - RAR アーカイブの走査
  • Example#419 - 暗号化されたファイルのオープン (ヘッダの暗号化)
  • Example#420 - 甘い変数の確認から生じるリスク
  • Example#421 - ... ファイルシステムへの攻撃
  • Example#422 - より安全なファイル名の確認
  • Example#423 - より安全なファイル名の確認
  • Example#424 - null バイトに対して脆弱なスクリプト
  • Example#425 - 入力を適切に検証する例
  • Example#426 - ハッシュされたパスワードフィールド
  • Example#427 - 表示するデータを分割し ... そしてスーパーユーザーを作成します。(PostgreSQLの例)
  • Example#428 - 記事...そして(全てのデータベースサーバーの)いくつかのパスワード のリストを表示する
  • Example#429 - パスワードのリセットから ... (全てのデータベースサーバーで)より多 くの権限を得るまで
  • Example#430 - データベースホストのオペレーティングシステムを攻撃する (MSSQLサーバー)
  • Example#431 - PDO のプリペアドステートメントを使い、SQLインジェクションを回避する
  • Example#432 - カスタムHTMLページにより変数を攻撃する
  • Example#433 - 一般的なデバッグ変数を探す
  • Example#434 - E_ALLで危険な変数を見つける
  • Example#435 - 危険な変数の使用
  • Example#436 - PHPを他の言語として隠す
  • Example#437 - PHP拡張子用に未知の型を使用する
  • Example#438 - PHP拡張子としてHTML型を使用する
  • Example#439 - Basic HTTP 認証の例
  • Example#440 - 新規に名前 / パスワードを入力させる HTTP 認証の例
  • Example#441 - ファイルアップロード用のフォーム
  • Example#442 - ファイルのアップロードを検証する
  • Example#443 - ファイルの配列をアップロードする
  • Example#444 - 複数ファイルのアップロード
  • Example#445 - ディレクトリ全体をアップロードする
  • Example#446 - HTTP PUT されたファイルの保存
  • Example#447 - リモートページのタイトルを得る
  • Example#448 - リモートサーバーにデータを保存する
  • Example#449 - CGI SAPI との違いを示す例
  • Example#450 - INI 設定に -d を使って値を設定する例
  • Example#451 - PHP に組み込まれた (そしてロードされた) Zend モジュールの表示
  • Example#452 - ダブルクォートの使用時に構文エラーが出る例
  • Example#453 - シングルクォートを使い、シェルの変数置換を防ぐ例
  • Example#454 - とあるプロジェクトの行数をカウントするための -B, -R そして -E オプションの使用例
  • Example#455 - -v による、SAPI 名および PHP と Zend のバージョンの取得
  • Example#456 - --ini の例
  • Example#457 - 基本的な --rf の使用法
  • Example#458 - --rc の例
  • Example#459 - --re の例
  • Example#460 - --ri の例
  • Example#461 - シェルスクリプトとしての PHP スクリプトの実行
  • Example#462 - コマンドラインから実行されることを意図したスクリプト(script.php)
  • Example#463 - コマンドライン PHP スクリプトを実行するバッチファイル(script.bat)
  • Example#464 - 対話シェル上でのコードの実行
  • Example#465 - タブ補完
  • Example#466 - 対話シェル内での php.ini の設定
  • Example#467 - ウェブサーバーの起動
  • Example#468 - ドキュメントルートディレクトリを指定した起動
  • Example#469 - ルータースクリプトの使用
  • Example#470 - CLI ウェブサーバーを使っているかどうかのチェック
  • Example#471 - 未サポートのファイル形式の処理
  • Example#472 - CLI ウェブサーバーへのリモートマシンからのアクセス
  • Example#473 - 新規 zval コンテナを作成
  • Example#474 - zval 情報を表示
  • Example#475 - zval の refcount を増加
  • Example#476 - zval refcount を減少
  • Example#477 - array zval を作成
  • Example#478 - 既存の要素を配列に追加
  • Example#479 - 配列から要素を除去
  • Example#480 - それ自体の要素として配列自体を追加
  • Example#481 - $a をアンセット
  • Example#482 - メモリ使用量の例
  • Example#483 - GC パフォーマンスの影響
  • Example#484 - 上記のスクリプトを実行
  • Example#485 - GC ベンチマーキングを使用可能にするために PHP を再コンパイル
  • Example#486 - GC 統計
  • Example#487 - DTrace を使用してすべての PHP 静的プローブをトレースするためのall_probes.d
  • Example#488 - SystemTap を使用してすべての PHP 静的プローブをトレースするためのall_probes.stp
  • Example#489 - apcu_add の例
  • Example#490 - apcu_cache_info の例
  • Example#491 - apcu_cas の例
  • Example#492 - apcu_dec の例
  • Example#493 - apcu_delete の例
  • Example#494 - apcu_entry の例
  • Example#495 - apcu_exists の例
  • Example#496 - apcu_fetch の例
  • Example#497 - apcu_inc の例
  • Example#498 - A apcu_key_info の例
  • Example#499 - apcu_sma_info の例
  • Example#500 - apcu_store の例
  • Example#501 - APCUIterator::__construct の例
  • Example#502 - スクリプト内でのエラー処理
  • Example#503 - debug_backtrace の例
  • Example#504 - debug_print_backtrace の例
  • Example#505 - error_clear_last の例
  • Example#506 - error_get_last の例
  • Example#507 - error_log の例
  • Example#508 - error_reporting の例
  • Example#509 - restore_error_handler の例
  • Example#510 - restore_exception_handler の例
  • Example#511 - set_error_handler および trigger_error によるエラー処理
  • Example#512 - set_exception_handler の例
  • Example#513 - trigger_error の例
  • Example#514 - Calling a function from shared library
  • Example#515 - Calling a function, returning a structure through an argument
  • Example#516 - Accessing existing C variables
  • Example#517 - Creating and Modifying C variables
  • Example#518 - Working with C arrays
  • Example#519 - Working with C enums
  • Example#520 - Assigning a PHP Closure to a C function pointer
  • Example#521 - 出力制御の例
  • Example#522 - 出力リライトの例
  • Example#523 - ob_end_clean の例
  • Example#524 - ob_end_flush の例
  • Example#525 - 単純な ob_get_clean の例
  • Example#526 - 単純な ob_get_contents の例
  • Example#527 - ob_get_flush の例
  • Example#528 - 単純な ob_get_length の例
  • Example#529 - full_status が false の場合に返される配列
  • Example#530 - full_status が true の場合に返される配列
  • Example#531 - ob_list_handlers の例
  • Example#532 - ユーザー定義のコールバック関数の例
  • Example#533 - 削除不可能な出力バッファを作る例
  • Example#534 - output_add_rewrite_var の例
  • Example#535 - output_reset_rewrite_vars の例
  • Example#536 - assert の例
  • Example#537 - カスタムのメッセージを使う
  • Example#538 - カスタムの例外クラスを使う
  • Example#539 - assert_options の例
  • Example#540 - cli_get_process_title の例
  • Example#541 - cli_set_process_title の例
  • Example#542 - dl の例
  • Example#543 - extension_loaded の例
  • Example#544 - gc_enabled の例
  • Example#545 - gc_status の使い方
  • Example#546 - get_current_user の例
  • Example#547 - get_defined_constants の例
  • Example#548 - XML 関数の出力
  • Example#549 - get_include_path の例
  • Example#550 - get_included_files の例
  • Example#551 - get_loaded_extensions の例
  • Example#552 - フィルタリングされていない get_resources
  • Example#553 - フィルタリングされた get_resources
  • Example#554 - getenv の例
  • Example#555 - getlastmod の例
  • Example#556 - getopt の例：基本編
  • Example#557 - getopt の例：長いオプション
  • Example#558 - getopt の例：複数のオプションを一度に渡す
  • Example#559 - getopt の例: rest_index を使う
  • Example#560 - getrusage の例
  • Example#561 - ini_get の例
  • Example#562 - ini_get_all の例
  • Example#563 - details を無効にする例
  • Example#564 - ini_parse_quantity の例
  • Example#565 - ini_restore の例
  • Example#566 - ini オプションの設定
  • Example#567 - memory_get_usage の例
  • Example#568 - memory_reset_peak_usage の例
  • Example#569 - php_ini_loaded_file の例
  • Example#570 - 返される ini ファイルを一覧する例
  • Example#571 - php_sapi_name の例
  • Example#572 - php_uname の例
  • Example#573 - OS 関連の定数の例
  • Example#574 - 全般的なクレジットの出力
  • Example#575 - コア開発者およびドキュメントグループの表示
  • Example#576 - すべてのクレジットの表示
  • Example#577 - phpinfo の例
  • Example#578 - phpversion の例
  • Example#579 - PHP_VERSION_ID の例および使用法
  • Example#580 - 環境変数の設定
  • Example#581 - restore_include_path の例
  • Example#582 - set_include_path の例
  • Example#583 - include path の追加
  • Example#584 - sys_get_temp_dir の例
  • Example#585 - version_compare の例
  • Example#586 - zend_thread_id の例
  • Example#587 - zend_version の例
  • Example#588 - Custom Superglobals with runkit.superglobal=_FOO,_BAR in php.ini
  • Example#589 - A runkit7_function_add example
  • Example#590 - A runkit7_function_copy example
  • Example#591 - A runkit7_function_redefine example
  • Example#592 - runkit7_method_add example
  • Example#593 - runkit7_method_copy example
  • Example#594 - runkit7_method_redefine example
  • Example#595 - runkit7_method_remove example
  • Example#596 - runkit7_method_rename example
  • Example#597 - runkit7_zval_inspect example
  • Example#598 - Basic uopz_add_function Usage
  • Example#599 - uopz_allow_exit example
  • Example#600 - uopz_backup example
  • Example#601 - uopz_compose example
  • Example#602 - uopz_copy example
  • Example#603 - Basic uopz_del_function Usage
  • Example#604 - uopz_delete example
  • Example#605 - uopz_delete class example
  • Example#606 - uopz_extend の例
  • Example#607 - uopz_flags の例
  • Example#608 - クラスの final 宣言を外す
  • Example#609 - uopz_function example
  • Example#610 - uopz_function class example
  • Example#611 - uopz_get_exit_status example
  • Example#612 - Basic uopz_get_hook Usage
  • Example#613 - uopz_get_mock example
  • Example#614 - Basic uopz_get_property Usage
  • Example#615 - uopz_get_return example
  • Example#616 - uopz_get_static の基本的な使い方
  • Example#617 - uopz_implement の例
  • Example#618 - uopz_overload example
  • Example#619 - uopz_redefine の例
  • Example#620 - uopz_rename example
  • Example#621 - uopz_rename class example
  • Example#622 - uopz_restore example
  • Example#623 - Basic uopz_set_hook Usage
  • Example#624 - uopz_set_mock の例
  • Example#625 - uopz_set_mock の例
  • Example#626 - uopz_set_mock と static メンバ
  • Example#627 - Basic uopz_set_property Usage
  • Example#628 - uopz_set_return example
  • Example#629 - uopz_set_return example
  • Example#630 - uopz_set_return class example
  • Example#631 - Basic uopz_set_static Usage
  • Example#632 - uopz_undefine の例
  • Example#633 - Basic uopz_unset_hook Usage
  • Example#634 - uopz_unset_mock の例
  • Example#635 - uopz_unset_return example
  • Example#636 - wincache.ignorelist の例
  • Example#637 - wincache.php 用の認証設定
  • Example#638 - WinCache セッションハンドラの有効化
  • Example#639 - WinCache の関数切り替えの有効化
  • Example#640 - Reroute.ini ファイルの内容
  • Example#641 - wincache_fcache_fileinfo の例
  • Example#642 - wincache_fcache_meminfo の例
  • Example#643 - wincache_lock の使用
  • Example#644 - wincache_ocache_fileinfo の例
  • Example#645 - wincache_ocache_meminfo の例
  • Example#646 - wincache_refresh_if_changed の例
  • Example#647 - wincache_rplist_fileinfo の例
  • Example#648 - wincache_rplist_meminfo の例
  • Example#649 - wincache_scache_info の例
  • Example#650 - wincache_scache_meminfo の例
  • Example#651 - wincache_ucache_add で key を文字列にする例
  • Example#652 - wincache_ucache_add で key を配列にする例
  • Example#653 - wincache_ucache_cas の使用法
  • Example#654 - wincache_ucache_clear の使用法
  • Example#655 - wincache_ucache_dec の使用法
  • Example#656 - wincache_ucache_delete で key に文字列を使う例
  • Example#657 - wincache_ucache_delete で key に配列を使う例
  • Example#658 - wincache_ucache_delete で key に配列を使い、いくつかの要素の削除に失敗する例
  • Example#659 - wincache_ucache_exists の使用法
  • Example#660 - wincache_ucache_get で key に文字列を使う例
  • Example#661 - wincache_ucache_get で key に配列を使う例
  • Example#662 - wincache_ucache_inc の使用法
  • Example#663 - wincache_ucache_info の使用
  • Example#664 - wincache_ucache_meminfo の例
  • Example#665 - wincache_ucache_set で key を文字列にする例
  • Example#666 - wincache_ucache_set で key を配列にする例
  • Example#667 - wincache_unlock の使用
  • Example#668 - オプションの GUI を使った Xhprof の例
  • Example#669 - xhprof_disable の例
  • Example#670 - xhprof_enable の例
  • Example#671 - xhprof_sample_disable の例
  • Example#672 - Make sure the item is stored
  • Example#673 - Using CHAP passwords
  • Example#674 - radius_acct_open の例
  • Example#675 - radius_add_server の例
  • Example#676 - radius_auth_open の例
  • Example#677 - radius_create_request の例
  • Example#678 - radius_cvt_addr の例
  • Example#679 - radius_cvt_int の例
  • Example#680 - radius_cvt_string の例
  • Example#681 - radius_get_attr の例
  • Example#682 - radius_get_tagged_attr_data example
  • Example#683 - radius_get_tagged_attr_tag example
  • Example#684 - radius_get_vendor_attr の例
  • Example#685 - radius_put_attr の例
  • Example#686 - radius_put_int の例
  • Example#687 - radius_put_string の例
  • Example#688 - radius_put_vendor_attr の例
  • Example#689 - readline の例
  • Example#690 - Readline コールバックインターフェイスの例
  • Example#691 - 簡単な bzip2 の例
  • Example#692 - データの圧縮
  • Example#693 - 文字列を解凍する
  • Example#694 - bzerror の例
  • Example#695 - bzopen の例
  • Example#696 - bzread の例
  • Example#697 - bzwrite の例
  • Example#698 - 外部ファイルの使用
  • Example#699 - Phar アーカイブ内のファイルの使用
  • Example#700 - phar 形式から tar 形式への phar アーカイブの変換
  • Example#701 - phar.cache_list の使用例
  • Example#702 - Phar::addEmptyDir の例
  • Example#703 - Phar::addFile の例
  • Example#704 - Phar::addFromString の例
  • Example#705 - Phar::apiVersion の例
  • Example#706 - Phar::buildFromDirectory の例
  • Example#707 - SplFileInfo を使用した Phar::buildFromIterator の例
  • Example#708 - その他のイテレータを使用した Phar::buildFromIterator の例
  • Example#709 - Phar::canCompress の例
  • Example#710 - Phar::canWrite の例
  • Example#711 - Phar::compress の例
  • Example#712 - Phar::compressFiles の例
  • Example#713 - Phar::__construct の例
  • Example#714 - Phar::convertToData の例
  • Example#715 - Phar::convertToExecutable の例
  • Example#716 - Phar::copy の例
  • Example#717 - Phar::count の例
  • Example#718 - Phar::createDefaultStub の例
  • Example#719 - Phar::decompress の例
  • Example#720 - Phar::decompressFiles の例
  • Example#721 - Phar::delMetaData の例
  • Example#722 - Phar::delete の例
  • Example#723 - Phar::extractTo の例
  • Example#724 - Phar::getMetadata の例
  • Example#725 - Phar::getStub の例
  • Example#726 - Phar::hasMetadata の例
  • Example#727 - Phar::interceptFileFuncs の例
  • Example#728 - Phar::interceptFileFuncs の例
  • Example#729 - Phar::isBuffering の例
  • Example#730 - Phar::isCompressed の例
  • Example#731 - Phar::loadPhar の例
  • Example#732 - Phar::mapPhar の例
  • Example#733 - Phar::mount の例
  • Example#734 - Phar::mungServer の例
  • Example#735 - Phar::offsetExists の例
  • Example#736 - Phar::offsetGet の例
  • Example#737 - Phar::offsetSet の例
  • Example#738 - Phar::offsetUnset の例
  • Example#739 - Phar::running の例
  • Example#740 - Phar::setAlias の例
  • Example#741 - Phar::setDefaultStub の例
  • Example#742 - Phar::setMetadata の例
  • Example#743 - Phar::setStub の例
  • Example#744 - Phar::startBuffering の例
  • Example#745 - Phar::stopBuffering の例
  • Example#746 - Phar::unlinkArchive の例
  • Example#747 - Phar::webPhar の例
  • Example#748 - PharData::addEmptyDir の例
  • Example#749 - PharData::addFile の例
  • Example#750 - PharData::addFromString の例
  • Example#751 - PharData::buildFromDirectory の例
  • Example#752 - SplFileInfo を使用した PharData::buildFromIterator の例
  • Example#753 - その他のイテレータを使用した PharData::buildFromIterator の例
  • Example#754 - PharData::compress の例
  • Example#755 - PharData::compressFiles の例
  • Example#756 - PharData::__construct の例
  • Example#757 - PharData::convertToData の例
  • Example#758 - PharData::convertToExecutable の例
  • Example#759 - PharData::copy の例
  • Example#760 - PharData::decompress の例
  • Example#761 - PharData::decompressFiles の例
  • Example#762 - PharData::delMetaData の例
  • Example#763 - PharData::delete の例
  • Example#764 - PharData::extractTo の例
  • Example#765 - PharData::offsetSet の例
  • Example#766 - PharData::offsetUnset の例
  • Example#767 - Phar::setMetadata の例
  • Example#768 - PharFileInfo::chmod の例
  • Example#769 - PharFileInfo::compress の例
  • Example#770 - PharFileInfo::__construct の例
  • Example#771 - PharFileInfo::decompress の例
  • Example#772 - PharFileInfo::delMetaData の例
  • Example#773 - PharFileInfo::getCRC32 の例
  • Example#774 - PharFileInfo::getCompressedSize の例
  • Example#775 - PharFileInfo::getMetadata の例
  • Example#776 - PharFileInfo::getPharFlags の例
  • Example#777 - PharFileInfo::isCRCChecked の例
  • Example#778 - PharFileInfo::isCompressed の例
  • Example#779 - PharFileInfo::setMetadata の例
  • Example#780 - Rar のインストール
  • Example#781 - オンザフライでの復元
  • Example#782 - RAR 拡張モジュールでの展開の例
  • Example#783 - オブジェクト指向型
  • Example#784 - 手続き型
  • Example#785 - オブジェクト指向型
  • Example#786 - 手続き型
  • Example#787 - オブジェクト指向型
  • Example#788 - 手続き型
  • Example#789 - オブジェクト指向型
  • Example#790 - 手続き型
  • Example#791 - オブジェクト指向型
  • Example#792 - 手続き型
  • Example#793 - オブジェクト指向型
  • Example#794 - 手続き型
  • Example#795 - オブジェクト指向型
  • Example#796 - 手続き型
  • Example#797 - ボリュームコールバック
  • Example#798 - オブジェクト指向型
  • Example#799 - 手続き型
  • Example#800 - RarArchive::__toString の例
  • Example#801 - RarEntry::extract の例
  • Example#802 - アーカイブ内のすべてのファイルを展開する方法
  • Example#803 - RarEntry::getAttr の例
  • Example#804 - RarEntry::getHostOs の例 (バージョン >= 2.0.0)
  • Example#805 - RarEntry::getHostOs の例 (バージョン <= 1.0.0)
  • Example#806 - RarEntry::getMethod の例
  • Example#807 - RarEntry::getName の例
  • Example#808 - RarEntry::getPackedSize の例
  • Example#809 - RarEntry::getStream の例
  • Example#810 - RarEntry::getUnpackedSize の例
  • Example#811 - RarEntry::getVersion の例
  • Example#812 - RarException::isUsingExceptions の例
  • Example#813 - RarException::setUsingExceptions の例
  • Example#814 - Zip アーカイブの作成
  • Example#815 - アーカイブの詳細の出力および一覧表示
  • Example#816 - Zip ストリームラッパーによる OpenOffice メタ情報の読み込み
  • Example#817 - Zip の使用例
  • Example#818 - アーカイブ内での新規ディレクトリの作成
  • Example#819 - オープンおよび追加
  • Example#820 - 新しいアーカイブへのエントリの追加
  • Example#821 - アーカイブ内のディレクトリへのファイルの追加
  • Example#822 - ZipArchive::addGlob の例
  • Example#823 - ZipArchive::addPattern の例
  • Example#824 - インデックスを使用した、アーカイブからのファイルの削除
  • Example#825 - 名前を使用した、アーカイブからのファイルやディレクトリの削除
  • Example#826 - 全エントリの展開
  • Example#827 - 二つのエントリの展開
  • Example#828 - アーカイブのコメントの出力
  • Example#829 - アーカイブが torrentzip フォーマットかを調べる
  • Example#830 - エントリのコメントの出力
  • Example#831 - エントリのコメントの出力
  • Example#832 - 全てのエントリをUnixの権限付きで展開する
  • Example#833 - ファイルの内容の取得
  • Example#834 - ファイルの内容の取得
  • Example#835 - zip エントリの画像への変換
  • Example#836 - ZipArchive::getNameIndex の例
  • Example#837 - エントリの内容を fread で取得し、それを保存する
  • Example#838 - 先ほどの例と同じことを、fopen および zip ストリームラッパーで行う
  • Example#839 - ストリームラッパーと画像の組み合わせ。xml 関数とでも使用可能
  • Example#840 - fread でエントリの内容を取得し、保存する
  • Example#841 - fread でエントリの内容を取得し、保存する
  • Example#842 - アーカイブを作成し、ZipArchive::locateName を使用する
  • Example#843 - オープンおよび展開
  • Example#844 - アーカイブの作成
  • Example#845 - 一時的なアーカイブの作成
  • Example#846 - ファイルをアーカイブする
  • Example#847 - ファイルをアーカイブする
  • Example#848 - エントリ名の変更
  • Example#849 - エントリ名の変更
  • Example#850 - オープンおよび追加
  • Example#851 - アーカイブの作成およびコメントの設定
  • Example#852 - torrentzip アーカイブを作成する
  • Example#853 - アーカイブをオープンし、エントリのコメントを設定する
  • Example#854 - アーカイブをオープンし、エントリのコメントを設定する
  • Example#855 - アーカイブに異なる圧縮メソッドでファイルを追加する
  • Example#856 - アーカイブに異なる圧縮メソッドでファイルを追加する
  • Example#857 - ファイルを追加し、圧縮メソッドを設定する
  • Example#858 - アーカイブを作成し、ファイルを暗号化する
  • Example#859 - Unix権限付きでファイルをアーカイブする
  • Example#860 - ファイルをアーカイブする
  • Example#861 - ファイルをアーカイブする
  • Example#862 - エントリの情報の出力
  • Example#863 - エントリの情報の出力
  • Example#864 - 簡単な Zlib の例
  • Example#865 - インクリメンタルな圧縮および伸長の API
  • Example#866 - gzclose の例
  • Example#867 - gzcompress の例
  • Example#868 - gzdeflate の例
  • Example#869 - gzip ファイルの生成
  • Example#870 - gzeof の例
  • Example#871 - gzfile の例
  • Example#872 - gzgetc の例
  • Example#873 - gzgets の例
  • Example#874 - gzgetss の例
  • Example#875 - gzinflate の例
  • Example#876 - gzopen の例
  • Example#877 - gzpassthru の例
  • Example#878 - gzread の例
  • Example#879 - gzseek の例
  • Example#880 - gzuncompress の例
  • Example#881 - gzwrite の例
  • Example#882 - ob_gzhandler の例
  • Example#883 - zlib_encode の例
  • Example#884 - hash の例
  • Example#885 - hash_algos の例
  • Example#886 - hash_copy の例
  • Example#887 - hash_equals の例
  • Example#888 - hash_file の使用例
  • Example#889 - hash_hkdf の例
  • Example#890 - hash_hmac の例
  • Example#891 - hash_hmac_algos の例
  • Example#892 - hash_hmac_file の例
  • Example#893 - 段階的なハッシュの例
  • Example#894 - hash_pbkdf2 の基本的な使い方の例
  • Example#895 - hash_update_stream の例
  • Example#896 - mcrypt_create_iv Example
  • Example#897 - mcrypt_enc_get_algorithms_name example
  • Example#898 - mcrypt_enc_get_modes_name の例
  • Example#899 - mcrypt_enc_get_supported_key_sizes の例
  • Example#900 - mcrypt_encrypt の例
  • Example#901 - mcrypt_get_block_size の例
  • Example#902 - mcrypt_get_cipher_name の例
  • Example#903 - mcrypt_get_iv_size の例
  • Example#904 - mcrypt_get_key_size の例
  • Example#905 - mcrypt_list_algorithms の例
  • Example#906 - mcrypt_list_modes の例
  • Example#907 - mcrypt_module_open の例
  • Example#908 - mcrypt_module_open を暗号化で使用する
  • Example#909 - mcrypt_module_self_test の例
  • Example#910 - mdecrypt_generic の例
  • Example#911 - MD5 ダイジェストと hmac を計算し、16 進数で出力する
  • Example#912 - 全ハッシュをループする
  • Example#913 - mhash_get_block_size の例
  • Example#914 - mhash_get_hash_name の例
  • Example#915 - openssl_cipher_iv_length の例
  • Example#916 - openssl_cipher_key_length の例
  • Example#917 - openssl_cms_sign の例
  • Example#918 - openssl_csr_export() の例
  • Example#919 - openssl_csr_export_to_file() の例
  • Example#920 - openssl_csr_get_public_key() の例
  • Example#921 - openssl_csr_get_subject() の例
  • Example#922 - 自己署名証明書の作成
  • Example#923 - 自己署名の ECC 証明書を作成する (PHP 7.1.0 以降)
  • Example#924 - openssl_csr_sign の例 - CSR に署名する（あなた自身の CA を作成する）
  • Example#925 - 共有シークレットを計算する
  • Example#926 - DH public/private キーペアをPHPで生成する
  • Example#927 - PHP 7.1以降で、AES を GCMモードで使う例
  • Example#928 - PHP 7.1 より前のバージョンで、AES を使う例
  • Example#929 - openssl_error_string の例
  • Example#930 - openssl_get_cert_locations の例
  • Example#931 - openssl_get_cipher_methods の例
  • Example#932 - openssl_get_curve_names の例
  • Example#933 - openssl_get_md_methods の例
  • Example#934 - openssl_open の例
  • Example#935 - openssl_pbkdf2() の例
  • Example#936 - openssl_pkcs12_read の例
  • Example#937 - openssl_pkcs7_decrypt の例
  • Example#938 - openssl_pkcs7_encrypt の例
  • Example#939 - P7B ファイルから、PEM証明書の配列を取得する
  • Example#940 - openssl_pkcs7_sign の例
  • Example#941 - openssl_pkey_derive 関数の例
  • Example#942 - 秘密鍵から、公開鍵を取得する
  • Example#943 - openssl_random_pseudo_bytes の例
  • Example#944 - openssl_seal の例
  • Example#945 - openssl_sign の例
  • Example#946 - openssl_sign の例
  • Example#947 - openssl_spki_export の例
  • Example#948 - openssl_spki_export を使い、<keygen> から取り出す例
  • Example#949 - openssl_spki_export_challenge の例
  • Example#950 - openssl_spki_export_challenge を使い、<keygen> から取り出す例
  • Example#951 - openssl_spki_new の例
  • Example#952 - openssl_spki_verify の例
  • Example#953 - <keygen> から openssl_spki_verify を使う例
  • Example#954 - openssl_verify の例
  • Example#955 - openssl_verify の例
  • Example#956 - openssl_x509_verify の例
  • Example#957 - password の基本的な使用法
  • Example#958 - password_hash の例
  • Example#959 - password_hash で、コストを手動で設定する例
  • Example#960 - password_hash で、適切なコストを探す例
  • Example#961 - Argon2i を使った password_hash の例
  • Example#962 - password_needs_rehash の使用例
  • Example#963 - password_verify の例
  • Example#964 - RNP clearsign example
  • Example#965 - simple callback function example
  • Example#966 - sodium_crypto_box_seal の例
  • Example#967 - sodium_crypto_box_seal_open の例
  • Example#968 - sodium_crypto_core_ristretto255_add の例
  • Example#969 - sodium_crypto_core_ristretto255_from_hash の例
  • Example#970 - sodium_crypto_core_ristretto255_is_valid_point の例
  • Example#971 - sodium_crypto_core_ristretto255_random の例
  • Example#972 - sodium_crypto_core_ristretto255_scalar_add の例
  • Example#973 - sodium_crypto_core_ristretto255_scalar_invertの例
  • Example#974 - sodium_crypto_core_ristretto255_scalar_negate の例
  • Example#975 - sodium_crypto_core_ristretto255_scalar_random の例
  • Example#976 - sodium_crypto_core_ristretto255_scalar_sub の例
  • Example#977 - sodium_crypto_core_ristretto255_sub の例
  • Example#978 - sodium_crypto_generichash_final の例
  • Example#979 - sodium_crypto_generichash_init の例
  • Example#980 - sodium_crypto_generichash_update の例
  • Example#981 - sodium_crypto_kx_keypair の使い方
  • Example#982 - sodium_crypto_pwhash の例
  • Example#983 - sodium_crypto_pwhash_str の例
  • Example#984 - sodium_crypto_secretbox の例
  • Example#985 - sodium_crypto_secretbox_keygen の例
  • Example#986 - sodium_crypto_secretbox_keygen と random_bytes の比較
  • Example#987 - sodium_crypto_secretbox_open の例
  • Example#988 - sodium_crypto_secretstream_xchacha20poly1305_init_pull の例
  • Example#989 - sodium_crypto_secretstream_xchacha20poly1305_init_push の例
  • Example#990 - sodium_crypto_stream_xchacha20_xor_ic の例
  • Example#991 - DBA の例
  • Example#992 - データベースへのアクセス
  • Example#993 - dba_handlers の例
  • Example#994 - カラムの権限の一覧を表示する
  • Example#995 - テーブルのカラム一覧を表示する
  • Example#996 - DSN なしの接続
  • Example#997 - odbc_connection_string_quote の例
  • Example#998 - 利用可能なDSNの一覧を表示する
  • Example#999 - odbc_execute および odbc_prepare の例
  • Example#1000 - odbc_fetch_into の例
  • Example#1001 - odbc_next_result
  • Example#1002 - odbc_execute および odbc_prepare の例
  • Example#1003 - プライマリーキーの一覧を表示する
  • Example#1004 - プロシージャーのカラムを表示する
  • Example#1005 - データベースのプロシージャ一覧を表示する
  • Example#1006 - odbc_result の例
  • Example#1007 - odbc_setoption の例
  • Example#1008 - テーブルの統計情報を表示する
  • Example#1009 - テーブルの権限を表示する
  • Example#1010 - カタログのテーブル一覧を表示する
  • Example#1011 - PDO::ATTR_DRIVER_NAME の使用例
  • Example#1012 - MySQL への接続
  • Example#1013 - 接続エラーの処理
  • Example#1014 - 接続を閉じる
  • Example#1015 - 持続的な接続
  • Example#1016 - トランザクション内で一括処理を行う
  • Example#1017 - プリペアドステートメントを使用して、繰り返し挿入処理を行う
  • Example#1018 - プリペアドステートメントを使用して、繰り返し挿入処理を行う
  • Example#1019 - プリペアドステートメントを使用してデータを取得する
  • Example#1020 - 出力パラメータを指定してストアドプロシージャをコールする
  • Example#1021 - 入出力パラメータを指定してストアドプロシージャをコールする
  • Example#1022 - プレースホルダの間違った使用法
  • Example#1023 - PDO インスタンスの作成およびエラーモードの設定
  • Example#1024 - PDO インスタンスの作成およびコンストラクタでのエラーモードの設定
  • Example#1025 - データベース内の画像を表示する
  • Example#1026 - 画像をデータベースに挿入する
  • Example#1027 - 画像をデータベースに挿入する: Oracle
  • Example#1028 - トランザクションをロールバックする
  • Example#1029 - 基本的なトランザクションをコミットする
  • Example#1030 - DDL トランザクションをコミットする
  • Example#1031 - ドライバ呼び出しにより PDO インスタンスを生成する
  • Example#1032 - URI 呼び出しにより PDO インスタンスを生成する
  • Example#1033 - エイリアスにより PDO インスタンスを生成する
  • Example#1034 - SQLSTATE コードを取得する
  • Example#1035 - DB2 データベースに対する PDO_ODBC 接続の errorInfo() フィールドを表示する
  • Example#1036 - DELETE 文の発行
  • Example#1037 - データベース接続の属性を取得する
  • Example#1038 - PDO::getAvailableDrivers の例
  • Example#1039 - 名前付きパラメータを用いて SQL ステートメントのテンプレートを準備する
  • Example#1040 - 疑問符パラメータを用いて SQL ステートメントのテンプレートを準備する
  • Example#1041 - クエスチョンマークをエスケープした、SQLステートメントのテンプレート
  • Example#1042 - プレースホルダーがないSQLを、PDO::query で実行できます
  • Example#1043 - 通常の文字列をクオートする
  • Example#1044 - 危険な文字列をクオートする
  • Example#1045 - 複雑な文字列をクオートする
  • Example#1046 - トランザクションをロールバックする
  • Example#1047 - バインドした結果セットを PHP 変数に出力する
  • Example#1048 - 名前付けされたプレースホルダを用いてプリペアドステートメントを実行する
  • Example#1049 - 疑問符プレースホルダを用いてプリペアドステートメントを実行する
  • Example#1050 - INOUT パラメータを持つストアドプロシージャをコールする
  • Example#1051 - 名前付けされたプレースホルダを用いてプリペアドステートメントを実行する
  • Example#1052 - 疑問符プレースホルダを用いてプリペアドステートメントを実行する
  • Example#1053 - PDOStatement::closeCursor の例
  • Example#1054 - カラム数を数える
  • Example#1055 - 名前つきパラメータを用いた PDOStatement::debugDumpParams の例
  • Example#1056 - 名前なしパラメータを用いた PDOStatement::debugDumpParams の例
  • Example#1057 - SQLSTATE コードを取得する
  • Example#1058 - DB2 データベースに対する PDO_ODBC 接続の errorInfo() フィールドを表示する
  • Example#1059 - 変数や値のバインドを伴うプリペアドステートメントの実行
  • Example#1060 - 名前付きの値を伴うプリペアドステートメントの実行
  • Example#1061 - 位置を指定した値を伴うプリペアドステートメントの実行
  • Example#1062 - 位置を指定したプレースホルダに、値をバインドした形でのプリペアドステートメントの実行
  • Example#1063 - IN 句で配列を使うプリペアドステートメントの実行
  • Example#1064 - 異なる取得方法で行を取得する
  • Example#1065 - スクロール可能なカーソルで行を取得する
  • Example#1066 - 構築の順序
  • Example#1067 - 結果セットに残っている全ての行をフェッチする
  • Example#1068 - 結果セットから単一カラムの全ての値を取得する
  • Example#1069 - 単一カラムによる全ての値のグループ化
  • Example#1070 - 各結果用のクラスのインスタンス作成
  • Example#1071 - 各結果に対する関数コール
  • Example#1072 - 次行の最初のカラムを返す
  • Example#1073 - カラムのメタデータを取得する
  • Example#1074 - ストアドプロシージャから複数の行セットをフェッチする
  • Example#1075 - 削除された行数を返す
  • Example#1076 - SELECT 文によって返された行をカウントする
  • Example#1077 - フェッチモードを設定する
  • Example#1078 - CUBRID PDO での LOB の追加
  • Example#1079 - CUBRID PDO での LOB の取得
  • Example#1080 - CUBRID PDO で、デフォルトのデータ型のセットを追加する例
  • Example#1081 - CUBRID PDO でのセットの追加でデータ型を指定する例
  • Example#1082 - PDO_CUBRID DSN の例
  • Example#1083 - PDO::cubrid_schema の例
  • Example#1084 - PDO_DBLIB DSN の例
  • Example#1085 - PDO_FIREBIRD DSN でのパス指定の例
  • Example#1086 - PDO_FIREBIRD DSN でのポートとパス指定の例
  • Example#1087 - PDO_FIREBIRD DSN で Debian システムのローカルホストと employee.fdb へのパスを使う例
  • Example#1088 - 方言が 1 のデータベースに接続するための PDO_FIREBIRD の DSN
  • Example#1089 - db2cli.ini を使用した PDO_IBM DSN の例
  • Example#1090 - 接続文字列を使用した PDO_IBM DSN の例
  • Example#1091 - odbc.ini を使用した PDO_INFORMIX DSN の例
  • Example#1092 - 接続文字列を使用した PDO_INFORMIX DSN の例
  • Example#1093 - MySQL の非バッファモードを使う
  • Example#1094 - PDO_MYSQL DSN の例
  • Example#1095 - PDO_SQLSRV DSN の例
  • Example#1096 - PDO_OCI DSN の例
  • Example#1097 - PDO_ODBC DSN の例 (ODBC ドライバマネージャ)
  • Example#1098 - PDO_ODBC DSN の例 (IBM DB2 非カタログ接続)
  • Example#1099 - PDO_ODBC DSN の例 (Microsoft Access 非カタログ接続)
  • Example#1100 - PDO_PGSQL DSN の例
  • Example#1101 - PDO::pgsqlLOBCreate の例
  • Example#1102 - PDO::pgsqlLOBOpen の例
  • Example#1103 - PDO::pgsqlLOBUnlink の例
  • Example#1104 - PDO_SQLITE DSN の例
  • Example#1105 - 集約関数 max_length の例
  • Example#1106 - PDO::sqliteCreateCollation の例
  • Example#1107 - PDO::sqliteCreateFunction の例
  • Example#1108 - Example of Data Retrieval
  • Example#1109 - Example of Data Insertion
  • Example#1110 - cubrid_bind example
  • Example#1111 - cubrid_bind BLOB/CLOB example
  • Example#1112 - cubrid_bind BLOB/CLOB example
  • Example#1113 - cubrid_close_prepare example
  • Example#1114 - cubrid_close_request example
  • Example#1115 - cubrid_col_get example
  • Example#1116 - cubrid_col_size example
  • Example#1117 - cubrid_column_names example
  • Example#1118 - cubrid_column_types example
  • Example#1119 - cubrid_commit example
  • Example#1120 - cubrid_connect example
  • Example#1121 - cubrid_connect_with_url url without properties example
  • Example#1122 - cubrid_connect_with_url url with properties example
  • Example#1123 - cubrid_current_oid example
  • Example#1124 - cubrid_disconnect example
  • Example#1125 - cubrid_drop example
  • Example#1126 - cubrid_error_code example
  • Example#1127 - cubrid_error_code_facility example
  • Example#1128 - cubrid_error_msg example
  • Example#1129 - cubrid_execute example
  • Example#1130 - cubrid_fetch example
  • Example#1131 - cubrid_free_result example
  • Example#1132 - cubrid_get example
  • Example#1133 - cubrid_get_charset example
  • Example#1134 - cubrid_get_class_name example
  • Example#1135 - cubrid_get_client_info example
  • Example#1136 - cubrid_get_db_parameter example
  • Example#1137 - cubrid_get_query_timeout example
  • Example#1138 - cubrid_get_server_info example
  • Example#1139 - cubrid_insert_id example
  • Example#1140 - cubrid_is_instance example
  • Example#1141 - cubrid_lob_close example
  • Example#1142 - cubrid_lob_export example
  • Example#1143 - cubrid_lob_get example
  • Example#1144 - cubrid_lob_send example
  • Example#1145 - cubrid_lob_size example
  • Example#1146 - cubrid_lob2_bind example
  • Example#1147 - cubrid_lob2_export example
  • Example#1148 - cubrid_lob2_export example
  • Example#1149 - cubrid_lob2_read example 1
  • Example#1150 - cubrid_lob2_read example 2
  • Example#1151 - cubrid_lob2_seek example
  • Example#1152 - cubrid_lob2_seek64 example
  • Example#1153 - cubrid_lob2_write example 1
  • Example#1154 - cubrid_lob2_write example 2
  • Example#1155 - cubrid_lock_read example
  • Example#1156 - cubrid_lock_write example
  • Example#1157 - cubrid_move_cursor example
  • Example#1158 - cubrid_next_result example
  • Example#1159 - cubrid_num_cols example
  • Example#1160 - cubrid_num_rows example
  • Example#1161 - cubrid_connect example
  • Example#1162 - cubrid_pconnect_with_url url without properties example
  • Example#1163 - cubrid_pconnect_with_url url with properties example
  • Example#1164 - cubrid_prepare example
  • Example#1165 - cubrid_put example
  • Example#1166 - cubrid_rollback example
  • Example#1167 - cubrid_schema example
  • Example#1168 - cubrid_seq_drop example
  • Example#1169 - cubrid_seq_insert example
  • Example#1170 - cubrid_seq_put example
  • Example#1171 - cubrid_set_add example
  • Example#1172 - cubrid_get_db_parameter example
  • Example#1173 - cubrid_set_drop example
  • Example#1174 - cubrid_version example
  • Example#1175 - cubrid_affected_rows example
  • Example#1176 - cubrid_client_encoding example
  • Example#1177 - cubrid_close example
  • Example#1178 - cubrid_data_seek example
  • Example#1179 - cubrid_db_name example
  • Example#1180 - cubrid_errno example
  • Example#1181 - cubrid_error example
  • Example#1182 - cubrid_fetch_array example
  • Example#1183 - cubrid_fetch_assoc example
  • Example#1184 - cubrid_fetch_field example
  • Example#1185 - cubrid_fetch_lengths example
  • Example#1186 - cubrid_fetch_object example
  • Example#1187 - cubrid_fetch_row example
  • Example#1188 - cubrid_field_flags example
  • Example#1189 - cubrid_field_len example
  • Example#1190 - cubrid_field_name example
  • Example#1191 - cubrid_field_seek example
  • Example#1192 - cubrid_field_table example
  • Example#1193 - cubrid_field_type example
  • Example#1194 - cubrid_list_dbs example
  • Example#1195 - cubrid_num_fields example
  • Example#1196 - cubrid_ping example
  • Example#1197 - Invalid Query
  • Example#1198 - Valid Query
  • Example#1199 - cubrid_real_escape_string example
  • Example#1200 - cubrid_result example
  • Example#1201 - cubrid_unbuffered_query example
  • Example#1202 - cubrid_load_from_glo example
  • Example#1203 - cubrid_new_glo example
  • Example#1204 - cubrid_save_to_glo example
  • Example#1205 - cubrid_send_glo example
  • Example#1206 - Inserting a record in a dBase database
  • Example#1207 - Closing a dBase database file
  • Example#1208 - Creating a dBase database file
  • Example#1209 - Showing header information for a dBase database file
  • Example#1210 - Listing all the registered members in the database
  • Example#1211 - dbase_numfields Example
  • Example#1212 - Looping over all the records of the database
  • Example#1213 - Opening a dBase database file
  • Example#1214 - Emptying a dBase database
  • Example#1215 - Updating a record in the database
  • Example#1216 - ibase_backup example
  • Example#1217 - ibase_backup example with arguments
  • Example#1218 - ibase_blob_get の例
  • Example#1219 - ibase_blob_import の例
  • Example#1220 - ibase_connect の例
  • Example#1221 - ibase_execute の例
  • Example#1222 - ibase_fetch_object の例
  • Example#1223 - ibase_field_info の例
  • Example#1224 - ibase_name_result の例
  • Example#1225 - ibase_num_fields の例
  • Example#1226 - ibase_query の例
  • Example#1227 - ibase_restore example
  • Example#1228 - ibase_restore example with arguments
  • Example#1229 - ibase_service_attach の例
  • Example#1230 - ibase_service_attach の例
  • Example#1231 - hostname/port を使った ibase_service_attach の例
  • Example#1232 - ibase_service_detach の例
  • Example#1233 - ibase_set_event_handler の例
  • Example#1234 - 接続の AUTOCOMMIT 値の取得
  • Example#1235 - 接続の AUTOCOMMIT 値の設定
  • Example#1236 - PHP 変数をプリペアドステートメントにバインドする
  • Example#1237 - IN および OUT パラメータを使用したストアドプロシージャのコール
  • Example#1238 - バイナリラージオブジェクト (BLOB) をファイルから直接挿入する
  • Example#1239 - db2_client_info の例
  • Example#1240 - 接続を閉じる
  • Example#1241 - 失敗した接続試行からの SQLSTATE の取得
  • Example#1242 - 失敗した接続試行からのエラーメッセージの取得
  • Example#1243 - カタログ接続の作成
  • Example#1244 - 非カタログ接続の作成
  • Example#1245 - 自動コミットをデフォルトで無効にした接続の作成
  • Example#1246 - i5/OS best performance
  • Example#1247 - 信頼済みコンテキストの使用
  • Example#1248 - db2_escape_string の例
  • Example#1249 - db2_exec でのテーブルの作成
  • Example#1250 - スクロール可能なカーソルでの SELECT 文の実行
  • Example#1251 - XML データを SQL の結果セットとして返す
  • Example#1252 - XML データの "JOIN"
  • Example#1253 - 大きな XML ドキュメントの一部を SQL データとして返す
  • Example#1254 - パラメータマーカを使用した SQL 文の準備と実行
  • Example#1255 - OUT パラメータを使用したストアドプロシージャのコール
  • Example#1256 - XML データを SQL の結果セットとして返す
  • Example#1257 - XML データの "JOIN"
  • Example#1258 - 大きな XML ドキュメントの一部を SQL データとして返す
  • Example#1259 - 前進のみのカーソルを使用して順に処理する
  • Example#1260 - スクロール可能なカーソルから、指定した行を db2_fetch_array で取得する
  • Example#1261 - 前進のみのカーソルを使用して順に処理する
  • Example#1262 - スクロール可能なカーソルから、指定した行を db2_fetch_assoc で取得する
  • Example#1263 - 前進のみのカーソルを使用して順に処理する
  • Example#1264 - スクロール可能なカーソルから、指定した行を db2_fetch_both で取得する
  • Example#1265 - db2_fetch_object の例
  • Example#1266 - 結果セットを順に処理する
  • Example#1267 - i5/OS recommended alternatives to db2_fetch_row/db2_result
  • Example#1268 - 接続リソースのパラメータの設定および取得
  • Example#1269 - db2_last_insert_id の例
  • Example#1270 - さまざまな型のデータの取得
  • Example#1271 - 複数の結果セットを返すストアドプロシージャをコールする
  • Example#1272 - 結果セットのフィールド数の取得
  • Example#1273 - 持続的接続の終了
  • Example#1274 - db2_pconnect の例
  • Example#1275 - 信頼済みコンテキストの使用
  • Example#1276 - パラメータマーカを使用した SQL 文の準備と実行
  • Example#1277 - db2_result の例
  • Example#1278 - DELETE 文のロールバック
  • Example#1279 - db2_server_info の例
  • Example#1280 - 接続リソースにひとつのパラメータを設定する
  • Example#1281 - 接続リソースに複数のパラメータを設定する
  • Example#1282 - 複数のパラメータを間違ったキーで設定する
  • Example#1283 - 複数のパラメータを間違った値で設定する
  • Example#1284 - 複数のパラメータを接続リソースに設定する (間違った型を指定する)
  • Example#1285 - 複数のパラメータを間違ったリソースに設定する
  • Example#1286 - すべてひとつにまとめる
  • Example#1287 - i5/OS カーソルは読み込み専用
  • Example#1288 - MongoDB\Driver\Manager::__construct basic example
  • Example#1289 - MongoDB\Driver\Manager::__construct basic examples
  • Example#1290 - MongoDB\Driver\Manager::executeBulkWrite example
  • Example#1291 - MongoDB\Driver\Manager::executeCommand with a command returning a single result document
  • Example#1292 - MongoDB\Driver\Manager::executeCommand with a command returning a cursor
  • Example#1293 - Limiting execution time for a command
  • Example#1294 - MongoDB\Driver\Manager::executeQuery example
  • Example#1295 - Limiting execution time for a query
  • Example#1296 - MongoDB\Driver\Manager::getReadConcern example
  • Example#1297 - MongoDB\Driver\Manager::getReadPreference example
  • Example#1298 - MongoDB\Driver\Manager::getServers example
  • Example#1299 - MongoDB\Driver\Manager::getWriteConcern example
  • Example#1300 - Composing MongoDB\Driver\Command to provide a helper to create collections
  • Example#1301 - MongoDB\Driver\Command::__construct example
  • Example#1302 - MongoDB\Driver\Command::__construct example
  • Example#1303 - MongoDB\Driver\Query::__construct example
  • Example#1304 - Mixed write operations are grouped by type
  • Example#1305 - Ordered write operations causing an error
  • Example#1306 - MongoDB\Driver\BulkWrite::__construct example
  • Example#1307 - MongoDB\Driver\BulkWrite::count example
  • Example#1308 - MongoDB\Driver\BulkWrite::delete example
  • Example#1309 - MongoDB\Driver\BulkWrite::insert example
  • Example#1310 - MongoDB\Driver\BulkWrite::update example
  • Example#1311 - Declare an API version on a manager
  • Example#1312 - Declare a strict API version on a manager
  • Example#1313 - MongoDB\Driver\WriteConcern::bsonSerialize with majority write concern
  • Example#1314 - MongoDB\Driver\WriteConcern::bsonSerialize with wtimeout and journal
  • Example#1315 - MongoDB\Driver\WriteConcern::__construct example
  • Example#1316 - MongoDB\Driver\WriteConcern::getJournal example
  • Example#1317 - MongoDB\Driver\WriteConcern::getW example
  • Example#1318 - MongoDB\Driver\WriteConcern::getWtimeout example
  • Example#1319 - MongoDB\Driver\WriteConcern::isDefault example
  • Example#1320 - MongoDB\Driver\ReadPreference::bsonSerialize with primary read preference
  • Example#1321 - MongoDB\Driver\ReadPreference::bsonSerialize with secondary read preference and tag sets
  • Example#1322 - MongoDB\Driver\ReadPreference::bsonSerialize with secondary read preference and max staleness
  • Example#1323 - MongoDB\Driver\ReadPreference::__construct example
  • Example#1324 - MongoDB\Driver\ReadPreference::getMaxStalenessSeconds example
  • Example#1325 - MongoDB\Driver\ReadPreference::getMode example
  • Example#1326 - MongoDB\Driver\ReadPreference::getModeString example
  • Example#1327 - MongoDB\Driver\ReadPreference::getTagSets example
  • Example#1328 - MongoDB\Driver\ReadConcern::bsonSerialize with empty read concern
  • Example#1329 - MongoDB\Driver\ReadConcern::bsonSerialize with local read concern
  • Example#1330 - MongoDB\Driver\ReadConcern::__construct example
  • Example#1331 - MongoDB\Driver\ReadConcern::getLevel example
  • Example#1332 - MongoDB\Driver\ReadConcern::isDefault example
  • Example#1333 - Reading a result set
  • Example#1334 - Reading a result set for a tailable cursor
  • Example#1335 - MongoDB\Driver\Cursor::getId example
  • Example#1336 - MongoDB\Driver\Cursor::getServer example
  • Example#1337 - MongoDB\Driver\Cursor::isDead example
  • Example#1338 - MongoDB\Driver\Cursor::setTypeMap example
  • Example#1339 - MongoDB\Driver\Cursor::toArray example
  • Example#1340 - MongoDB\Driver\CursorId::__toString example
  • Example#1341 - MongoDB\Driver\Server::getHost example
  • Example#1342 - MongoDB\Driver\Server::getInfo example
  • Example#1343 - MongoDB\Driver\Server::getLatency example
  • Example#1344 - MongoDB\Driver\Server::getPort example
  • Example#1345 - MongoDB\Driver\WriteConcernError::getCode example
  • Example#1346 - MongoDB\Driver\WriteConcernError::getInfo example
  • Example#1347 - MongoDB\Driver\WriteConcernError::getMessage example
  • Example#1348 - MongoDB\Driver\WriteError::getCode example
  • Example#1349 - MongoDB\Driver\WriteError::getIndex example
  • Example#1350 - MongoDB\Driver\WriteError::getMessage example
  • Example#1351 - MongoDB\Driver\WriteResult::getDeletedCount example
  • Example#1352 - MongoDB\Driver\WriteResult::getInsertedCount example
  • Example#1353 - MongoDB\Driver\WriteResult::getMatchedCount example
  • Example#1354 - MongoDB\Driver\WriteResult::getModifiedCount example
  • Example#1355 - MongoDB\Driver\WriteResult::getServer example
  • Example#1356 - MongoDB\Driver\WriteResult::getUpsertedCount example
  • Example#1357 - MongoDB\Driver\WriteResult::getUpsertedIds example
  • Example#1358 - MongoDB\Driver\WriteResult::getWriteConcernError example
  • Example#1359 - MongoDB\Driver\WriteResult::getWriteErrors with a single error
  • Example#1360 - MongoDB\Driver\WriteResult::getWriteErrors with multiple errors
  • Example#1361 - MongoDB\Driver\WriteResult::isAcknowledged with acknowledged write concern
  • Example#1362 - MongoDB\Driver\WriteResult::isAcknowledged with unacknowledged write concern
  • Example#1363 - MongoDB\BSON\fromJSON example
  • Example#1364 - MongoDB\BSON\fromPHP example
  • Example#1365 - MongoDB\BSON\toCanonicalExtendedJSON example
  • Example#1366 - MongoDB\BSON\toJSON example
  • Example#1367 - MongoDB\BSON\toPHP example
  • Example#1368 - MongoDB\BSON\toRelaxedExtendedJSON example
  • Example#1369 - MongoDB\BSON\Document::toCanonicalExtendedJSON example
  • Example#1370 - MongoDB\BSON\Document::toRelaxedExtendedJSON example
  • Example#1371 - MongoDB\BSON\Binary::__construct example
  • Example#1372 - MongoDB\BSON\Binary::getData example
  • Example#1373 - MongoDB\BSON\Binary::getType example
  • Example#1374 - MongoDB\BSON\Binary::__toString example
  • Example#1375 - MongoDB\BSON\Decimal128::__construct example
  • Example#1376 - MongoDB\BSON\Decimal128::__toString example
  • Example#1377 - MongoDB\BSON\Javascript::__construct example
  • Example#1378 - MongoDB\BSON\Javascript::getCode example
  • Example#1379 - MongoDB\BSON\Javascript::getScope example
  • Example#1380 - MongoDB\BSON\Javascript::__toString example
  • Example#1381 - MongoDB\BSON\MaxKey::__construct example
  • Example#1382 - MongoDB\BSON\MinKey::__construct example
  • Example#1383 - MongoDB\BSON\ObjectId::__construct example
  • Example#1384 - MongoDB\BSON\ObjectId::getTimestamp example
  • Example#1385 - MongoDB\BSON\ObjectId::__toString example
  • Example#1386 - MongoDB\BSON\Regex::__construct example
  • Example#1387 - MongoDB\BSON\Regex::getFlags example
  • Example#1388 - MongoDB\BSON\Regex::getPattern example
  • Example#1389 - MongoDB\BSON\Regex::__toString example
  • Example#1390 - MongoDB\BSON\Timestamp::__construct example
  • Example#1391 - MongoDB\BSON\Timestamp::__toString example
  • Example#1392 - MongoDB\BSON\UTCDateTime::__construct example
  • Example#1393 - MongoDB\BSON\UTCDatetime::toDateTime example
  • Example#1394 - MongoDB\BSON\UTCDatetime::toDateTimeImmutable example
  • Example#1395 - MongoDB\BSON\UTCDateTime::__toString example
  • Example#1396 - MongoDB\BSON\Serializable::bsonSerialize returning an associative array for root document
  • Example#1397 - MongoDB\BSON\Serializable::bsonSerialize returning a sequential array for root document
  • Example#1398 - MongoDB\BSON\Serializable::bsonSerialize returning an associative array for document field
  • Example#1399 - MongoDB\BSON\Serializable::bsonSerialize returning a sequential array for document field
  • Example#1400 - MongoDB\BSON\Unserializable::bsonUnserialize example
  • Example#1401 - MongoDB\BSON\Int64::__toString example
  • Example#1402 - MongoDB\Driver\Exception\WriteException::getWriteResult example
  • Example#1403 - MySQL 用 API の比較
  • Example#1404 - プリペアドステートメントの比較
  • Example#1405 - mysqlnd あるいは libmysqlclient を使う場合の configure コマンド
  • Example#1406 - 非バッファクエリの例: mysqli
  • Example#1407 - 非バッファクエリの例: pdo_mysql
  • Example#1408 - 文字セットを SQL で指定することによる問題
  • Example#1409 - 文字セットの設定: mysqli
  • Example#1410 - 文字セットの設定: pdo_mysql
  • Example#1411 - 古い mysql 拡張モジュールから移行する簡単な方法
  • Example#1412 - オブジェクト指向と手続き型のインターフェイス
  • Example#1413 - 悪いコーディングスタイル
  • Example#1414 - localhost が持つ特別な意味
  • Example#1415 - デフォルト値を設定する
  • Example#1416 - クエリを実行する
  • Example#1417 - バッファリングされた結果セットを操作する
  • Example#1418 - 結果セットをバッファリングせず、結果を操作する
  • Example#1419 - テキストプロトコルは、文字列を返すのがデフォルト
  • Example#1420 - mysqlnd と接続オプションを設定することで、ネイティブのデータ型を扱う
  • Example#1421 - プリペアドステートメント
  • Example#1422 - INSERT を一度だけ準備し、複数回実行する
  • Example#1423 - 複数INSERTを使い、クライアント・サーバー間の通信を減らす
  • Example#1424 - ネイティブのデータ型
  • Example#1425 - バインドされた値を出力する
  • Example#1426 - 結果を取得するために、mysqli_result を使う
  • Example#1427 - 柔軟に結果を読み取るために、バッファリングされた結果セットを使う
  • Example#1428 - ストアドプロシージャを呼び出す
  • Example#1429 - セッションの値を使う
  • Example#1430 - ストアドプロシージャから、結果を取得する
  • Example#1431 - ストアドプロシージャとプリペアドステートメント
  • Example#1432 - バインドAPIを使って、プリペアドステートメントとストアドプロシージャを実行する
  • Example#1433 - 複数のステートメント
  • Example#1434 - SQLインジェクション
  • Example#1435 - autocommit モードをSQL と API を使って設定する
  • Example#1436 - コミットとロールバック
  • Example#1437 - 結果セットのメタデータにアクセスする
  • Example#1438 - プリペアドステートメントのメタデータ
  • Example#1439 - $mysqli->affected_rows の例
  • Example#1440 - mysqli::autocommit の例
  • Example#1441 - mysqli::begin_transaction の例
  • Example#1442 - mysqli::change_user の例
  • Example#1443 - mysqli::character_set_name の例
  • Example#1444 - mysqli::close example
  • Example#1445 - $mysqli->connect_errno の例
  • Example#1446 - $mysqli->connect_error の例
  • Example#1447 - mysqli::__construct の例
  • Example#1448 - mysqli クラスを拡張する
  • Example#1449 - 手動によるエラーハンドリング
  • Example#1450 - トレースファイルの作成
  • Example#1451 - $mysqli->errno の例
  • Example#1452 - $mysqli->error の例
  • Example#1453 - $mysqli->error_list の例
  • Example#1454 - mysqli::execute_query の例
  • Example#1455 - $mysqli->field_count の例
  • Example#1456 - mysqli::get_charset の例
  • Example#1457 - mysqli_get_client_info
  • Example#1458 - mysqli_get_client_version
  • Example#1459 - mysqli_get_connection_stats の例
  • Example#1460 - $mysqli->host_info の例
  • Example#1461 - $mysqli->protocol_version の例
  • Example#1462 - $mysqli->server_info の例
  • Example#1463 - $mysqli->server_version の例
  • Example#1464 - $mysqli->info の例
  • Example#1465 - $mysqli->insert_id の例
  • Example#1466 - mysqli::kill の例
  • Example#1467 - mysqli::multi_query の例
  • Example#1468 - mysqli::ping の例
  • Example#1469 - mysqli_poll の例
  • Example#1470 - mysqli::prepare の例
  • Example#1471 - mysqli::query の例
  • Example#1472 - mysqli::real_connect の例
  • Example#1473 - mysqli::real_escape_string の例
  • Example#1474 - mysqli::select_db の例
  • Example#1475 - mysqli::set_charset の例
  • Example#1476 - $mysqli->sqlstate の例
  • Example#1477 - mysqli::stat の例
  • Example#1478 - $mysqli->thread_id の例
  • Example#1479 - mysqli::use_result の例
  • Example#1480 - $mysqli->warning_count の例
  • Example#1481 - mysqli_stmt_affected_rows の例
  • Example#1482 - mysqli_stmt::bind_param の例
  • Example#1483 - 引数を渡すために ... を使う
  • Example#1484 - オブジェクト指向型
  • Example#1485 - 手続き型
  • Example#1486 - オブジェクト指向型
  • Example#1487 - 手続き型
  • Example#1488 - オブジェクト指向型
  • Example#1489 - 手続き型
  • Example#1490 - オブジェクト指向型
  • Example#1491 - 手続き型
  • Example#1492 - オブジェクト指向型
  • Example#1493 - 手続き型
  • Example#1494 - プリペアドステートメントに値をバインドして実行する
  • Example#1495 - プリペアドステートメントに、値を配列で指定して実行する
  • Example#1496 - オブジェクト指向型
  • Example#1497 - 手続き型
  • Example#1498 - オブジェクト指向型
  • Example#1499 - 手続き型
  • Example#1500 - オブジェクト指向型
  • Example#1501 - 手続き型
  • Example#1502 - オブジェクト指向型
  • Example#1503 - 手続き型
  • Example#1504 - オブジェクト指向型
  • Example#1505 - 手続き型
  • Example#1506 - mysqli_stmt::prepare の例
  • Example#1507 -
  • Example#1508 - オブジェクト指向型
  • Example#1509 - 手続き型
  • Example#1510 - オブジェクト指向型
  • Example#1511 - オブジェクト指向型
  • Example#1512 - 手続き型
  • Example#1513 - オブジェクト指向型
  • Example#1514 - 手続き型
  • Example#1515 - mysqli_result オブジェクトを作る
  • Example#1516 - オブジェクト指向型
  • Example#1517 - 手続き型
  • Example#1518 - mysqli::data_seek の例
  • Example#1519 - 繰り返し処理を行う際に、結果セットのポインタを調整する
  • Example#1520 - mysqli_result::fetch_all の例
  • Example#1521 - mysqli_result::fetch_array の例
  • Example#1522 - mysqli_result::fetch_assoc の例
  • Example#1523 - mysqli_result, iterator, mysqli_result::fetch_assoc の使い方の比較
  • Example#1524 - mysqli_result::fetch_column の例
  • Example#1525 - オブジェクト指向型
  • Example#1526 - 手続き型
  • Example#1527 - オブジェクト指向型
  • Example#1528 - 手続き型
  • Example#1529 - オブジェクト指向型
  • Example#1530 - 手続き型
  • Example#1531 - mysqli_result::fetch_object の例
  • Example#1532 - mysqli_result::fetch_row の例
  • Example#1533 - オブジェクト指向型
  • Example#1534 - 手続き型
  • Example#1535 - オブジェクト指向型
  • Example#1536 - 手続き型
  • Example#1537 - オブジェクト指向型
  • Example#1538 - 手続き型
  • Example#1539 - オブジェクト指向型
  • Example#1540 - 手続き型
  • Example#1541 - オブジェクト指向型
  • Example#1542 - 手続き型
  • Example#1543 - インデックスに関するエラー以外を全て報告する
  • Example#1544 - A mysqli_get_client_stats の例
  • Example#1545 - MySQL Serverへの接続
  • Example#1546 - MySQL サーバー上で、スキーマとコレクションを作る
  • Example#1547 - データを保存し、取得する
  • Example#1548 - 複数の文書を取得し、それを走査する
  • Example#1549 - mysql_xdevapi\Expression の例
  • Example#1550 - URI の例
  • Example#1551 - mysql_xdevapi\getSession の例
  • Example#1552 - mysql_xdevapi\RowResult::getWarnings example
  • Example#1553 - mysql_xdevapi\RowResult::getWarningsCount の例
  • Example#1554 - mysql_xdevapi\Client::__construct の例
  • Example#1555 - mysql_xdevapi\Collection::add の例
  • Example#1556 - mysql_xdevapi\Collection::addOrReplaceOne の例
  • Example#1557 - mysql_xdevapi\Collection::getOne の例
  • Example#1558 - mysql_xdevapi\Collection::count の例
  • Example#1559 - mysql_xdevapi\Collection::createIndex の例
  • Example#1560 - mysql_xdevapi\Collection::dropIndex の例
  • Example#1561 - mysql_xdevapi\Collection::existsInDatabase の例
  • Example#1562 - mysql_xdevapi\Collection::find の例
  • Example#1563 - mysql_xdevapi\Collection::getName の例
  • Example#1564 - mysql_xdevapi\Collection::getOne の例
  • Example#1565 - mysql_xdevapi\Collection::getSchema の例
  • Example#1566 - mysql_xdevapi\Collection::getSession の例
  • Example#1567 - mysql_xdevapi\Collection::modify の例
  • Example#1568 - mysql_xdevapi\Collection::remove example
  • Example#1569 - mysql_xdevapi\Collection::removeOne の例
  • Example#1570 - mysql_xdevapi\Collection::replaceOne の例
  • Example#1571 - mysql_xdevapi\CollectionAdd::__construct の例
  • Example#1572 - mysql_xdevapi\CollectionAdd::execute の例
  • Example#1573 - mysql_xdevapi\CollectionFind::bind の例
  • Example#1574 - CollectionFind の例
  • Example#1575 - CollectionFind の例
  • Example#1576 - mysql_xdevapi\CollectionFind::fields の例
  • Example#1577 - mysql_xdevapi\CollectionFind::groupBy の例
  • Example#1578 - mysql_xdevapi\CollectionFind::having の例
  • Example#1579 - mysql_xdevapi\CollectionFind::limit の例
  • Example#1580 - mysql_xdevapi\CollectionFind::lockExclusive の例
  • Example#1581 - mysql_xdevapi\CollectionFind::lockShared の例
  • Example#1582 - mysql_xdevapi\CollectionFind::offset の例
  • Example#1583 - mysql_xdevapi\CollectionFind::sort の例
  • Example#1584 - mysql_xdevapi\CollectionModify::arrayAppend の例
  • Example#1585 - mysql_xdevapi\CollectionModify::arrayInsert の例
  • Example#1586 - mysql_xdevapi\CollectionModify::bind の例
  • Example#1587 - mysql_xdevapi\CollectionModify::__construct の例
  • Example#1588 - mysql_xdevapi\CollectionModify::execute の例
  • Example#1589 - mysql_xdevapi\CollectionModify::limit の例
  • Example#1590 - mysql_xdevapi\CollectionModify::patch の例
  • Example#1591 - mysql_xdevapi\CollectionModify::replace の例
  • Example#1592 - mysql_xdevapi\CollectionModify::set の例
  • Example#1593 - mysql_xdevapi\CollectionModify::skip の例
  • Example#1594 - mysql_xdevapi\CollectionModify::sort の例
  • Example#1595 - mysql_xdevapi\CollectionModify::unset の例
  • Example#1596 - mysql_xdevapi\CollectionRemove::bind の例
  • Example#1597 - mysql_xdevapi\Collection::remove の例
  • Example#1598 - mysql_xdevapi\CollectionRemove::execute の例
  • Example#1599 - mysql_xdevapi\CollectionRemove::limit example
  • Example#1600 - mysql_xdevapi\CollectionRemove::sort の例
  • Example#1601 - mysql_xdevapi\ColumnResult::__construct の例
  • Example#1602 - mysql_xdevapi\ColumnResult::getCharacterSetName の例
  • Example#1603 - mysql_xdevapi\ColumnResult::getCollationName の例
  • Example#1604 - mysql_xdevapi\ColumnResult::getColumnLabel の例
  • Example#1605 - mysql_xdevapi\ColumnResult::getColumnName の例
  • Example#1606 - mysql_xdevapi\ColumnResult::getFractionalDigits の例
  • Example#1607 - mysql_xdevapi\ColumnResult::getLength の例
  • Example#1608 - mysql_xdevapi\ColumnResult::getSchemaName の例
  • Example#1609 - mysql_xdevapi\ColumnResult::getTableLabel の例
  • Example#1610 - mysql_xdevapi\ColumnResult::getTableName の例
  • Example#1611 - mysql_xdevapi\ColumnResult::getType の例
  • Example#1612 - mysql_xdevapi\ColumnResult::isNumberSigned の例
  • Example#1613 - mysql_xdevapi\ColumnResult::isPadded の例
  • Example#1614 - mysql_xdevapi\CrudOperationBindable::bind の例
  • Example#1615 - mysql_xdevapi\CrudOperationLimitable::limit の例
  • Example#1616 - mysql_xdevapi\CrudOperationSkippable::skip の例
  • Example#1617 - mysql_xdevapi\CrudOperationSortable::sort の例
  • Example#1618 - mysql_xdevapi\DatabaseObject::existsInDatabase の例
  • Example#1619 - mysql_xdevapi\DatabaseObject::getName の例
  • Example#1620 - mysql_xdevapi\DatabaseObject::getSession の例
  • Example#1621 - DocResult の例
  • Example#1622 - mysql_xdevapi\DocResult::fetchAll の例
  • Example#1623 - mysql_xdevapi\DocResult::fetchOne の例
  • Example#1624 - mysql_xdevapi\DocResult::getWarnings の例
  • Example#1625 - mysql_xdevapi\DocResult::getWarningsCount の例
  • Example#1626 - execute() の例
  • Example#1627 - mysql_xdevapi\ExecutionStatus::__construct の例
  • Example#1628 - mysql_xdevapi\Expression::__construct の例
  • Example#1629 - mysql_xdevapi\Result::__construct の例
  • Example#1630 - mysql_xdevapi\Result::getAffectedItemsCount の例
  • Example#1631 - mysql_xdevapi\Result::getAutoIncrementValue の例
  • Example#1632 - mysql_xdevapi\Result::getGeneratedIds の例
  • Example#1633 - mysql_xdevapi\RowResult::getWarnings の例
  • Example#1634 - mysql_xdevapi\RowResult::getWarningsCount の例
  • Example#1635 - mysql_xdevapi\RowResult::__construct の例
  • Example#1636 - mysql_xdevapi\RowResult::fetchAll の例
  • Example#1637 - mysql_xdevapi\RowResult::fetchOne の例
  • Example#1638 - mysql_xdevapi\RowResult::getColumnsCount の例
  • Example#1639 - mysql_xdevapi\RowResult::getColumnNames の例
  • Example#1640 - mysql_xdevapi\RowResult::getColumns の例
  • Example#1641 - mysql_xdevapi\RowResult::getWarnings の例
  • Example#1642 - mysql_xdevapi\RowResult::getWarningsCount の例
  • Example#1643 - mysql_xdevapi\Schema::__construct の例
  • Example#1644 - mysql_xdevapi\Schema::createCollection の例
  • Example#1645 - mysql_xdevapi\Schema::createCollection の例
  • Example#1646 - mysql_xdevapi\Schema::dropCollection の例
  • Example#1647 - mysql_xdevapi\Schema::existsInDatabase の例
  • Example#1648 - mysql_xdevapi\Schema::getCollection の例
  • Example#1649 - mysql_xdevapi\Schema::getCollectionAsTable の例
  • Example#1650 - mysql_xdevapi\Schema::getCollections の例
  • Example#1651 - mysql_xdevapi\Schema::getName の例
  • Example#1652 - mysql_xdevapi\Schema::getSession の例
  • Example#1653 - mysql_xdevapi\Schema::getTable の例
  • Example#1654 - mysql_xdevapi\Schema::getTables の例
  • Example#1655 - mysql_xdevapi\Session::getSchema の例
  • Example#1656 - mysql_xdevapi\Session::close の例
  • Example#1657 - mysql_xdevapi\Session::commit の例
  • Example#1658 - mysql_xdevapi\Session::__construct の例
  • Example#1659 - mysql_xdevapi\Session::createSchema の例
  • Example#1660 - mysql_xdevapi\Session::dropSchema の例
  • Example#1661 - mysql_xdevapi\Session::generateUuid の例
  • Example#1662 - mysql_xdevapi\Session::getSchema の例
  • Example#1663 - mysql_xdevapi\Session::getSchema の例
  • Example#1664 - mysql_xdevapi\Session::getSchemas の例
  • Example#1665 - mysql_xdevapi\Session::getServerVersion の例
  • Example#1666 - mysql_xdevapi\Session::listClients の例
  • Example#1667 - mysql_xdevapi\Session::quoteName の例
  • Example#1668 - mysql_xdevapi\Session::releaseSavepoint の例
  • Example#1669 - mysql_xdevapi\Session::rollback の例
  • Example#1670 - mysql_xdevapi\Session::rollbackTo の例
  • Example#1671 - mysql_xdevapi\Session::setSavepoint の例
  • Example#1672 - mysql_xdevapi\Session::sql の例
  • Example#1673 - mysql_xdevapi\Session::startTransaction の例
  • Example#1674 - mysql_xdevapi\SqlStatement::bind の例
  • Example#1675 - mysql_xdevapi\SqlStatement::__construct の例
  • Example#1676 - mysql_xdevapi\SqlStatement::execute の例
  • Example#1677 - mysql_xdevapi\SqlStatement::getNextResult の例
  • Example#1678 - mysql_xdevapi\SqlStatement::getResult の例
  • Example#1679 - mysql_xdevapi\SqlStatement::hasMoreResults の例
  • Example#1680 - mysql_xdevapi\SqlStatementResult::__construct の例
  • Example#1681 - mysql_xdevapi\SqlStatementResult::fetchAll の例
  • Example#1682 - mysql_xdevapi\SqlStatementResult::fetchOne の例
  • Example#1683 - mysql_xdevapi\SqlStatementResult::getAffectedItemsCount の例
  • Example#1684 - mysql_xdevapi\SqlStatementResult::getColumnsCount の例
  • Example#1685 - mysql_xdevapi\SqlStatementResult::getColumnNames の例
  • Example#1686 - mysql_xdevapi\SqlStatementResult::getColumns の例
  • Example#1687 - mysql_xdevapi\SqlStatementResult::getGeneratedIds の例
  • Example#1688 - mysql_xdevapi\SqlStatementResult::getLastInsertId の例
  • Example#1689 - mysql_xdevapi\SqlStatementResult::getWarnings の例
  • Example#1690 - mysql_xdevapi\SqlStatementResult::getWarningsCount の例
  • Example#1691 - mysql_xdevapi\SqlStatementResult::hasData の例
  • Example#1692 - mysql_xdevapi\SqlStatementResult::nextResult の例
  • Example#1693 - mysql_xdevapi\Statement::__construct の例
  • Example#1694 - mysql_xdevapi\Statement::getNextResult の例
  • Example#1695 - mysql_xdevapi\Statement::getResult の例
  • Example#1696 - mysql_xdevapi\Statement::hasMoreResults の例
  • Example#1697 - mysql_xdevapi\Table::__construct の例
  • Example#1698 - mysql_xdevapi\Table::count の例
  • Example#1699 - mysql_xdevapi\Table::delete の例
  • Example#1700 - mysql_xdevapi\Table::existsInDatabase の例
  • Example#1701 - mysql_xdevapi\Table::getName の例
  • Example#1702 - mysql_xdevapi\Table::getSchema の例
  • Example#1703 - mysql_xdevapi\Table::getSession の例
  • Example#1704 - mysql_xdevapi\Table::insert の例
  • Example#1705 - mysql_xdevapi\Table::isView の例
  • Example#1706 - mysql_xdevapi\Table::count の例
  • Example#1707 - mysql_xdevapi\Table::update の例
  • Example#1708 - mysql_xdevapi\TableDelete::bind の例
  • Example#1709 - mysql_xdevapi\TableDelete::__construct の例
  • Example#1710 - mysql_xdevapi\TableDelete::execute の例
  • Example#1711 - mysql_xdevapi\TableDelete::limit の例
  • Example#1712 - mysql_xdevapi\TableDelete::orderBy の例
  • Example#1713 - mysql_xdevapi\TableDelete::where の例
  • Example#1714 - mysql_xdevapi\TableInsert::__construct の例
  • Example#1715 - mysql_xdevapi\TableInsert::execute の例
  • Example#1716 - mysql_xdevapi\TableInsert::values の例
  • Example#1717 - mysql_xdevapi\TableSelect::bind の例
  • Example#1718 - mysql_xdevapi\TableSelect::__construct の例
  • Example#1719 - mysql_xdevapi\TableSelect::execute の例
  • Example#1720 - mysql_xdevapi\TableSelect::groupBy の例
  • Example#1721 - mysql_xdevapi\TableSelect::having の例
  • Example#1722 - mysql_xdevapi\TableSelect::limit の例
  • Example#1723 - mysql_xdevapi\TableSelect::lockExclusive の例
  • Example#1724 - mysql_xdevapi\TableSelect::lockShared の例
  • Example#1725 - mysql_xdevapi\TableSelect::offset の例
  • Example#1726 - mysql_xdevapi\TableSelect::orderBy の例
  • Example#1727 - mysql_xdevapi\TableSelect::where の例
  • Example#1728 - mysql_xdevapi\TableUpdate::bind の例
  • Example#1729 - mysql_xdevapi\TableUpdate::__construct の例
  • Example#1730 - mysql_xdevapi\TableUpdate::execute の例
  • Example#1731 - mysql_xdevapi\TableUpdate::limit の例
  • Example#1732 - mysql_xdevapi\TableUpdate::orderby の例
  • Example#1733 - mysql_xdevapi\TableUpdate::set の例
  • Example#1734 - mysql_xdevapi\TableUpdate::where の例
  • Example#1735 - mysql_xdevapi\Warning::__construct の例
  • Example#1736 - MySQL 拡張モジュールに関する例
  • Example#1737 - mysql_affected_rows の例
  • Example#1738 - トランザクションを利用した mysql_affected_rows の例
  • Example#1739 - mysql_client_encoding の例
  • Example#1740 - mysql_close の例
  • Example#1741 - mysql_connect の例
  • Example#1742 - mysql_connect で hostname:port 構文を使用する例
  • Example#1743 - mysql_connect で ":/path/to/socket" 構文を使用する例
  • Example#1744 - mysql_create_db の別の例
  • Example#1745 - mysql_data_seek の例
  • Example#1746 - mysql_db_name の例
  • Example#1747 - mysql_db_query の別の例
  • Example#1748 - mysql_drop_db の別の例
  • Example#1749 - mysql_errno の例
  • Example#1750 - mysql_error の例
  • Example#1751 - mysql_escape_string の例
  • Example#1752 - 重複した列名に対して別名を定義する問い合わせ
  • Example#1753 - mysql_fetch_array を MYSQL_NUM とともに利用する
  • Example#1754 - mysql_fetch_array を MYSQL_ASSOC とともに利用する
  • Example#1755 - mysql_fetch_array を MYSQL_BOTH とともに利用する
  • Example#1756 - mysql_fetch_assoc のいろいろな例
  • Example#1757 - mysql_fetch_field の例
  • Example#1758 - mysql_fetch_lengths の例
  • Example#1759 - mysql_fetch_object の例
  • Example#1760 - mysql_fetch_object の例
  • Example#1761 - mysql_fetch_row で行を取得する
  • Example#1762 - mysql_field_flags の例
  • Example#1763 - mysql_field_len の例
  • Example#1764 - mysql_field_name の例
  • Example#1765 - mysql_field_table の例
  • Example#1766 - mysql_field_type の例
  • Example#1767 - mysql_free_result の例
  • Example#1768 - mysql_get_client_info の例
  • Example#1769 - mysql_get_host_info の例
  • Example#1770 - mysql_get_proto_info の例
  • Example#1771 - mysql_get_server_info の例
  • Example#1772 - 該当する MySQL 文
  • Example#1773 - mysql_insert_id の例
  • Example#1774 - mysql_list_dbs の例
  • Example#1775 - 非推奨である mysql_list_fields の代替例
  • Example#1776 - mysql_list_processes の例
  • Example#1777 - mysql_list_tables の別の例
  • Example#1778 - mysql_num_fields の例
  • Example#1779 - mysql_num_rows の例
  • Example#1780 - mysql_ping の例
  • Example#1781 - 間違ったクエリ
  • Example#1782 - 正しいクエリ
  • Example#1783 - 単純な mysql_real_escape_string の例
  • Example#1784 - mysql_real_escape_string には接続が必須であることを示す例
  • Example#1785 - SQL インジェクション攻撃の例
  • Example#1786 - mysql_result の例
  • Example#1787 - mysql_select_db の例
  • Example#1788 - mysql_stat の例
  • Example#1789 - mysql_stat の別の例
  • Example#1790 - mysql_tablename の例
  • Example#1791 - mysql_thread_id の例
  • Example#1792 - Examples of code snippets that cause an explicit close
  • Example#1793 - Examples of code snippets that cause an implicit close
  • Example#1794 - Usage examples
  • Example#1795 - 基本的なクエリ
  • Example#1796 - バインド変数を用いた挿入
  • Example#1797 - クエリの WHERE 句でのバインド
  • Example#1798 - CLOB カラムにデータを挿入する
  • Example#1799 - PL/SQL ストアドファンクションの使用
  • Example#1800 - PL/SQL ストアドプロシージャの使用
  • Example#1801 - REF CURSOR を返す PL/SQL ファンクションのコール
  • Example#1802 - Registering a TAF callback
  • Example#1803 - DTrace を使用して すべてのユーザーレベルの PHP OCI8 静的プローブをトレースするための user_oci8_probes.d
  • Example#1804 - oci_bind_array_by_name の例
  • Example#1805 - oci_bind_by_name によるデータの挿入
  • Example#1806 - 一度組み立てたものを複数回実行
  • Example#1807 - foreach ループでのバインド
  • Example#1808 - WHERE 句でのバインド
  • Example#1809 - LIKE 句でのバインド
  • Example#1810 - REGEXP_LIKE でのバインド
  • Example#1811 - IN 句での複数の値のバインド
  • Example#1812 - クエリが返す ROWID のバインド
  • Example#1813 - INSERT での ROWID のバインド
  • Example#1814 - PL/SQL ストアドファンクションでのバインド
  • Example#1815 - PL/SQL ストアドプロシージャでのパラメータのバインド
  • Example#1816 - CLOB 列のバインド
  • Example#1817 - PL/SQL の BOOLEAN のバインド
  • Example#1818 - oci_client_version の例
  • Example#1819 - 接続を閉じる
  • Example#1820 - 参照の全てが閉じられるまでデータベース接続は閉じられません
  • Example#1821 - 一回以上開かれた接続を閉じる
  • Example#1822 - 変数がスコープから外れると接続が閉じられます
  • Example#1823 - oci_commit の例
  • Example#1824 - Easy Connect 構文を使った基本的な oci_connect の使用例
  • Example#1825 - Network Connect 名を使った基本的な oci_connect の使用例
  • Example#1826 - oci_connect での明示的な文字セットの指定
  • Example#1827 - oci_connect での複数コールの使用
  • Example#1828 - oci_define_by_name の例
  • Example#1829 - oci_define_by_name での大文字小文字を区別するカラム名の使用
  • Example#1830 - oci_define_by_name での LOB カラムの使用
  • Example#1831 - oci_define_by_name での型の明示
  • Example#1832 - 接続エラー後の Oracle エラーメッセージの表示
  • Example#1833 - パースエラー時の Oracle エラーメッセージの表示
  • Example#1834 - 実行エラー時の、 Oracle エラーメッセージと問題となった文の表示
  • Example#1835 - oci_execute での問い合わせの例
  • Example#1836 - モードを指定せずに oci_execute を実行する例
  • Example#1837 - oci_execute で OCI_NO_AUTO_COMMIT を使う例
  • Example#1838 - oci_execute でさまざまなコミットモードを使う例
  • Example#1839 - oci_execute で OCI_DESCRIBE_ONLY を使う例
  • Example#1840 - oci_fetch での定義済みの変数の使用
  • Example#1841 - oci_fetch と oci_result の使用例
  • Example#1842 - oci_fetch_all の例
  • Example#1843 - oci_fetch_all で OCI_FETCHSTATEMENT_BY_ROW を使う例
  • Example#1844 - oci_fetch_all で OCI_NUM を使う例
  • Example#1845 - oci_fetch_array での OCI_BOTH の使用例
  • Example#1846 - oci_fetch_array での OCI_NUM の使用例
  • Example#1847 - oci_fetch_array での OCI_ASSOC の使用例
  • Example#1848 - oci_fetch_array での OCI_RETURN_NULLS の使用例
  • Example#1849 - oci_fetch_array での OCI_RETURN_LOBS の使用例
  • Example#1850 - oci_fetch_array での文字の大小を区別するカラムの使用例
  • Example#1851 - oci_fetch_array での同じ名前のカラムの使用例
  • Example#1852 - oci_fetch_array での DATE カラムの使用例
  • Example#1853 - oci_fetch_array での REF CURSOR の使用例
  • Example#1854 - oci_fetch_array での LIMIT 風のクエリによるページング
  • Example#1855 - oci_fetch_array で Oracle Database の暗黙の結果セットを使う例
  • Example#1856 - oci_fetch_assoc の例
  • Example#1857 - oci_fetch_object の例
  • Example#1858 - 文字の大小を区別するカラム名を持つ oci_fetch_object
  • Example#1859 - LOB を持つ oci_fetch_object
  • Example#1860 - oci_fetch_row の例
  • Example#1861 - oci_field_name の例
  • Example#1862 - oci_field_name の例
  • Example#1863 - oci_field_precision の例
  • Example#1864 - oci_field_scale の例
  • Example#1865 - oci_field_size の例
  • Example#1866 - oci_field_type の例
  • Example#1867 - oci_field_type_raw の例
  • Example#1868 - ループ内で暗黙の結果セットを取得
  • Example#1869 - 子ステートメントのハンドラをそれぞれ取得
  • Example#1870 - プリフェッチ数を明示的に設定
  • Example#1871 - oci_get_implicit_resultset を使用しない暗黙の結果セットの例
  • Example#1872 - oci_new_connect の例
  • Example#1873 - Oracle ストアドプロシージャにおける REF CURSOR のバインド
  • Example#1874 - oci_new_descriptor の例
  • Example#1875 - oci_new_descriptor の例
  • Example#1876 - oci_num_fields の例
  • Example#1877 - oci_num_rows の例
  • Example#1878 - oci_parse での SQL 文の例
  • Example#1879 - oci_parse での PL/SQL の例
  • Example#1880 - oci_password_change で、接続中のユーザーのパスワードを変更する例
  • Example#1881 - oci_password_change で、接続とパスワードの変更を一度に行う例
  • Example#1882 - Easy Connect 構文を使った oci_pconnect の例
  • Example#1883 - oci_fetch と oci_result を組み合わせる例
  • Example#1884 - oci_rollback の例
  • Example#1885 - SAVEPOINT へのロールバックの例
  • Example#1886 - oci_server_version の例
  • Example#1887 - アクションを設定する
  • Example#1888 - Setting the timeout
  • Example#1889 - クライアント識別子をアプリケーションのユーザーに設定する
  • Example#1890 - クライアント情報を設定する
  • Example#1891 - Setting the DBOP
  • Example#1892 - 異なるバージョンの myfunc() が利用できる例
  • Example#1893 - モジュール名を設定する
  • Example#1894 - クエリのデフォルトプリフェッチ値の変更
  • Example#1895 - REF CURSOR のデフォルトプリフェッチの変更
  • Example#1896 - REF CURSOR を Oracle に戻すときのプリフェッチの設定
  • Example#1897 - LOB のプリフェッチサイズをクエリ毎に変更する
  • Example#1898 - oci_statement_type の例
  • Example#1899 - PostgreSQL 拡張モジュールの概要
  • Example#1900 - PostgreSQL のユーザー定義関数の例
  • Example#1901 - pg_affected_rows の例
  • Example#1902 - pg_cancel_query の例
  • Example#1903 - pg_client_encoding の例
  • Example#1904 - pg_close の例
  • Example#1905 - pg_connect の使用法
  • Example#1906 - pg_connection_busy の例
  • Example#1907 - pg_connection_reset の例
  • Example#1908 - pg_connection_status の例
  • Example#1909 - pg_convert の例
  • Example#1910 - pg_copy_from の例
  • Example#1911 - pg_copy_to の例
  • Example#1912 - pg_dbname の例
  • Example#1913 - pg_delete の例
  • Example#1914 - pg_end_copy の例
  • Example#1915 - pg_escape_bytea の例
  • Example#1916 - pg_escape_identifier の例
  • Example#1917 - pg_escape_literal の例
  • Example#1918 - pg_escape_string の例
  • Example#1919 - pg_execute の使用法
  • Example#1920 - PostgreSQL fetch all
  • Example#1921 - pg_fetch_all_columns の例
  • Example#1922 - pg_fetch_array の例
  • Example#1923 - pg_fetch_assoc の例
  • Example#1924 - pg_fetch_object の例
  • Example#1925 - pg_fetch_result の例
  • Example#1926 - pg_fetch_row の例
  • Example#1927 - pg_field_is_null の例
  • Example#1928 - フィールド情報を取得する
  • Example#1929 - フィールドの情報を取得する
  • Example#1930 - フィールドの情報を取得する
  • Example#1931 - フィールドの情報を取得する
  • Example#1932 - フィールドについてのテーブル情報の取得
  • Example#1933 - フィールドの情報を取得する
  • Example#1934 - フィールドの情報を得る
  • Example#1935 - pg_free_result の例
  • Example#1936 - PostgreSQL NOTIFY メッセージ
  • Example#1937 - PostgreSQL バックエンドの PID
  • Example#1938 - pg_get_result の例
  • Example#1939 - pg_host の例
  • Example#1940 - pg_insert の例
  • Example#1941 - pg_last_error の例
  • Example#1942 - pg_last_notice の例
  • Example#1943 - pg_last_oid の例
  • Example#1944 - pg_lo_close example
  • Example#1945 - pg_lo_create の例
  • Example#1946 - pg_lo_export の例
  • Example#1947 - pg_lo_import の例
  • Example#1948 - pg_lo_open の例
  • Example#1949 - pg_lo_read の例
  • Example#1950 - pg_lo_read_all の例
  • Example#1951 - pg_lo_seek の例
  • Example#1952 - pg_lo_tell の例
  • Example#1953 - pg_lo_truncate の例
  • Example#1954 - pg_lo_unlink の例
  • Example#1955 - pg_lo_write の例
  • Example#1956 - テーブルのメタデータを得る
  • Example#1957 - pg_num_fields の例
  • Example#1958 - pg_num_rows の例
  • Example#1959 - pg_options の例
  • Example#1960 - pg_parameter_status の例
  • Example#1961 - pg_pconnect の使用法
  • Example#1962 - pg_ping の例
  • Example#1963 - pg_port の例
  • Example#1964 - pg_prepare の使用法
  • Example#1965 - pg_put_line の例
  • Example#1966 - pg_query の例
  • Example#1967 - pg_query で複数の文を使用する例
  • Example#1968 - pg_query_params の使用法
  • Example#1969 - pg_result_error の例
  • Example#1970 - pg_result_error_field の例
  • Example#1971 - pg_result_seek の例
  • Example#1972 - pg_result_status の例
  • Example#1973 - pg_select の例
  • Example#1974 - pg_send_execute の使用法
  • Example#1975 - pg_send_prepare の使用法
  • Example#1976 - pg_send_query の例
  • Example#1977 - pg_send_query_params の使用法
  • Example#1978 - pg_set_client_encoding の例
  • Example#1979 - pg_set_error_context_visibility の例
  • Example#1980 - pg_set_error_verbosity の例
  • Example#1981 - pg_trace の例
  • Example#1982 - pg_transaction_status の例
  • Example#1983 - pg_tty の例
  • Example#1984 - pg_unescape_bytea の例
  • Example#1985 - pg_untrace の例
  • Example#1986 - pg_update の例
  • Example#1987 - pg_version の例
  • Example#1988 - 既存のデータベースをバックアップする
  • Example#1989 - SQLite3::changes の例
  • Example#1990 - SQLite3::close の例
  • Example#1991 - SQLite3::__construct の例
  • Example#1992 - max_length 集約関数の例
  • Example#1993 - SQLite3::createCollation の例
  • Example#1994 - SQLite3::createFunction の例
  • Example#1995 - SQLite3::enableExceptions の例
  • Example#1996 - SQLite3::exec の例
  • Example#1997 - SQLite3::loadExtension の例
  • Example#1998 - SQLite3::open の例
  • Example#1999 - SQLite3::openBlob の例
  • Example#2000 - インクリメンタルにBLOBに書き込む
  • Example#2001 - SQLite3::prepare の例
  • Example#2002 - SQLite3::query の例
  • Example#2003 - SQLite3::querySingle の例
  • Example#2004 - SQLite3::setAuthorizer の例
  • Example#2005 - SQLite3::version の例
  • Example#2006 - SQLite3Stmt::bindParam の使い方
  • Example#2007 - SQLite3Stmt::bindValue の例
  • Example#2008 - 展開済みのSQLを調べる
  • Example#2009 - sqlsrv_begin_transaction example
  • Example#2010 - sqlsrv_cancel example
  • Example#2011 - sqlsrv_client_info example
  • Example#2012 - sqlsrv_close example
  • Example#2013 - sqlsrv_commit example
  • Example#2014 - Connect using Windows Authentication.
  • Example#2015 - Connect by specifying a user name and password.
  • Example#2016 - Connect on a specified port.
  • Example#2017 - functionname example
  • Example#2018 - sqlsrv_execute example
  • Example#2019 - sqlsrv_fetch example
  • Example#2020 - 連想配列を扱う場合の例
  • Example#2021 - 配列を扱う場合の例
  • Example#2022 - sqlsrv_fetch_object example
  • Example#2023 - sqlsrv_field_metadata example
  • Example#2024 - sqlsrv_free_stmt example
  • Example#2025 - sqlsrv_get_field example
  • Example#2026 - sqlsrv_has_rows example
  • Example#2027 - sqlsrv_next_result example
  • Example#2028 - sqlsrv_num_fields example
  • Example#2029 - sqlsrv_num_rows example
  • Example#2030 - sqlsrv_prepare example
  • Example#2031 - sqlsrv_query example
  • Example#2032 - sqlsrv_rollback example
  • Example#2033 - sqlsrv_rows_affected example
  • Example#2034 - sqlsrv_send_stream_data example
  • Example#2035 - sqlsrv_server_info example
  • Example#2036 - cal_days_in_month の例
  • Example#2037 - cal_from_jd の例
  • Example#2038 - cal_info の例
  • Example#2039 - easter_date の例
  • Example#2040 - easter_date を DateTime と一緒に使う
  • Example#2041 - easter_days の例
  • Example#2042 - カレンダー関数
  • Example#2043 - Overflow behavior
  • Example#2044 - jdtojewish の例
  • Example#2045 - DateTimeImmutable::add/sub は、経過時間を含む区間を足してしまう
  • Example#2046 - DateTimeImmutable::modify と strtotime を使い、個々のコンポーネントの値をインクリメント/デクリメントする
  • Example#2047 - 時刻を引き算すると、日付がオーバー/アンダーフローする可能性がある
  • Example#2048 - 変更可能な日付オブジェクトを作る
  • Example#2049 - 変更可能な DateTime オブジェクトを作る
  • Example#2050 - DateTime::modify の例
  • Example#2051 - 月の加減算には注意
  • Example#2052 - 全ての日付と時刻のフォーマットがサポートされています
  • Example#2053 - DateTime::setTimeZone の例
  • Example#2054 - DateTimeImmutable::add の例
  • Example#2055 - DateTimeImmutable::add の高度な例
  • Example#2056 - 月を足す場合は注意
  • Example#2057 - DateTimeImmutable::__construct の例
  • Example#2058 - DateTimeImmutable::__construct の複雑な例
  • Example#2059 - 関連付けられたタイムゾーンを変更する
  • Example#2060 - 相対日付/時刻 の文字列を使う
  • Example#2061 - DateTimeImmutable::createFromFormat の例
  • Example#2062 - 定義済みのフォーマットの定数を DateTimeImmutable::createFromFormat で使う
  • Example#2063 - DateTimeImmutable::createFromFormat の複雑な例
  • Example#2064 - リテラル文字を含む書式文字列
  • Example#2065 - オーバーフローした際のふるまい
  • Example#2066 - 曜日がオーバーフローした場合のふるまい
  • Example#2067 - オーバーフローした日付を検出する
  • Example#2068 - 貪欲なパースの振る舞い
  • Example#2069 - DateTimeImmutable オブジェクトを作る
  • Example#2070 - 変更不能な日付オブジェクトを作る
  • Example#2071 - DateTimeImmutable::getLastErrors の例
  • Example#2072 - DateTimeImmutable::modify の例
  • Example#2073 - 月の加減算には注意
  • Example#2074 - DateTimeImmutable::setDate の例
  • Example#2075 - 範囲を超えた値が親の値に加算される例
  • Example#2076 - DateTimeImmutable::setISODate の例
  • Example#2077 - 範囲を超えた値が親の値に加算される例
  • Example#2078 - その週が存在する月を探す例
  • Example#2079 - DateTimeImmutable::setTime の例
  • Example#2080 - 範囲を超えた値が親の値に加算される例
  • Example#2081 - DateTimeImmutable::setTimestamp の例
  • Example#2082 - DateTimeImmutable::setTimeZone の例
  • Example#2083 - DateTimeImmutable::sub の例
  • Example#2084 - DateTimeImmutable::sub の別な例
  • Example#2085 - 月を減算する際は注意
  • Example#2086 - DateTimeImmutable::diff の例
  • Example#2087 - 夏時間の切り替え期間中の DateTimeInterface::diff の動き
  • Example#2088 - DateTimeInterface::diff range
  • Example#2089 - DateTime オブジェクトの比較
  • Example#2090 - DateTimeInterface::format の例
  • Example#2091 - 例をもう少し
  • Example#2092 - フォーマット中に文字をエスケープする
  • Example#2093 - DateTime::getOffset の例
  • Example#2094 - DateTime::getTimestamp の例
  • Example#2095 - ミリ秒とマイクロ秒の精度でタイムスタンプを取得する
  • Example#2096 - DateTime::getTimezone の例
  • Example#2097 - DateTimeZone を作成し、DateTimeImmutable に設定する
  • Example#2098 - DateTimeZone のインスタンスを作成する際のエラー処理
  • Example#2099 - DateTimeZone::getLocation の例
  • Example#2100 - DateTimeZone::getOffset の例
  • Example#2101 - timezone_transitions_get の例
  • Example#2102 - timestampBegin を設定して timezone_transitions_get を使う例
  • Example#2103 - timezone_abbreviations_list の例
  • Example#2104 - DateTimeZone::listIdentifiers の例
  • Example#2105 - 特定の地域を指定して、識別子の一覧を取得する
  • Example#2106 - 複数の地域を指定して、識別子の一覧を取得する
  • Example#2107 - 特定の国をひとつ指定して、識別子の一覧を取得する
  • Example#2108 - DateInterval オブジェクトを作成して使う例
  • Example#2109 - DateInterval の例
  • Example#2110 - 日付の間隔のパース
  • Example#2111 - パース処理の組み合わせと、負の間隔
  • Example#2112 - 特別な相対書式の間隔をパースする
  • Example#2113 - DateInterval の例
  • Example#2114 - DateInterval での繰り越しの例
  • Example#2115 - DateInterval および DateTime::diff での修飾子 %a および %d
  • Example#2116 - DatePeriod の例
  • Example#2117 - DatePeriod で DatePeriod::EXCLUDE_START_DATE を使う例
  • Example#2118 - 一年間に含まれる、月の最後の木曜日を全て表示する、DatePeriod の例
  • Example#2119 - DatePeriod::createFromISO8601String の例
  • Example#2120 - DatePeriod::getDateInterval の例
  • Example#2121 - DatePeriod::getEndDate の例
  • Example#2122 - 終了日のない DatePeriod::getEndDate
  • Example#2123 - DatePeriod::getRecurrences が異なる値を返す例
  • Example#2124 - DatePeriod::getStartDate の例
  • Example#2125 - checkdate の例
  • Example#2126 - date の例
  • Example#2127 - date の文字をエスケープする
  • Example#2128 - date と mktime の例
  • Example#2129 - date のフォーマット指定
  • Example#2130 - デフォルトのタイムゾーンの取得
  • Example#2131 - タイムゾーンの短縮名の取得
  • Example#2132 - デフォルトのタイムゾーンの取得
  • Example#2133 - datetime に包括的な情報を指定した date_parse の例
  • Example#2134 - タイムゾーンの省略形を与えた場合の date_parse の例
  • Example#2135 - タイムゾーン情報を与えた date_parse の例
  • Example#2136 - 最低限の文字列だけを与えた date_parse の例
  • Example#2137 - "relative" フォーマットを使った date_parse の例
  • Example#2138 - date_parse の副作用
  • Example#2139 - date_parse_from_format の例
  • Example#2140 - date_parse_from_format の結果に警告が含まれる例
  • Example#2141 - date_parse_from_format の結果にエラーが含まれる例
  • Example#2142 - date_sun_info の例
  • Example#2143 - 極夜のデータに処理を少し行う例
  • Example#2144 - Midnight sun の例(Tromsø, Norway)
  • Example#2145 - 一日の長さを計算する例 (Kyiv)
  • Example#2146 - date_sunrise の例
  • Example#2147 - No sunrise
  • Example#2148 - date_sunset の例
  • Example#2149 - No sunset
  • Example#2150 - getdate の例
  • Example#2151 - gettimeofday の例
  • Example#2152 - gmdate の例
  • Example#2153 - gmmktime の基本的な例
  • Example#2154 - gmstrftime の例
  • Example#2155 - idate の例
  • Example#2156 - time の例
  • Example#2157 - タイマスクリプト実行
  • Example#2158 - microtime と REQUEST_TIME_FLOAT の例
  • Example#2159 - mktime の基本的な例
  • Example#2160 - mktime の例
  • Example#2161 - 月の末日
  • Example#2162 - strftime のロケールの例
  • Example#2163 - ISO 8601:1988 の週番号の例
  • Example#2164 - %e 修飾子を使う、クロスプラットフォーム対応の例
  • Example#2165 - すべての書式の表示
  • Example#2166 - strptime の例
  • Example#2167 - strtotime の例
  • Example#2168 - 失敗のチェック
  • Example#2169 - time の例
  • Example#2170 - timezone_name_from_abbr の例
  • Example#2171 - timezonedb のバージョンの取得
  • Example#2172 - Measure several code blocks execution and get the total
  • Example#2173 - 開いているファイル記述子を閉じる
  • Example#2174 - ロックの設定と解除
  • Example#2175 - ファイル記述子をオープンする
  • Example#2176 - ファイル内の位置の指定
  • Example#2177 - シリアルポートのボーレートを設定する
  • Example#2178 - chdir の例
  • Example#2179 - chroot の例
  • Example#2180 - closedir の例
  • Example#2181 - dir の例
  • Example#2182 - getcwd の例
  • Example#2183 - opendir の例
  • Example#2184 - ディレクトリ内の全てのエントリのリストを得る
  • Example#2185 - カレントディレクトリの全てのエントリを一覧する。ただし . および .. は取り除く
  • Example#2186 - scandir の簡単な例
  • Example#2187 - finfo_buffer の例
  • Example#2188 - finfo_file の例
  • Example#2189 - オブジェクト指向型
  • Example#2190 - 手続き型
  • Example#2191 - mime_content_type の例
  • Example#2192 - basename の例
  • Example#2193 - ファイルのグループの変更
  • Example#2194 - シンプルな chown の例
  • Example#2195 - clearstatcache の例
  • Example#2196 - copy の例
  • Example#2197 - dirname の例
  • Example#2198 - disk_free_space の例
  • Example#2199 - disk_total_space の例
  • Example#2200 - シンプルな fclose の例
  • Example#2201 - fdatasync の例
  • Example#2202 - feof のタイムアウト処理
  • Example#2203 - feof に無効なファイルポインタを使用する例
  • Example#2204 - fflush を使用するファイル書き込みの例
  • Example#2205 - fgetc の例
  • Example#2206 - CSV ファイルの全てのコンテンツを読み込み、表示する
  • Example#2207 - 行毎にファイルを読み込む
  • Example#2208 - PHP ファイルの 1 行ごとの読み込み
  • Example#2209 - file の例
  • Example#2210 - あるファイルが存在するかどうか調べる
  • Example#2211 - とあるウェブサイトのホームページのソースの取得と出力
  • Example#2212 - include_path の検索
  • Example#2213 - ファイルの一部の読み込み
  • Example#2214 - ストリームコンテキストの使用
  • Example#2215 - シンプルな使用例
  • Example#2216 - フラグの使用
  • Example#2217 - fileatime の例
  • Example#2218 - filectime の例
  • Example#2219 - ファイルのグループの取得
  • Example#2220 - 現在のファイルとのファイルの inode の比較
  • Example#2221 - filemtime の例
  • Example#2222 - ファイルの所有者の取得
  • Example#2223 - 八進形式でのパーミッションの表示
  • Example#2224 - 完全なパーミッションの表示
  • Example#2225 - filesize の例
  • Example#2226 - filetype の例
  • Example#2227 - flock の例
  • Example#2228 - flock で LOCK_NB オプションを使う例
  • Example#2229 - シェルのワイルドカードパターンによる色の名前のチェック
  • Example#2230 - fopen の例
  • Example#2231 - バイナリファイルに対する fpassthru の使用例
  • Example#2232 - fputcsv の例
  • Example#2233 - シンプルな fread の例
  • Example#2234 - バイナリの fread の例
  • Example#2235 - リモートファイルの fread の例
  • Example#2236 - fscanf の例
  • Example#2237 - users.txt の内容
  • Example#2238 - fseek の例
  • Example#2239 - fstat の例
  • Example#2240 - fsync の例
  • Example#2241 - ftell の例
  • Example#2242 - ファイルの丸めの例
  • Example#2243 - 簡単な fwrite の例
  • Example#2244 - glob が opendir と関連する関数群の代替策になるかを示す簡便な方法
  • Example#2245 - is_dir の例
  • Example#2246 - is_executable の例
  • Example#2247 - is_file の例
  • Example#2248 - シンボリックリンクの作成と、ファイルがシンボリックリンクかどうかの確認
  • Example#2249 - is_readable の例
  • Example#2250 - is_uploaded_file の例
  • Example#2251 - is_writable の例
  • Example#2252 - シンボリックリンクのグループの変更
  • Example#2253 - シンボリックリンクの所有者の変更
  • Example#2254 - シンプルなハードリンクの作成
  • Example#2255 - linkinfo の例
  • Example#2256 - stat と lstat の比較
  • Example#2257 - mkdir の例
  • Example#2258 - mkdir での recursive パラメータの使用例
  • Example#2259 - 複数のファイルのアップロード
  • Example#2260 - sample.ini の内容
  • Example#2261 - parse_ini_file の例
  • Example#2262 - parse_ini_file による php.ini ファイルのパース
  • Example#2263 - ini ファイルの値の補完
  • Example#2264 - 文字をエスケープする
  • Example#2265 - pathinfo の例
  • Example#2266 - pathinfo での、拡張子を空にしたときと拡張子がないときの違いの例
  • Example#2267 - pathinfo での、ドットファイルの例
  • Example#2268 - 配列の分解機能を、pathinfo と一緒に使う例
  • Example#2269 - pclose の例
  • Example#2270 - popen の例
  • Example#2271 - popen の例
  • Example#2272 - readfile によるダウンロードの強制
  • Example#2273 - readlink の例
  • Example#2274 - realpath の例
  • Example#2275 - Windows 上での realpath
  • Example#2276 - realpath_cache_get 例
  • Example#2277 - realpath_cache_size 例
  • Example#2278 - rename の例
  • Example#2279 - rewind での上書きの例
  • Example#2280 - rmdir の例
  • Example#2281 - stat の例
  • Example#2282 - stat の情報を touch と組み合わせる例
  • Example#2283 - シンボリックリンクの作成
  • Example#2284 - tempnam の例
  • Example#2285 - tmpfile の例
  • Example#2286 - touch の例
  • Example#2287 - touch で mtime パラメータを使用する例
  • Example#2288 - umask の例
  • Example#2289 - 基本的な unlink の使用法
  • Example#2290 - inotify の使用例
  • Example#2291 - システム管理者がファイルに署名をしているかどうかを調べる
  • Example#2292 - ファイルのすべての拡張属性の名前を表示する
  • Example#2293 - ファイルのすべての拡張属性を削除する
  • Example#2294 - .wav ファイルに拡張属性を設定する
  • Example#2295 - xattr_supported の例
  • Example#2296 - xdiff_file_bdiff の例
  • Example#2297 - xdiff_file_bdiff_size の例
  • Example#2298 - xdiff_file_bpatch の例
  • Example#2299 - xdiff_file_diff の例
  • Example#2300 - xdiff_file_diff_binary の例
  • Example#2301 - xdiff_file_merge3 の例
  • Example#2302 - xdiff_file_patch の例
  • Example#2303 - 逆パッチの例
  • Example#2304 - xdiff_file_patch_binary の例
  • Example#2305 - xdiff_file_rabdiff の例
  • Example#2306 - xdiff_string_bdiff_size の例
  • Example#2307 - xdiff_string_diff の例
  • Example#2308 - xdiff_string_patch の例
  • Example#2309 - Enchant の使用例
  • Example#2310 - 指定したブローカーが提供するバックエンドの一覧
  • Example#2311 - enchant_broker_dict_exists の例
  • Example#2312 - あるブローカーで使用可能なすべての辞書を表示する
  • Example#2313 - enchant_broker_request_dict の例
  • Example#2314 - 辞書リストに単語を追加する
  • Example#2315 - enchant_broker_dict_describe の例
  • Example#2316 - enchant_dict_quick_check の例
  • Example#2317 - enchant_dict_suggest の例
  • Example#2318 - 利用例
  • Example#2319 - Gender\Gender::country の使用例
  • Example#2320 - bindtextdomain の例
  • Example#2321 - gettext のチェック
  • Example#2322 - ngettext の例
  • Example#2323 - iconv の例
  • Example#2324 - iconv_get_encoding の例
  • Example#2325 - iconv_mime_decode の例
  • Example#2326 - iconv_mime_decode_headers の例
  • Example#2327 - iconv_mime_encode の例:
  • Example#2328 - iconv_set_encoding の例
  • Example#2329 - ob_iconv_handler の例
  • Example#2330 - 手続き型 API の使用例
  • Example#2331 - オブジェクト指向型 API の使用例
  • Example#2332 - FRENCH_COLLATION のルール
  • Example#2333 - ALTERNATE_HANDLING のルール
  • Example#2334 - CASE_FIRST のルール
  • Example#2335 - CASE_LEVEL のルール
  • Example#2336 - collator_asort の例
  • Example#2337 - collator_compare の例
  • Example#2338 - ダイアクリティカルマークや、大文字小文字の区別を無視して比較する
  • Example#2339 - Collator::__construct の例
  • Example#2340 - collator_create の例
  • Example#2341 - collator_get_attribute の例
  • Example#2342 - collator_get_error_code の例
  • Example#2343 - collator_get_error_message の例
  • Example#2344 - collator_get_locale の例
  • Example#2345 - collator_get_sort_key の例
  • Example#2346 - collator_get_strength の例
  • Example#2347 - collator_set_attribute の例
  • Example#2348 - collator_set_strength の例
  • Example#2349 - collator_sort の例
  • Example#2350 - collator_sort_with_sort_keys の例
  • Example#2351 - numfmt_create の例
  • Example#2352 - NumberFormatter::create の例
  • Example#2353 - numfmt_format の例
  • Example#2354 - オブジェクト指向の例
  • Example#2355 - numfmt_format_currency の例
  • Example#2356 - オブジェクト指向の例
  • Example#2357 - numfmt_get_attribute の例
  • Example#2358 - オブジェクト指向の例
  • Example#2359 - numfmt_get_error_code の例
  • Example#2360 - オブジェクト指向の例
  • Example#2361 - numfmt_get_error_message の例
  • Example#2362 - オブジェクト指向の例
  • Example#2363 - numfmt_get_locale の例
  • Example#2364 - numfmt_get_pattern の例
  • Example#2365 - オブジェクト指向の例
  • Example#2366 - numfmt_get_symbol の例
  • Example#2367 - オブジェクト指向の例
  • Example#2368 - numfmt_get_text_attribute の例
  • Example#2369 - オブジェクト指向の例
  • Example#2370 - numfmt_parse の例
  • Example#2371 - オブジェクト指向の例
  • Example#2372 - numfmt_parse_currency の例
  • Example#2373 - オブジェクト指向の例
  • Example#2374 - numfmt_set_attribute の例
  • Example#2375 - オブジェクト指向の例
  • Example#2376 - numfmt_set_pattern の例
  • Example#2377 - オブジェクト指向の例
  • Example#2378 - numfmt_set_symbol の例
  • Example#2379 - オブジェクト指向の例
  • Example#2380 - numfmt_set_text_attribute の例
  • Example#2381 - オブジェクト指向の例
  • Example#2382 - locale_accept_from_http の例
  • Example#2383 - オブジェクト指向の例
  • Example#2384 - locale_compose の例
  • Example#2385 - オブジェクト指向の例
  • Example#2386 - サブタグの制限
  • Example#2387 - locale_filter_matches の例
  • Example#2388 - オブジェクト指向の例
  • Example#2389 - locale_get_all_variants の例
  • Example#2390 - オブジェクト指向の例
  • Example#2391 - locale_get_default の例
  • Example#2392 - オブジェクト指向の例
  • Example#2393 - locale_get_display_language の例
  • Example#2394 - オブジェクト指向の例
  • Example#2395 - locale_get_display_name の例
  • Example#2396 - オブジェクト指向の例
  • Example#2397 - locale_get_display_region の例
  • Example#2398 - オブジェクト指向の例
  • Example#2399 - locale_get_display_script の例
  • Example#2400 - オブジェクト指向の例
  • Example#2401 - locale_get_display_variant の例
  • Example#2402 - オブジェクト指向の例
  • Example#2403 - locale_get_keywords の例
  • Example#2404 - オブジェクト指向の例
  • Example#2405 - locale_get_primary_language の例
  • Example#2406 - オブジェクト指向の例
  • Example#2407 - locale_get_region の例
  • Example#2408 - オブジェクト指向の例
  • Example#2409 - locale_get_script の例
  • Example#2410 - オブジェクト指向の例
  • Example#2411 - locale_lookup の例
  • Example#2412 - オブジェクト指向の例
  • Example#2413 - locale_parse の例
  • Example#2414 - オブジェクト指向の例
  • Example#2415 - locale_set_default の例
  • Example#2416 - オブジェクト指向の例
  • Example#2417 - Normalizer::getRawDecomposition の例
  • Example#2418 - normalizer_is_normalized の例
  • Example#2419 - オブジェクト指向の例
  • Example#2420 - normalizer_normalize の例
  • Example#2421 - オブジェクト指向の例
  • Example#2422 - msgfmt_create の例
  • Example#2423 - オブジェクト指向の例
  • Example#2424 - msgfmt_format の例
  • Example#2425 - オブジェクト指向の例
  • Example#2426 - msgfmt_format_message の例
  • Example#2427 - オブジェクト指向の例
  • Example#2428 - 通常の通貨記号と、短い形式の通貨記号を使ってフォーマットするよう、ICU に指示する
  • Example#2429 - msgfmt_get_error_message の例
  • Example#2430 - オブジェクト指向の例
  • Example#2431 - msgfmt_get_locale の例
  • Example#2432 - オブジェクト指向の例
  • Example#2433 - msgfmt_get_pattern の例
  • Example#2434 - オブジェクト指向の例
  • Example#2435 - msgfmt_parse の例
  • Example#2436 - オブジェクト指向の例
  • Example#2437 - msgfmt_parse_message の例
  • Example#2438 - オブジェクト指向の例
  • Example#2439 - msgfmt_set_pattern の例
  • Example#2440 - オブジェクト指向の例
  • Example#2441 - IntlCalendar::add
  • Example#2442 - IntlCalendar::after
  • Example#2443 - IntlCalendar::clear の例
  • Example#2444 - IntlCalendar::createInstance
  • Example#2445 - IntlCalendar::equals
  • Example#2446 - IntlCalendar::fieldDifference
  • Example#2447 - IntlCalendar::fromDateTime
  • Example#2448 - IntlCalendar::get
  • Example#2449 - IntlCalendar::getActualMaximum
  • Example#2450 - IntlCalendar::getAvailableLocales
  • Example#2451 - IntlCalendar::getDayOfWeekType
  • Example#2452 - IntlCalendar::getErrorCode と IntlCalendar::getErrorMessage の例
  • Example#2453 - IntlCalendar::getErrorMessage
  • Example#2454 - IntlCalendar::getFirstDayOfWeek
  • Example#2455 - IntlCalendar::getKeyworkValuesForLocale
  • Example#2456 - Maxima examples
  • Example#2457 - IntlCalendar::getLocale
  • Example#2458 - IntlCalendar::getMinimalDaysInFirstWeek
  • Example#2459 - IntlCalendar::getNow
  • Example#2460 - IntlCalendar::getRepeatedWallTimeOption
  • Example#2461 - IntlCalendar::getSkippedWallTimeOption
  • Example#2462 - IntlCalendar::getTime
  • Example#2463 - IntlCalendar::getTimeZone
  • Example#2464 - IntlCalendar::getType
  • Example#2465 - IntlCalendar::inDaylightTime
  • Example#2466 - IntlCalendar::isEquivalentTo
  • Example#2467 - IntlCalendar::isLenient
  • Example#2468 - IntlCalendar::isWeekend
  • Example#2469 - IntlCalendar::roll
  • Example#2470 - IntlCalendar::set
  • Example#2471 - IntlCalendar::setDate の例
  • Example#2472 - IntlCalendar::setDateTime の例
  • Example#2473 - IntlCalendar::setFirstDayOfWeek
  • Example#2474 - IntlCalendar::setTime
  • Example#2475 - IntlCalendar::setTimeZone
  • Example#2476 - IntlCalendar::toDateTime
  • Example#2477 - IntlGregorianCalendar::createFromDate の例
  • Example#2478 - IntlGregorianCalendar::createFromDateTime の例
  • Example#2479 - datefmt_create の例
  • Example#2480 - オブジェクト指向の例
  • Example#2481 - 無効なロケールを処理する例
  • Example#2482 - datefmt_format の例
  • Example#2483 - オブジェクト指向の例
  • Example#2484 - IntlCalendar オブジェクトを使う例
  • Example#2485 - IntlDateFormatter::formatObject の例
  • Example#2486 - datefmt_get_calendar の例
  • Example#2487 - オブジェクト指向の例
  • Example#2488 - 無効なロケールを処理する例
  • Example#2489 - datefmt_get_datetype の例
  • Example#2490 - オブジェクト指向の例
  • Example#2491 - datefmt_get_error_code の例
  • Example#2492 - オブジェクト指向の例
  • Example#2493 - datefmt_get_error_message の例
  • Example#2494 - オブジェクト指向の例
  • Example#2495 - datefmt_get_locale の例
  • Example#2496 - オブジェクト指向の例
  • Example#2497 - datefmt_get_pattern の例
  • Example#2498 - オブジェクト指向の例
  • Example#2499 - datefmt_get_timetype の例
  • Example#2500 - オブジェクト指向の例
  • Example#2501 - datefmt_get_timezone_id の例
  • Example#2502 - オブジェクト指向の例
  • Example#2503 - IntlDateFormatter::getCalendarObject の例
  • Example#2504 - IntlDateFormatter::getTimeZone の例
  • Example#2505 - datefmt_is_lenient の例
  • Example#2506 - オブジェクト指向の例
  • Example#2507 - datefmt_localtime の例
  • Example#2508 - オブジェクト指向の例
  • Example#2509 - オブジェクト指向の例
  • Example#2510 - datefmt_parse の例
  • Example#2511 - datefmt_set_calendar の例
  • Example#2512 - オブジェクト指向の例
  • Example#2513 - 引数に IntlCalendar を使う例
  • Example#2514 - datefmt_set_lenient の例
  • Example#2515 - オブジェクト指向の例
  • Example#2516 - datefmt_set_pattern の例
  • Example#2517 - オブジェクト指向の例
  • Example#2518 - IntlDateFormatter::setTimeZone の例
  • Example#2519 - resourcebundle_count の例
  • Example#2520 - オブジェクト指向の例
  • Example#2521 - resourcebundle_create の例
  • Example#2522 - ResourceBundle::create の例
  • Example#2523 - resourcebundle_get の例
  • Example#2524 - オブジェクト指向の例
  • Example#2525 - resourcebundle_get_error_code の例
  • Example#2526 - オブジェクト指向の例
  • Example#2527 - resourcebundle_get_error_message の例
  • Example#2528 - オブジェクト指向の例
  • Example#2529 - resourcebundle_locales の例
  • Example#2530 - オブジェクト指向の例
  • Example#2531 - Spoofchecker::areConfusable の例
  • Example#2532 - Spoofchecker::isSuspicious の例
  • Example#2533 - 登録済みの transliterator ID を取得する
  • Example#2534 - エスケープされた UTF-16 コード単位の変換
  • Example#2535 - IntlDatePatternGenerator::getBestPattern の例
  • Example#2536 - UTF-8 から UTF-16 に変換し、UTF-8 に戻す例
  • Example#2537 - 入力に不正な文字が含まれていた場合
  • Example#2538 - エンコードできない文字
  • Example#2539 - grapheme_extract の例
  • Example#2540 - grapheme_stripos の例
  • Example#2541 - grapheme_stristr の例
  • Example#2542 - grapheme_strlen の例
  • Example#2543 - grapheme_strpos example
  • Example#2544 - grapheme_strripos の例
  • Example#2545 - grapheme_strrpos example
  • Example#2546 - grapheme_strstr の例
  • Example#2547 - grapheme_substr の例
  • Example#2548 - idn_to_ascii の例
  • Example#2549 - idn_to_utf8 の例
  • Example#2550 - さまざまなコードポイントの例
  • Example#2551 - さまざまなコードポイントの例
  • Example#2552 - さまざまなコードポイントの例
  • Example#2553 - さまざまなコードポイントの例
  • Example#2554 - さまざまなコードポイントの例
  • Example#2555 - さまざまなコードポイントの例
  • Example#2556 - さまざまなコードポイントの例
  • Example#2557 - さまざまなコードポイントの例
  • Example#2558 - さまざまなコードポイントの例
  • Example#2559 - サンプルの範囲に入るコードポイントを走査する例
  • Example#2560 - サンプルのコードポイントの範囲を走査する
  • Example#2561 - さまざまなコードポイントの例
  • Example#2562 - さまざまなコードポイントの例
  • Example#2563 - さまざまなコードポイントの例
  • Example#2564 - さまざまなコードポイントの例
  • Example#2565 - さまざまなコードポイントの例
  • Example#2566 - さまざまなプロパティの例
  • Example#2567 - さまざまなプロパティの例
  • Example#2568 - さまざまなプロパティの例
  • Example#2569 - さまざまなコードポイントの例
  • Example#2570 - さまざまなプロパティの例
  • Example#2571 - さまざまなプロパティの例
  • Example#2572 - さまざまなプロパティの例
  • Example#2573 - さまざまなプロパティの例
  • Example#2574 - さまざまなプロパティの例
  • Example#2575 - さまざまなプロパティの例
  • Example#2576 - さまざまなコードポイントの例
  • Example#2577 - さまざまなコードポイントの例
  • Example#2578 - さまざまなコードポイントの例
  • Example#2579 - さまざまなコードポイントの例
  • Example#2580 - さまざまなコードポイントの例
  • Example#2581 - さまざまなコードポイントの例
  • Example#2582 - さまざまなコードポイントの例
  • Example#2583 - さまざまなコードポイントの例
  • Example#2584 - さまざまなコードポイントの例
  • Example#2585 - さまざまなコードポイントの例
  • Example#2586 - さまざまなコードポイントの例
  • Example#2587 - さまざまなコードポイントの例
  • Example#2588 - さまざまなコードポイントの例
  • Example#2589 - さまざまなコードポイントの例
  • Example#2590 - さまざまなコードポイントの例
  • Example#2591 - さまざまなコードポイントの例
  • Example#2592 - さまざまなコードポイントの例
  • Example#2593 - さまざまなコードポイントの例
  • Example#2594 - さまざまなコードポイントの例
  • Example#2595 - さまざまなコードポイントの例
  • Example#2596 - さまざまなコードポイントの例
  • Example#2597 - さまざまなコードポイントの例
  • Example#2598 - さまざまなコードポイントの例
  • Example#2599 - さまざまなコードポイントの例
  • Example#2600 - さまざまなコードポイントの例
  • Example#2601 - さまざまなコードポイントの例
  • Example#2602 - さまざまなコードポイントの例
  • Example#2603 - さまざまなコードポイントの例
  • Example#2604 - さまざまなコードポイントの例
  • Example#2605 - さまざまなコードポイントの例
  • Example#2606 - さまざまなコードポイントの例
  • Example#2607 - さまざまなコードポイントの例
  • Example#2608 - intl_error_name の例
  • Example#2609 - intl_get_error_code の例
  • Example#2610 - intl_get_error_message の例
  • Example#2611 - intl_is_failure example
  • Example#2612 - php.ini 設定の例
  • Example#2613 - EUC-JP ユーザー用の php.ini の設定
  • Example#2614 - SJIS ユーザー用の php.iniの 設定
  • Example#2615 - php.ini で HTTP 入力変換を無効にする
  • Example#2616 - php.ini の設定例
  • Example#2617 - スクリプトの例
  • Example#2618 - さまざまなコードポイントの例
  • Example#2619 - mb_convert_case の例
  • Example#2620 - 非ラテン UTF-8 テキストでの mb_convert_case の例
  • Example#2621 - mb_convert_encoding の例
  • Example#2622 - mb_convert_kana の例
  • Example#2623 - mb_convert_variables の例
  • Example#2624 - map の例
  • Example#2625 - map を使って JavaScript の文字列をエスケープする例
  • Example#2626 - mb_detect_encoding の例
  • Example#2627 - strict パラメーターの効果
  • Example#2628 - 複数のエンコーディングと一致した場合の効果
  • Example#2629 - mb_detect_order の例
  • Example#2630 - 無意味な順番の例
  • Example#2631 - mb_encode_mimeheader の例
  • Example#2632 - map の例
  • Example#2633 - mb_encode_numericentity の例
  • Example#2634 - mb_encoding_aliases 例
  • Example#2635 - mb_ereg_replace_callback の例
  • Example#2636 - 匿名関数を使用したmb_ereg_replace_callbackの例
  • Example#2637 - mb_internal_encoding の例
  • Example#2638 - mb_list_encodings の例
  • Example#2639 - A basic mb_ord example
  • Example#2640 - mb_output_handler の例
  • Example#2641 - mb_preferred_mime_name の例
  • Example#2642 - mb_str_pad の例
  • Example#2643 - mb_strimwidth の例
  • Example#2644 - mb_strtolower の例
  • Example#2645 - 非ラテン UTF-8 テキストでの mb_strtolower の例
  • Example#2646 - mb_strtoupper の例
  • Example#2647 - 非ラテン UTF-8 テキストでの mb_strtoupper の例
  • Example#2648 - mb_strwidth example
  • Example#2649 - mb_substitute_character の例
  • Example#2650 - mb_substr_count の例
  • Example#2651 - pspell_add_to_personal
  • Example#2652 - pspell_check の例
  • Example#2653 - pspell_add_to_personal の例
  • Example#2654 - pspell_config_create
  • Example#2655 - pspell_config_ignore
  • Example#2656 - pspell_config_mode の例
  • Example#2657 - pspell_config_personal
  • Example#2658 - pspell_config_repl
  • Example#2659 - pspell_config_runtogether
  • Example#2660 - pspell_new
  • Example#2661 - pspell_new_config
  • Example#2662 - pspell_new_personal
  • Example#2663 - pspell_add_to_personal
  • Example#2664 - pspell_store_replacement
  • Example#2665 - pspell_suggest の例
  • Example#2666 - 基本的な recode_file の例
  • Example#2667 - 基本的な recode_string の例
  • Example#2668 - exif_imagetype の例
  • Example#2669 - exif_read_data の例
  • Example#2670 - PHP 7.2.0 で利用できるストリームを exif_read_data で使う例
  • Example#2671 - exif_tagname の例
  • Example#2672 - exif_thumbnail の例
  • Example#2673 - PHP による PNG の生成
  • Example#2674 - アルファチャネルを使用した、画像へのすかしの追加
  • Example#2675 - imagecopymerge による半透明なすかしの作成
  • Example#2676 - gd_info の使用法
  • Example#2677 - getimagesize および MIME 型
  • Example#2678 - getimagesize の例
  • Example#2679 - getimagesize (URL)
  • Example#2680 - IPTC を返す getimagesize()
  • Example#2681 - getimagesizefromstring の例
  • Example#2682 - image_type_to_extension の例
  • Example#2683 - image_type_to_mime_type の例
  • Example#2684 - image2wbmp の例
  • Example#2685 - imageaffinematrixconcat の例
  • Example#2686 - imageaffinematrixget の例
  • Example#2687 - imagealphablending の使用例
  • Example#2688 - 2 本の直線のうち一方にアンチエイリアスを有効にする
  • Example#2689 - imagearc による円の描画
  • Example#2690 - ビットマップファイルを保存する
  • Example#2691 - imagechar の例
  • Example#2692 - imagecharup の例
  • Example#2693 - imagecolorallocate の例
  • Example#2694 - imagecolorallocatealpha の使用例
  • Example#2695 - imagecolorallocatealpha 関数を使い、典型的なアルファ値を変換する
  • Example#2696 - 個々の RGB 値へのアクセス
  • Example#2697 - imagecolorsforindex による可読形式の RGB 値
  • Example#2698 - 画像内での色セットの検索
  • Example#2699 - 画像内での色セットの検索
  • Example#2700 - imagecolorclosesthwb の使用例
  • Example#2701 - imagecolordeallocate の使用法
  • Example#2702 - GD ロゴからの色の取得
  • Example#2703 - GD ロゴからの色の取得
  • Example#2704 - imagecolormatch の例
  • Example#2705 - imagecoloresolve による画像からの色の取得
  • Example#2706 - imagecoloresolvealpha による画像からの色の取得
  • Example#2707 - imagecolorset の例
  • Example#2708 - imagecolorsforindex の例
  • Example#2709 - imagecolorstotal による画像の色の総数の取得
  • Example#2710 - imagecolortransparent の例
  • Example#2711 - PHP.net ロゴのエンボス加工
  • Example#2712 - ガウス分布のぼかし
  • Example#2713 - PHP.net のロゴの切り取り
  • Example#2714 - 2 つの PHP.net ロゴを 75% の透過度でマージ
  • Example#2715 - imagecopymergegray の使用法
  • Example#2716 - 単純な例
  • Example#2717 - イメージを均等に再サンプルする
  • Example#2718 - イメージをリサイズする
  • Example#2719 - 新しい GD 画像ストリームの作成および画像の出力
  • Example#2720 - imagecreatefrombmp を使用した BMP 画像から PNG 画像への変換
  • Example#2721 - imagecreatefromgd の例
  • Example#2722 - imagecreatefromgd2 の例
  • Example#2723 - imagecreatefromgd2part の例
  • Example#2724 - GIF の作成時のエラーを処理する例
  • Example#2725 - JPEG の作成時のエラーを処理する例
  • Example#2726 - PNG の作成時のエラーを処理する例
  • Example#2727 - imagecreatefromstring の例
  • Example#2728 - WBMP の作成時のエラーを処理する例
  • Example#2729 - imagecreatefromwebp を使った、WebP から jpeg への変換
  • Example#2730 - XBM 画像から png 画像への imagecreatefromxbm を用いた変換
  • Example#2731 - imagecreatefromxpm による画像インスタンスの作成
  • Example#2732 - 新規 GD イメージストリームの作成およびイメージの出力
  • Example#2733 - imagecrop の例
  • Example#2734 - 自動クロップの適切な処理
  • Example#2735 - imagedashedline の例
  • Example#2736 - imagedashedline のもうひとつの使用法
  • Example#2737 - PHP 8.0.0 より前のバージョンでの imagedestroy の使用例
  • Example#2738 - imageellipse の例
  • Example#2739 - imagefill の例
  • Example#2740 - 3D 風のパイを作成する
  • Example#2741 - imagefilledellipse の例
  • Example#2742 - imagefilledpolygon の例
  • Example#2743 - imagefilledrectangle の例
  • Example#2744 - 楕円の塗りつぶし
  • Example#2745 - imagefilter グレースケールの例
  • Example#2746 - imagefilter 輝度の例
  • Example#2747 - imagefilter 単色化の例
  • Example#2748 - imagefilter での打ち消しの例
  • Example#2749 - imagefilter でのモザイク処理の例
  • Example#2750 - imagefilter でのScatter効果の例
  • Example#2751 - 垂直方向の反転
  • Example#2752 - 水平方向の反転
  • Example#2753 - 組み込みフォントでの imagefontheight の使用法
  • Example#2754 - imagefontheight と imageloadfont を組み合わせた使用法
  • Example#2755 - 組み込みフォントでの imagefontwidth の使用法
  • Example#2756 - imagefontwidth と imageloadfont を組み合わせた使用法
  • Example#2757 - imageftbbox の例
  • Example#2758 - imagefttext の例
  • Example#2759 - imagegammacorrect の使用法
  • Example#2760 - GD 画像の出力
  • Example#2761 - GD 画像の保存
  • Example#2762 - GD2 画像の出力
  • Example#2763 - GD2 画像の保存
  • Example#2764 - imagegetclip の例
  • Example#2765 - imagegif による画像の出力
  • Example#2766 - imagegif による PNG 画像から GIF への変換
  • Example#2767 - imagegrabscreen の例
  • Example#2768 - imagegrabwindow の例
  • Example#2769 - imageinterlace によるインターレース処理の有効化
  • Example#2770 - imageistruecolor による、シンプルな true color 画像の検出
  • Example#2771 - JPEG 画像のブラウザへの出力
  • Example#2772 - JPEG 画像のファイルへの保存
  • Example#2773 - 75% 品質でのブラウザへの画像の出力
  • Example#2774 - imagelayereffect の例
  • Example#2775 - 太い線を描画する
  • Example#2776 - imageloadfont の使用例
  • Example#2777 - imageopenpolygon の例
  • Example#2778 - imagepalettecopy の例
  • Example#2779 - 画像オブジェクトの true color への変換
  • Example#2780 - imagepolygon の例
  • Example#2781 - シンプルな imagerectangle の例
  • Example#2782 - 画像の解像度を取得/設定する
  • Example#2783 - 画像を 180 度回転する
  • Example#2784 - 基本的な imagesavealpha の使用法
  • Example#2785 - imagesetbrush の例
  • Example#2786 - imagesetinterpolation の例
  • Example#2787 - imagesetpixel の例
  • Example#2788 - imagesetstyle の例
  • Example#2789 - imagesetthickness の例
  • Example#2790 - imagesettile の例
  • Example#2791 - imagestring の例
  • Example#2792 - imagestringup の例
  • Example#2793 - imagesx の使用法
  • Example#2794 - imagesy の使用法
  • Example#2795 - true color 画像からパレット画像への変換
  • Example#2796 - imagettfbbox の例
  • Example#2797 - imagettftext の例
  • Example#2798 - PNG をサポートしているかどうかの確認
  • Example#2799 - WBMP 画像の出力
  • Example#2800 - WBMP 画像の保存
  • Example#2801 - 別の前景での画像の出力
  • Example#2802 - WebP ファイルの保存
  • Example#2803 - XBM ファイルの保存
  • Example#2804 - 別の前景色による XBM ファイルの保存
  • Example#2805 - IPTC データの JPEG への埋め込み
  • Example#2806 - iptcparse() を getimagesize と組み合わせる使用法
  • Example#2807 - jpeg2wbmp の例
  • Example#2808 - png2wbmp の例
  • Example#2809 - Gmagick の例
  • Example#2810 - Gmagick::despeckleimage の例
  • Example#2811 - Gmagick::setCompressionQuality
  • Example#2812 - Imagick によるサムネイルの作成
  • Example#2813 - ディレクトリ内のすべての JPG ファイルのサムネイルの作成
  • Example#2814 - 画像の鏡像の作成
  • Example#2815 - グラデーションつきテキスト
  • Example#2816 - GIF 画像の読み込みと全フレームのサイズ変更
  • Example#2817 - PHP ロゴの作成
  • Example#2818 - Imagick::adaptiveBlurImage の使用法
  • Example#2819 - Imagick::adaptiveResizeImage の使用法
  • Example#2820 - Imagick::adaptiveSharpenImage の例
  • Example#2821 - Imagick::adaptiveThresholdImage
  • Example#2822 - Imagick::addNoiseImage
  • Example#2823 - Imagick::affineTransformImage
  • Example#2824 - Imagick::annotateImage の使用法
  • Example#2825 - Imagick::appendImages の例
  • Example#2826 - Imagick::autoLevelImage
  • Example#2827 - Imagick::blackThresholdImage
  • Example#2828 - Imagick::blueShiftImage
  • Example#2829 - Imagick::blurImage の使用法
  • Example#2830 - Imagick::borderImage
  • Example#2831 - Imagick::brightnessContrastImage
  • Example#2832 - Imagick::charcoalImage
  • Example#2833 - Imagick::chopImage の使用法
  • Example#2834 - Imagick オブジェクトのクローン
  • Example#2835 - Imagick::clutImage の使用法
  • Example#2836 - Imagick::colorizeImage
  • Example#2837 - Imagick::colorMatrixImage
  • Example#2838 - Imagick::commentImage の使用法
  • Example#2839 - Imagick::compareImageLayers の使用法
  • Example#2840 - Imagick::compareImages の使用法
  • Example#2841 - Imagick::compositeImage の利用例
  • Example#2842 - Imagick::contrastImage
  • Example#2843 - Imagick::convolveImage
  • Example#2844 - Imagick::cropImage
  • Example#2845 - Imagick::deskewImage
  • Example#2846 - Imagick::despeckleImage
  • Example#2847 - Imagick::distortImage の使用法
  • Example#2848 - Imagick::edgeImage
  • Example#2849 - Imagick::embossImage
  • Example#2850 - Imagick::enhanceImage
  • Example#2851 - Imagick::equalizeImage
  • Example#2852 - Imagick::evaluateImage の使用法
  • Example#2853 - Imagick::exportImagePixels の使用法
  • Example#2854 - Imagick::filter
  • Example#2855 - Imagick::flipImage
  • Example#2856 - Imagick::floodfillPaintImage の例
  • Example#2857 - Imagick::flopImage
  • Example#2858 - Imagick::forwardFourierTransformImage
  • Example#2859 - Imagick::frameImage
  • Example#2860 - シヌソイドの勾配の作成
  • Example#2861 - 多項式 (4x^2 - 4x + 1) からの勾配の作成
  • Example#2862 - 多項式 (4x^2 - 4x^2 + 1) をシヌソイドの勾配で変調した、複雑な勾配の作成
  • Example#2863 - Imagick::fxImage
  • Example#2864 - Imagick::gammaImage
  • Example#2865 - Imagick::gaussianBlurImage
  • Example#2866 - Imagick::getImageGeometry を使う
  • Example#2867 - Generates Imagick::getImageHistogram
  • Example#2868 - Imagick::getImageLength の使用法
  • Example#2869 - Imagick::getImageProperties の使用法
  • Example#2870 - Imagick::getImageProperty の使用法
  • Example#2871 - Imagick::getIteratorIndex の使用法
  • Example#2872 - Imagick::getPixelIterator
  • Example#2873 - Imagick::getPixelRegionIterator の例
  • Example#2874 - Getting the size of a raw RGB image set at 200x400, after scaling to 400x800 (compared to width / height)
  • Example#2875 - Imagick::haldClutImage
  • Example#2876 - Imagick::identifyFormat
  • Example#2877 - 結果の書式の例
  • Example#2878 - Imagick::implodeImage
  • Example#2879 - Imagick::importImagePixels の例
  • Example#2880 - Imagick::levelImage
  • Example#2881 - Imagick::linearStretchImage
  • Example#2882 - Imagick::magnifyImage
  • Example#2883 - Imagick::medianFilterImage
  • Example#2884 - Imagick::mergeImageLayers
  • Example#2885 - Imagick::modulateImage
  • Example#2886 - Convolve Imagick::morphology
  • Example#2887 - Correlate Imagick::morphology
  • Example#2888 - Erode Imagick::morphology
  • Example#2889 - Erode Intensity Imagick::morphology
  • Example#2890 - Dilate Imagick::morphology
  • Example#2891 - Dilate intensity Imagick::morphology
  • Example#2892 - Distance with Chebyshev kernel Imagick::morphology
  • Example#2893 - Distance with Manhattan kernel Imagick::morphology
  • Example#2894 - Distance with ocatagonal kernel Imagick::morphology
  • Example#2895 - Distance with Euclidean kernel Imagick::morphology
  • Example#2896 - Edge Imagick::morphology
  • Example#2897 - Open Imagick::morphology
  • Example#2898 - Open intensity Imagick::morphology
  • Example#2899 - Close Imagick::morphology
  • Example#2900 - Close Intensity Imagick::morphology
  • Example#2901 - Smooth Imagick::morphology
  • Example#2902 - Edge in Imagick::morphology
  • Example#2903 - Edge out Imagick::morphology
  • Example#2904 - The 'TopHat' method, or more specifically 'White Top Hat', returns the pixels that were removed by a Opening of the shape, that is the pixels that were removed to round off the points, and the connecting bridged between shapes. Imagick::morphology
  • Example#2905 - The 'BottomHat' method, also known as 'Black TopHat' is the pixels that a Closing of the shape adds to the image. That is the pixels that were used to fill in the 'holes', 'gaps', and 'bridges'. Imagick::morphology
  • Example#2906 - Hit and Miss Imagick::morphology
  • Example#2907 - Thinning Imagick::morphology
  • Example#2908 - Thicken Imagick::morphology
  • Example#2909 - Thick to generate a convex hull Imagick::morphology
  • Example#2910 - Iterative morphology Imagick::morphology
  • Example#2911 - Helper function to get an image silhouette Imagick::morphology
  • Example#2912 - Imagick::motionBlurImage
  • Example#2913 - Imagick::negateImage
  • Example#2914 - Imagick::newImage の使用法
  • Example#2915 - Imagick::newPseudoImage
  • Example#2916 - Imagick::normalizeImage
  • Example#2917 - Imagick::oilPaintImage
  • Example#2918 - Imagick::optimizeImageLayers の使用法
  • Example#2919 - Imagick::orderedPosterizeImage
  • Example#2920 - Imagick::pingImageBlob の使用法
  • Example#2921 - Imagick::pingImageFile の使用法
  • Example#2922 - Imagick::polaroidImage の例
  • Example#2923 - Imagick::posterizeImage
  • Example#2924 - Imagick::quantizeImage
  • Example#2925 - Imagick::queryFontMetrics の使用法
  • Example#2926 - Imagick::queryFonts
  • Example#2927 - Imagick::queryFormats
  • Example#2928 - Imagick::radialBlurImage
  • Example#2929 - Imagick::raiseImage
  • Example#2930 - Imagick::randomThresholdImage
  • Example#2931 - Imagick::readImageBlob
  • Example#2932 - Imagick::recolorImage
  • Example#2933 - Imagick::reduceNoiseImage
  • Example#2934 - Imagick::resampleImage
  • Example#2935 - Imagick::resizeImage
  • Example#2936 - Imagick::rollImage
  • Example#2937 - Imagick::rotateImage
  • Example#2938 - Imagick::rotationalBlurImage
  • Example#2939 - Imagick::roundCorners の使用法
  • Example#2940 - Imagick::scaleImage
  • Example#2941 - Imagick::segmentImage
  • Example#2942 - Imagick::selectiveBlurImage
  • Example#2943 - Imagick::separateImageChannel
  • Example#2944 - Imagick::sepiaToneImage
  • Example#2945 - Imagick::setCompressionQuality
  • Example#2946 - Imagick::setFont の例
  • Example#2947 - Imagick::setImage の例
  • Example#2948 - Imagick::setImageArtifact
  • Example#2949 - Imagick::setImageBias
  • Example#2950 - Imagick::setImageClipMask
  • Example#2951 - Imagick::setImageCompressionQuality
  • Example#2952 - Imagick::setImageDelay を使ったアニメーション GIF の変更
  • Example#2953 - 基本的な Imagick::setImageIterations の使用例
  • Example#2954 - Imagick::setImageOpacity の例
  • Example#2955 - Imagick::setImageOrientation
  • Example#2956 - Imagick::setImageProperty の使用法
  • Example#2957 - Imagick::setImageResolution
  • Example#2958 - Imagick::setImageTicksPerSecond によるアニメーション GIF の変更
  • Example#2959 - Imagick::setIteratorIndex の使用法
  • Example#2960 - Attempt to reach '$extent' sizeImagick::setOption
  • Example#2961 - Imagick::setOption
  • Example#2962 - Imagick::setOption
  • Example#2963 - Imagick::setPointSize の例
  • Example#2964 - Imagick::setProgressMonitor
  • Example#2965 - Imagick::setSamplingFactors
  • Example#2966 - Imagick::shadeImage
  • Example#2967 - Imagick::shadowImage
  • Example#2968 - Imagick::sharpenImage
  • Example#2969 - Imagick::shaveImage
  • Example#2970 - Imagick::shearImage
  • Example#2971 - Imagick::sigmoidalContrastImage によるグラデーションの作成 (ふたつの画像を、$contrast と $midpoint の定義でブレンドする)
  • Example#2972 - Imagick::sketchImage
  • Example#2973 - Imagick::smushImages
  • Example#2974 - Imagick::solarizeImage
  • Example#2975 - SPARSECOLORMETHOD_BARYCENTRIC Imagick::sparseColorImage
  • Example#2976 - SPARSECOLORMETHOD_BILINEAR Imagick::sparseColorImage
  • Example#2977 - SPARSECOLORMETHOD_SPEPARDS Imagick::sparseColorImage
  • Example#2978 - SPARSECOLORMETHOD_VORONOI Imagick::sparseColorImage
  • Example#2979 - SPARSECOLORMETHOD_BARYCENTRIC Imagick::sparseColorImage
  • Example#2980 - createGradientImage is used by other examples. Imagick::sparseColorImage
  • Example#2981 - Imagick::spliceImage
  • Example#2982 - Imagick::spreadImage
  • Example#2983 - Imagick::statisticImage
  • Example#2984 - Imagick::subImageMatch
  • Example#2985 - Imagick::swirlImage
  • Example#2986 - Imagick::textureImage
  • Example#2987 - Imagick::thresholdImage
  • Example#2988 - Imagick::thumbnailImage
  • Example#2989 - Imagick::tintImage
  • Example#2990 - Imagick::transformImage の使用
  • Example#2991 - Imagick::transformImageColorspace example
  • Example#2992 - Imagick::transparentPaintImage
  • Example#2993 - Imagick::transposeImage
  • Example#2994 - Imagick::transverseImage
  • Example#2995 - Imagick::trimImage の使用法
  • Example#2996 - Imagick::uniqueImageColors
  • Example#2997 - Imagick::unsharpMaskImage
  • Example#2998 - Imagick::vignetteImage
  • Example#2999 - WaveImage can be quite slow Imagick::waveImage
  • Example#3000 - Imagick::whiteThresholdImage
  • Example#3001 - ImagickDraw::affine の例
  • Example#3002 - ImagickDraw::arc の例
  • Example#3003 - ImagickDraw::bezier の例
  • Example#3004 - ImagickDraw::circle の例
  • Example#3005 - ImagickDraw::composite の例
  • Example#3006 - ImagickDraw::ellipse の例
  • Example#3007 - ImagickDraw::line の例
  • Example#3008 - ImagickDraw::matte の例
  • Example#3009 - ImagickDraw::pathCurveToQuadraticBezierAbsolute の例
  • Example#3010 - ImagickDraw::pathCurveToQuadraticBezierSmoothAbsolute の例
  • Example#3011 - ImagickDraw::pathCurveToQuadraticBezierSmoothRelative の例
  • Example#3012 - ImagickDraw::pathStart の例
  • Example#3013 - ImagickDraw::point の例
  • Example#3014 - ImagickDraw::polygon の例
  • Example#3015 - ImagickDraw::polyline の例
  • Example#3016 - ImagickDraw::popDefs の例
  • Example#3017 - ImagickDraw::push の例
  • Example#3018 - ImagickDraw::pushPattern の例
  • Example#3019 - ImagickDraw::rectangle の例
  • Example#3020 - ImagickDraw::rotate の例
  • Example#3021 - ImagickDraw::roundRectangle の例
  • Example#3022 - ImagickDraw::scale の例
  • Example#3023 - ImagickDraw::setClipPath の例
  • Example#3024 - ImagickDraw::setClipRule の例
  • Example#3025 - ImagickDraw::setClipUnits の例
  • Example#3026 - ImagickDraw::setFillAlpha の例
  • Example#3027 - ImagickDraw::setFillColor
  • Example#3028 - ImagickDraw::setFillOpacity
  • Example#3029 - ImagickDraw::setFillRule の例
  • Example#3030 - ImagickDraw::setFont の例
  • Example#3031 - ImagickDraw::setFontFamily の例
  • Example#3032 - ImagickDraw::setFontSize の例
  • Example#3033 - ImagickDraw::setFontStretch の例
  • Example#3034 - ImagickDraw::setFontStyle の例
  • Example#3035 - ImagickDraw::setFontWeight の例
  • Example#3036 - ImagickDraw::setGravity の例
  • Example#3037 - ImagickDraw::setStrokeAlpha の例
  • Example#3038 - ImagickDraw::setStrokeAntialias の例
  • Example#3039 - ImagickDraw::setStrokeColor の例
  • Example#3040 - ImagickDraw::setStrokeDashArray の例
  • Example#3041 - ImagickDraw::setStrokeDashOffset の例
  • Example#3042 - ImagickDraw::setStrokeLineCap の例
  • Example#3043 - ImagickDraw::setStrokeLineJoin の例
  • Example#3044 - ImagickDraw::setStrokeMiterLimit の例
  • Example#3045 - ImagickDraw::setStrokeOpacity の例
  • Example#3046 - ImagickDraw::setStrokeWidth の例
  • Example#3047 - ImagickDraw::setTextAlignment の例
  • Example#3048 - ImagickDraw::setTextAntialias の例
  • Example#3049 - ImagickDraw::setTextDecoration の例
  • Example#3050 - ImagickDraw::setTextUnderColor の例
  • Example#3051 - ImagickDraw::setVectorGraphics の例
  • Example#3052 - ImagickDraw::setViewBox の例
  • Example#3053 - ImagickDraw::skewX の例
  • Example#3054 - ImagickDraw::skewY の例
  • Example#3055 - ImagickDraw::translate の例
  • Example#3056 - ImagickPixel::construct
  • Example#3057 - 基本的な Imagick::getColor の使用例
  • Example#3058 - 基本的な Imagick::getColorAsString の使用例
  • Example#3059 - ImagickPixel getColorCount
  • Example#3060 - 基本的な Imagick::getColorValue の使用例
  • Example#3061 - ImagickPixel::getColorValueQuantum
  • Example#3062 - 基本的な Imagick::getHSL の使用例
  • Example#3063 - ImagickPixel::isSimilar
  • Example#3064 - ImagickPixel::setColor
  • Example#3065 - 基本的な Imagick::setColorValue の使用例
  • Example#3066 - ImagickPixel::setColorValueQuantum
  • Example#3067 - ImagickPixel::setHSL による色の変更
  • Example#3068 - ImagickPixelIterator::clear
  • Example#3069 - ImagickPixelIterator::construct
  • Example#3070 - ImagickPixelIterator::getNextIteratorRow
  • Example#3071 - ImagickPixelIterator::resetIterator
  • Example#3072 - ImagickPixelIterator::setIteratorRow
  • Example#3073 - ImagickKernel::addKernel
  • Example#3074 - ImagickKernel::addUnityKernel
  • Example#3075 - ImagickKernel::addUnityKernel
  • Example#3076 - ImagickKernel::fromBuiltin
  • Example#3077 - ImagickKernel::fromMatrix
  • Example#3078 - ImagickKernel::getMatrix
  • Example#3079 - ImagickKernel::scale
  • Example#3080 - ImagickKernel::separate
  • Example#3081 - imap_append の例
  • Example#3082 - imap_check の例
  • Example#3083 - imap_createmailbox example
  • Example#3084 - imap_delete の例
  • Example#3085 - imap_fetch_overview の例
  • Example#3086 - imap_gc の例
  • Example#3087 - imap_get_quota の例
  • Example#3088 - 4.3 以降のバージョンでの imap_get_quota の例
  • Example#3089 - imap_get_quotaroot の例
  • Example#3090 - imap_getacl の例
  • Example#3091 - imap_getmailboxes の例
  • Example#3092 - imap_is_open の例
  • Example#3093 - imap_list の例
  • Example#3094 - imap_mail_compose の例
  • Example#3095 - imap_mailboxmsginfo example
  • Example#3096 - imap_mime_header_decode の例
  • Example#3097 - imap_open のさまざまな使用例
  • Example#3098 - imap_open の例
  • Example#3099 - imap_ping の例
  • Example#3100 - imap_reopen の例
  • Example#3101 - imap_rfc822_parse_adrlist の例
  • Example#3102 - imap_rfc822_write_address の例
  • Example#3103 - imap_search の例
  • Example#3104 - imap_set_quota の例
  • Example#3105 - imap_setflag_full の例
  • Example#3106 - imap_status の例
  • Example#3107 - imap_thread の例
  • Example#3108 - imap_timeout の例
  • Example#3109 - Basic imap_utf8 の使い方
  • Example#3110 - ハッシュ値を計算し、ユーザーを登録する
  • Example#3111 - メールを送信する
  • Example#3112 - 追加ヘッダを付加してメールを送信する
  • Example#3113 - 追加のヘッダを array で指定してメールを送信する
  • Example#3114 - 追加のコマンドラインパラメータを指定してメールを送信する
  • Example#3115 - HTML メールを送信する
  • Example#3116 - mailparse_determine_best_xfer_encoding の例
  • Example#3117 - mailparse_rfc822_parse_addresses の例
  • Example#3118 - mailparse_stream_encode の例
  • Example#3119 - mailparse_uudecode_all の例
  • Example#3120 - bcadd の例
  • Example#3121 - bccomp の例
  • Example#3122 - bcdiv の例
  • Example#3123 - bcmod の例
  • Example#3124 - bcmod に小数の値を指定する
  • Example#3125 - bcmul の例
  • Example#3126 - bcmul で scale を指定する例
  • Example#3127 - bcpow の例
  • Example#3128 - bcpow で scale を指定する例
  • Example#3129 - bcscale の例
  • Example#3130 - bcsqrt の例
  • Example#3131 - bcsub の例
  • Example#3132 - GMP を使用した階乗関数
  • Example#3133 - gmp_abs の例
  • Example#3134 - gmp_add の例
  • Example#3135 - gmp_and の例
  • Example#3136 - gmp_clrbit の例
  • Example#3137 - gmp_cmp の例
  • Example#3138 - gmp_com の例
  • Example#3139 - gmp_div_q の例
  • Example#3140 - GMP 数の割算
  • Example#3141 - gmp_div_r の例
  • Example#3142 - gmp_divexact の例
  • Example#3143 - gmp_export の例
  • Example#3144 - gmp_fact の例
  • Example#3145 - gmp_gcd の例
  • Example#3146 - 線形不定方程式を解く
  • Example#3147 - gmp_hamdist の例
  • Example#3148 - gmp_import の例
  • Example#3149 - GMP 数の作成
  • Example#3150 - gmp_intval の例
  • Example#3151 - gmp_invert の例
  • Example#3152 - gmp_jacobi の例
  • Example#3153 - gmp_legendre の例
  • Example#3154 - gmp_mod の例
  • Example#3155 - gmp_mul の例
  • Example#3156 - gmp_neg の例
  • Example#3157 - gmp_nextprime の例
  • Example#3158 - gmp_or の例
  • Example#3159 - gmp_perfect_square の例
  • Example#3160 - gmp_popcount の例
  • Example#3161 - gmp_pow の例
  • Example#3162 - gmp_powm の例
  • Example#3163 - gmp_prob_prime の例
  • Example#3164 - gmp_random の例
  • Example#3165 - gmp_random_bits の例
  • Example#3166 - gmp_random_range の例
  • Example#3167 - gmp_random_seed の例
  • Example#3168 - gmp_scan0 の例
  • Example#3169 - gmp_scan1 の例
  • Example#3170 - gmp_setbit の例 - インデックス 0
  • Example#3171 - gmp_setbit の例 - インデックス 1
  • Example#3172 - gmp_setbit の例 - ビットのクリア
  • Example#3173 - gmp_sign の例
  • Example#3174 - gmp_sqrt の例
  • Example#3175 - gmp_sqrtrem の例
  • Example#3176 - GMP 数を文字列に変換する
  • Example#3177 - gmp_sub の例
  • Example#3178 - gmp_testbit の例
  • Example#3179 - gmp_xor の例
  • Example#3180 - abs の例
  • Example#3181 - base_convert の例
  • Example#3182 - bindec の例
  • Example#3183 - bindec が入力を符号なし整数として処理する例
  • Example#3184 - ceil の例
  • Example#3185 - cos の例
  • Example#3186 - decbin の例
  • Example#3187 - dechex の例
  • Example#3188 - dechex での大きな整数の例
  • Example#3189 - decoct の例
  • Example#3190 - deg2rad の例
  • Example#3191 - exp の例
  • Example#3192 - fdiv を使う
  • Example#3193 - floor の例
  • Example#3194 - fmod の使用法
  • Example#3195 - hexdec の例
  • Example#3196 - intdiv の例
  • Example#3197 - is_finite の例
  • Example#3198 - is_infinite の例
  • Example#3199 - is_nan の例
  • Example#3200 - max の使用例
  • Example#3201 - min の例
  • Example#3202 - octdec の例
  • Example#3203 - pi の例
  • Example#3204 - pow の例
  • Example#3205 - rad2deg の例
  • Example#3206 - round の例
  • Example#3207 - precision が、どうfloatの値に影響するか
  • Example#3208 - mode の例
  • Example#3209 - 桁数を指定した mode の例
  • Example#3210 - sin の例
  • Example#3211 - sqrt の例
  • Example#3212 - tan の例
  • Example#3213 - FDF ドキュメントの評価
  • Example#3214 - JavaScript コードを FDF に追加する
  • Example#3215 - PDF ドキュメントを公開する
  • Example#3216 - アップロードされたファイルを保存する
  • Example#3217 - FDF のすべてのフィールド名を検出する
  • Example#3218 - フォームデータへのアクセス
  • Example#3219 - フォームデータへのアクセス
  • Example#3220 - FDF の文字列での取得
  • Example#3221 - FDF データを 2 番目のフォームに渡す
  • Example#3222 - gnupg での署名の例 (手続き型)
  • Example#3223 - gnupg での署名の例 (オブジェクト指向)
  • Example#3224 - keylistiterator
  • Example#3225 - 手続き型の gnupg_adddecryptkey の例
  • Example#3226 - オブジェクト指向の gnupg_adddecryptkey の例
  • Example#3227 - 手続き型の gnupg_addencryptkey の例
  • Example#3228 - オブジェクト指向の gnupg_addencryptkey の例
  • Example#3229 - 手続き型の gnupg_addsignkey の例
  • Example#3230 - オブジェクト指向の gnupg_addsignkey の例
  • Example#3231 - 手続き型の gnupg_cleardecryptkeys の例
  • Example#3232 - オブジェクト指向の gnupg_cleardecryptkeys の例
  • Example#3233 - 手続き型の gnupg_clearencryptkeys の例
  • Example#3234 - オブジェクト指向の gnupg_clearencryptkeys の例
  • Example#3235 - 手続き型の gnupg_clearsignkeys の例
  • Example#3236 - オブジェクト指向の gnupg_clearsignkeys の例
  • Example#3237 - 手続き型の gnupg_decrypt の例
  • Example#3238 - オブジェクト指向の gnupg_decrypt の例
  • Example#3239 - 手続き型の gnupg_decryptverify の例
  • Example#3240 - オブジェクト指向の gnupg_decryptverify の例
  • Example#3241 - 手続き型の gnupg_deletekey の例
  • Example#3242 - オブジェクト指向の gnupg_deletekey の例
  • Example#3243 - 手続き型の gnupg_encrypt の例
  • Example#3244 - オブジェクト指向の gnupg_encrypt の例
  • Example#3245 - 手続き型の gnupg_encryptsign の例
  • Example#3246 - オブジェクト指向の gnupg_encryptsign の例
  • Example#3247 - Procedural gnupg_export example
  • Example#3248 - OO gnupg_export example
  • Example#3249 - 手続き型 gnupg_getengineinfo の例
  • Example#3250 - オブジェクト指向 gnupg_getengineinfo の例
  • Example#3251 - 手続き型の gnupg_geterror の例
  • Example#3252 - オブジェクト指向の gnupg_geterror の例
  • Example#3253 - 手続き型 gnupg_geterrorinfo の例
  • Example#3254 - オブジェクト指向型 gnupg_geterrorinfo の例
  • Example#3255 - 手続き型の gnupg_getprotocol の例
  • Example#3256 - オブジェクト指向の gnupg_getprotocol の例
  • Example#3257 - 手続き型の gnupg_gettrustlist の例
  • Example#3258 - オブジェクト指向の gnupg_gettrustlist の例
  • Example#3259 - 手続き型の gnupg_import の例
  • Example#3260 - オブジェクト指向の gnupg_import の例
  • Example#3261 - デフォルト値を使った、手続き型の gnupg_init の例
  • Example#3262 - ファイル名とホームディレクトリを上書きした、手続き型の gnupg_init の例
  • Example#3263 - デフォルト値を使い、オブジェクト指向型のインターフェイスで gnupg を初期化する例
  • Example#3264 - ファイル名とホームディレクトリを上書きし、オブジェクト指向型のインターフェイスで gnupg を初期化する例
  • Example#3265 - 手続き型の gnupg_keyinfo の例
  • Example#3266 - オブジェクト指向の gnupg_keyinfo の例
  • Example#3267 - 手続き型の gnupg_listsignatures の例
  • Example#3268 - オブジェクト指向の gnupg_listsignatures の例
  • Example#3269 - 手続き型の gnupg_setarmor の例
  • Example#3270 - オブジェクト指向の gnupg_setarmor の例
  • Example#3271 - 手続き型の gnupg_seterrormode の例
  • Example#3272 - オブジェクト指向の gnupg_seterrormode の例
  • Example#3273 - 手続き型の gnupg_setsignmode の例
  • Example#3274 - オブジェクト指向の gnupg_setsignmode の例
  • Example#3275 - 手続き型の gnupg_sign の例
  • Example#3276 - オブジェクト指向の gnupg_sign の例
  • Example#3277 - 手続き型の gnupg_verify の例
  • Example#3278 - オブジェクト指向の gnupg_verify の例
  • Example#3279 - パターンの作成および使用
  • Example#3280 - テンプレートの作成および使用
  • Example#3281 - テキストのハイフネーション
  • Example#3282 - 矩形を描画する
  • Example#3283 - スポット色の作成と使用
  • Example#3284 - 座標系の回転
  • Example#3285 - 指定した位置にテキストを配置する
  • Example#3286 - 破線を描画する
  • Example#3287 - 座標系の変換
  • Example#3288 - A rpmdbinfo example
  • Example#3289 - Searching for the package owning a file
  • Example#3290 - A rpminfo example
  • Example#3291 - example
  • Example#3292 - example
  • Example#3293 - example
  • Example#3294 - example
  • Example#3295 - example
  • Example#3296 - example
  • Example#3297 - example
  • Example#3298 - example
  • Example#3299 - example
  • Example#3300 - example
  • Example#3301 - example
  • Example#3302 - example
  • Example#3303 - example
  • Example#3304 - setColumn example
  • Example#3305 - setRow example
  • Example#3306 - Align style example
  • Example#3307 - Bold style example
  • Example#3308 - Italic style example
  • Example#3309 - Underline style example
  • Example#3310 - 間違ったリクエスト
  • Example#3311 - リクエストコールバックからのリクエストの呼び出し
  • Example#3312 - リクエストコールバックからのリクエストの呼び出し
  • Example#3313 - eio と libevent を組み合わせる例
  • Example#3314 - リクエストの取り消し
  • Example#3315 - eio_chmod の呼び出し
  • Example#3316 - カスタムリクエストの作成
  • Example#3317 - リクエストのグループ化
  • Example#3318 - eio と libevent 拡張モジュールを組み合わせる
  • Example#3319 - eio と event 拡張モジュールを組み合わせる
  • Example#3320 - eio_cancel の例
  • Example#3321 - eio_custom の例
  • Example#3322 - eio_event_loop の例
  • Example#3323 - eio_lstat の例
  • Example#3324 - eio を libevent とともに使う
  • Example#3325 - eio_grp の例
  • Example#3326 - リクエストのグループ化
  • Example#3327 - eio_link の例
  • Example#3328 - eio_lstat の例
  • Example#3329 - eio_mkdir の例
  • Example#3330 - eio_mknod の例
  • Example#3331 - eio_nreqs の例
  • Example#3332 - eio_open の例
  • Example#3333 - eio_poll の例
  • Example#3334 - eio_read の例
  • Example#3335 - eio_readdir の例
  • Example#3336 - eio_readlink の例
  • Example#3337 - eio_realpath の例
  • Example#3338 - eio_rename の例
  • Example#3339 - eio_rmdir の例
  • Example#3340 - eio_stat の例
  • Example#3341 - eio_statvfs の例
  • Example#3342 - eio_symlink の例
  • Example#3343 - タイマーのサンプル
  • Example#3344 - 10.5 秒おきに繰り返すタイマー
  • Example#3345 - 再スケジュールコールバックを使う定期タイマー
  • Example#3346 - すぐに開始し、10.5 秒おきに繰り返すタイマー
  • Example#3347 - STDIN が読み込み可能になるまで待つ例
  • Example#3348 - 非同期 I/O を使ったソケットへのアクセス
  • Example#3349 - ループの中に別のループを埋め込む例
  • Example#3350 - kqueue バックエンドで作ったループをデフォルトのループに埋め込む例
  • Example#3351 - SIGTERM の処理
  • Example#3352 - /var/log/messages の変更の監視
  • Example#3353 - /var/log/messages の変更の監視 (1 秒の遅延を使って、更新を見落とさないようにする)
  • Example#3354 - ステータスの変更の処理
  • Example#3355 - 再スケジュールコールバックの利用
  • Example#3356 - kqueue バックエンドで作ったループをデフォルトのループに埋め込む例
  • Example#3357 - ループの中に別のループを埋め込む例
  • Example#3358 - kqueue バックエンドで作ったループをデフォルトのループに埋め込む例
  • Example#3359 - kqueue バックエンドで作ったループをデフォルトのループに埋め込む例
  • Example#3360 - Periodic timer. Use reschedule callback
  • Example#3361 - Periodic timer. Tick every 10.5 seconds starting at now
  • Example#3362 - Hourly watcher
  • Example#3363 - Handle SIGTERM signal
  • Example#3364 - Monitor changes of /var/log/messages
  • Example#3365 - Monitor changes of /var/log/messages
  • Example#3366 - Simple timers
  • Example#3367 - Monotor changes of /var/log/messages. Avoid missing updates by means of one second delay
  • Example#3368 - Register an I/O watcher for some UDP socket but do not keep the event loop from running just because of that watcher.
  • Example#3369 - Expect の使用例
  • Example#3370 - もうひとつの Expect の使用例
  • Example#3371 - expect_expectl の例
  • Example#3372 - expect_popen の例
  • Example#3373 - プロセス制御の例
  • Example#3374 - pcntl_fork の例
  • Example#3375 - pcntl_rfork の例
  • Example#3376 - pcntl_signal の例
  • Example#3377 - pcntl_signal_dispatch の例
  • Example#3378 - pcntl_signal_get_handler の例
  • Example#3379 - pcntl_sigprocmask の例
  • Example#3380 - pcntl_sigwaitinfo の例
  • Example#3381 - posix_access の例
  • Example#3382 - posix_ctermid の例
  • Example#3383 - posix_eaccess の例
  • Example#3384 - posix_fpathconf の例
  • Example#3385 - posix_get_last_error の例
  • Example#3386 - posix_getcwd の例
  • Example#3387 - posix_getegid example
  • Example#3388 - posix_geteuid の例
  • Example#3389 - posix_getgid の例
  • Example#3390 - posix_getgrgid の使用例
  • Example#3391 - posix_getgrnam の使用例
  • Example#3392 - posix_getgroups の使用例
  • Example#3393 - posix_getlogin の使用例
  • Example#3394 - posix_getpgid の使用例
  • Example#3395 - posix_getpid の使用例
  • Example#3396 - posix_getppid の使用例
  • Example#3397 - posix_getpwnam の使用例
  • Example#3398 - posix_getpwuid の使用例
  • Example#3399 - posix_getrlimit の使用例
  • Example#3400 - posix_getsid の使用例
  • Example#3401 - posix_getuid の使用例
  • Example#3402 - posix_mknod の例
  • Example#3403 - posix_pathconf の例
  • Example#3404 - posix_setegid の例
  • Example#3405 - posix_setgid の例
  • Example#3406 - posix_setuid の例
  • Example#3407 - posix_strerror の例
  • Example#3408 - posix_sysconf の例
  • Example#3409 - posix_times の使用例
  • Example#3410 - posix_uname の使用例
  • Example#3411 - escapeshellarg の例
  • Example#3412 - escapeshellcmd の例
  • Example#3413 - exec の例
  • Example#3414 - proc_nice 関数を使い、プロセスの優先度を高に設定する
  • Example#3415 - A proc_open の例
  • Example#3416 - proc_open 関数の癖(Windows限定)
  • Example#3417 - shell_exec の例
  • Example#3418 - system の例
  • Example#3419 - Example showing Future as return value
  • Example#3420 - Example showing Future as synchronization point
  • Example#3421 - Fetch a chunk of the property table
  • Example#3422 - Counting the properties of an object
  • Example#3423 - Runtime inheritance
  • Example#3424 - Detect the state of the referenced object
  • Example#3425 - Detect the state of the referenced object
  • Example#3426 - Merging into the property table of a threaded object
  • Example#3427 - Notifications and Waiting
  • Example#3428 - Notifications and Waiting
  • Example#3429 - Popping the last item from the property table of a threaded object
  • Example#3430 - Shifting the first item from the property table of a threaded object
  • Example#3431 - Synchronizing
  • Example#3432 - Notifications and Waiting
  • Example#3433 - このスレッドを作ったスレッドあるいはプロセスの ID を返す
  • Example#3434 - Return the currently executing Thread
  • Example#3435 - Return the identity of the currently executing Thread
  • Example#3436 - このスレッドの ID を返す
  • Example#3437 - スレッドの状態を検出する
  • Example#3438 - スレッドが開始したかどうかを検出する
  • Example#3439 - スレッドとのジョイン
  • Example#3440 - スレッドの開始
  • Example#3441 - A basic example of Worker::collect
  • Example#3442 - A basic example of Worker::getStacked
  • Example#3443 - Detect the state of a worker
  • Example#3444 - Shutdown the referenced worker
  • Example#3445 - Stacking a task for execution onto a worker
  • Example#3446 - Removing objects from the stack of Workers
  • Example#3447 - A basic example of Pool::collect
  • Example#3448 - Creating Pools
  • Example#3449 - Shutting down a pool
  • Example#3450 - Submitting Tasks
  • Example#3451 - Submitting tasks to a specific worker
  • Example#3452 - New immutability semantics of Threaded
  • Example#3453 - Volatile use-case
  • Example#3454 - 共有メモリ操作の概要
  • Example#3455 - 共有メモリブロックを閉じる
  • Example#3456 - 共有メモリブロックを削除する
  • Example#3457 - 共有メモリブロックを新規に作成する
  • Example#3458 - 共有メモリブロックを読み取る
  • Example#3459 - 共有メモリブロックのサイズを取得する
  • Example#3460 - 共有メモリブロックに書き込む
  • Example#3461 - SyncMutex::__construct named mutex with lock timeout example
  • Example#3462 - SyncMutex::__construct unnamed mutex example
  • Example#3463 - SyncMutex::lock example
  • Example#3464 - SyncMutex::unlock example
  • Example#3465 - SyncSemaphore::__construct example
  • Example#3466 - SyncSemaphore::lock example
  • Example#3467 - SyncSemaphore::unlock example
  • Example#3468 - SyncEvent::__construct example
  • Example#3469 - SyncEvent::fire example
  • Example#3470 - SyncEvent::reset example
  • Example#3471 - SyncEvent::wait example
  • Example#3472 - SyncReaderWriter::__construct example
  • Example#3473 - SyncReaderWriter::readlock example
  • Example#3474 - SyncReaderWriter::readunlock example
  • Example#3475 - SyncReaderWriter::writelock example
  • Example#3476 - SyncReaderWriter::writeunlock example
  • Example#3477 - SyncSharedMemory::__construct example
  • Example#3478 - SyncSharedMemory::first example
  • Example#3479 - SyncSharedMemory::__construct example
  • Example#3480 - SyncSharedMemory::size example
  • Example#3481 - SyncSharedMemory::write example
  • Example#3482 - geoip_asnum_by_name の例
  • Example#3483 - geoip_continent_code_by_name の例
  • Example#3484 - geoip_country_code_by_name の例
  • Example#3485 - geoip_country_code3_by_name の例
  • Example#3486 - geoip_country_name_by_name の例
  • Example#3487 - geoip_database_info の例
  • Example#3488 - geoip_db_avail の例
  • Example#3489 - geoip_db_filename の例
  • Example#3490 - geoip_db_get_all_info の例
  • Example#3491 - geoip_db_get_all_info の例
  • Example#3492 - geoip_domain_by_name の例
  • Example#3493 - geoip_id_by_name の例
  • Example#3494 - geoip_isp_by_name の例
  • Example#3495 - geoip_netspeedcell_by_name の例
  • Example#3496 - geoip_org_by_name の例
  • Example#3497 - geoip_record_by_name の例
  • Example#3498 - geoip_region_by_name の例
  • Example#3499 - US/Canada の地域コードを使用した geoip_region_name_by_code の例
  • Example#3500 - FIPS コードを使用した geoip_region_name_by_code の例
  • Example#3501 - geoip_setup_custom_directory の例
  • Example#3502 - US/Canada の地域コードを使用した geoip_time_zone_by_country_and_region の例
  • Example#3503 - FIPS コードを使用した geoip_time_zone_by_country_and_region の例
  • Example#3504 - xor.data file
  • Example#3505 - Simple train
  • Example#3506 - Simple test
  • Example#3507 - fann_create_train_from_callback example
  • Example#3508 - fann_read_train_from_file example
  • Example#3509 - igbinary_serialize の例
  • Example#3510 - JsonSerializable::jsonSerialize で配列を返す例
  • Example#3511 - JsonSerializable::jsonSerialize で連想配列を返す例
  • Example#3512 - JsonSerializable::jsonSerialize で整数値を返す例
  • Example#3513 - JsonSerializable::jsonSerialize で文字列を返す例
  • Example#3514 - json_decode の例
  • Example#3515 - 無効なオブジェクトプロパティへのアクセス
  • Example#3516 - json_decode でのありがちな間違い
  • Example#3517 - depth エラー
  • Example#3518 - json_decode で大きな整数値を扱う例
  • Example#3519 - json_encode の例
  • Example#3520 - json_encode で、利用中のいくつかのフラグを表示する例
  • Example#3521 - JSON_NUMERIC_CHECK の例
  • Example#3522 - シーケンシャルな配列とそうでない配列の例
  • Example#3523 - JSON_PRESERVE_ZERO_FRACTION の例
  • Example#3524 - json_last_error の例
  • Example#3525 - json_last_error と json_encode の組み合わせ
  • Example#3526 - json_last_error と JSON_THROW_ON_ERROR の組み合わせ
  • Example#3527 - json_validate の例
  • Example#3528 - simdjson_decode examples
  • Example#3529 - Accessing invalid object properties
  • Example#3530 - common mistakes using simdjson_decode
  • Example#3531 - depth errors
  • Example#3532 - simdjson_decode of large integers
  • Example#3533 - simdjson_decode examples
  • Example#3534 - depth errors
  • Example#3535 - Lua::assignの例
  • Example#3536 - Lua::callの例
  • Example#3537 - Lua::evalの例
  • Example#3538 - Lua::registerCallbackの例
  • Example#3539 - LuaClosure::__invokeの例
  • Example#3540 - Execute some Lua code
  • Example#3541 - Calling a Lua function
  • Example#3542 - Profiling Lua code
  • Example#3543 - Loading code into Lua
  • Example#3544 - Manipulating the usage timer
  • Example#3545 - Registering PHP functions to call from Lua
  • Example#3546 - Calling a Lua function
  • Example#3547 - Calling a Lua function
  • Example#3548 - 定数に対して constant を使う例
  • Example#3549 - 列挙型の case に constant を使う例(PHP 8.1.0 以降)
  • Example#3550 - 定数の定義
  • Example#3551 - 予約された名前を定数にする
  • Example#3552 - 定数のチェック
  • Example#3553 - 列挙型のcase をチェックする(PHP 8.1.0 以降)
  • Example#3554 - eval の例 - 簡単なテキストのマージ
  • Example#3555 - exit の例
  • Example#3556 - exit でステータスを指定する例
  • Example#3557 - シャットダウン関数やデストラクタが実行される例
  • Example#3558 - ユーザーのブラウザについての全情報の一覧
  • Example#3559 - __halt_compiler の例
  • Example#3560 - highlight_string の例
  • Example#3561 - hrtime の使い方
  • Example#3562 - ignore_user_abort の例
  • Example#3563 - pack の例
  • Example#3564 - php_strip_whitespace の例
  • Example#3565 - sapi_windows_generate_ctrl_event 関数の基本的な使い方
  • Example#3566 - 基本的な sapi_windows_set_ctrl_handler 関数の使い方
  • Example#3567 - sapi_windows_vt100_support でデフォルトの状態を出力する
  • Example#3568 - sapi_windows_vt100_support で状態を変更する
  • Example#3569 - VT100 のサポートを有効にする例
  • Example#3570 - sleep の例
  • Example#3571 - sys_getloadavg の例
  • Example#3572 - time_nanosleep の例
  • Example#3573 - time_sleep_until の例
  • Example#3574 - uniqid の例
  • Example#3575 - unpack の例
  • Example#3576 - unpack でのリピータの例
  • Example#3577 - unpack で名前のないキーを扱う例
  • Example#3578 - usleep の例
  • Example#3579 - Random Example
  • Example#3580 - mt_rand の例
  • Example#3581 - rand の例
  • Example#3582 - random_bytes の例
  • Example#3583 - random_int の例
  • Example#3584 - Random\Randomizer::__construct example
  • Example#3585 - Random\Randomizer::getBytes の例
  • Example#3586 - Random\Randomizer::getBytesFromString の例
  • Example#3587 - 2要素認証向けにランダムなコードを生成する
  • Example#3588 - 一様分布していない文字列から選択する
  • Example#3589 - Random\Randomizer::getFloat の例
  • Example#3590 - Random\Randomizer::getInt の例
  • Example#3591 - Random\Randomizer::nextFloat の例
  • Example#3592 - アフィン変換を使った間違った拡大演算
  • Example#3593 - Random\Randomizer::nextInt の例
  • Example#3594 - Random\Randomizer::pickArrayKeys の例
  • Example#3595 - ランダムに値を取り出す
  • Example#3596 - Random\Randomizer::__serialize の例
  • Example#3597 - Random\Randomizer::shuffleArray の例
  • Example#3598 - Random\Randomizer::shuffleBytes の例
  • Example#3599 - バイト単位でシャッフルするとUnicode文字は壊れる
  • Example#3600 - Random\Randomizer::__unserialize の例
  • Example#3601 - Random\Engine::generate の例
  • Example#3602 - Random\Engine\Mt19937::__construct の例
  • Example#3603 - Random\Engine\Mt19937::__debugInfo の例
  • Example#3604 - Random\Engine\Mt19937::__serialize の例
  • Example#3605 - Random\Engine\Mt19937::__unserialize の例
  • Example#3606 - Random\Engine\PcgOneseq128XslRr64::__construct の例
  • Example#3607 - 文字列からシードを作る
  • Example#3608 - Random\Engine\PcgOneseq128XslRr64::__debugInfo の例
  • Example#3609 - Random\Engine\PcgOneseq128XslRr64::jump の例
  • Example#3610 - Randomizer のメソッドは、複数回エンジンをコールしても構わない
  • Example#3611 - Random\Engine\PcgOneseq128XslRr64::__serialize の例
  • Example#3612 - Random\Engine\PcgOneseq128XslRr64::__unserialize の例
  • Example#3613 - Random\Engine\Xoshiro256StarStar::__construct の例
  • Example#3614 - 文字列からシードを作る
  • Example#3615 - Random\Engine\Xoshiro256StarStar::__debugInfo の例
  • Example#3616 - Random\Engine\Xoshiro256StarStar::jump の例
  • Example#3617 - Random\Engine\Xoshiro256StarStar::jumpLong の例
  • Example#3618 - Random\Engine\Xoshiro256StarStar::__serialize の例
  • Example#3619 - Random\Engine\Xoshiro256StarStar::__unserialize の例
  • Example#3620 - Get and set base path
  • Example#3621 - Get and set logger
  • Example#3622 - Fast write log
  • Example#3623 - Fast count some type of log count value
  • Example#3624 - Acquisit some type of log list
  • Example#3625 - seaslog_get_author example
  • Example#3626 - seaslog_get_version example
  • Example#3627 - SeasLog::alert example
  • Example#3628 - SeasLog::analyzerCount example
  • Example#3629 - SeasLog::analyzerDetail example
  • Example#3630 - SeasLog::closeLoggerStream example
  • Example#3631 - SeasLog::__construct example
  • Example#3632 - SeasLog::critical example
  • Example#3633 - SeasLog::debug example
  • Example#3634 - SeasLog::__destruct example
  • Example#3635 - SeasLog::emergency example
  • Example#3636 - SeasLog::error example
  • Example#3637 - SeasLog::flushBuffer example
  • Example#3638 - SeasLog::getBasePath example
  • Example#3639 - SeasLog::getBuffer example
  • Example#3640 - SeasLog::getBufferEnabled example
  • Example#3641 - SeasLog::getDatetimeFormat example
  • Example#3642 - SeasLog::getLastLogger example
  • Example#3643 - SeasLog::getRequestID example
  • Example#3644 - SeasLog::getRequestVariable example
  • Example#3645 - SeasLog::info example
  • Example#3646 - SeasLog::log example
  • Example#3647 - SeasLog::notice example
  • Example#3648 - SeasLog::setBasePath example
  • Example#3649 - SeasLog::setDatetimeFormat example
  • Example#3650 - SeasLog::setLogger example
  • Example#3651 - SeasLog::setRequestID example
  • Example#3652 - SeasLog::setRequestVariable example
  • Example#3653 - SeasLog::warning example
  • Example#3654 - SplStack の例
  • Example#3655 - SplQueue の例
  • Example#3656 - SplQueue を使ってタスクを効率的に処理する
  • Example#3657 - SplFixedArray の使用例
  • Example#3658 - SplFixedArray::__construct の例
  • Example#3659 - SplFixedArray::count の例
  • Example#3660 - SplFixedArray::fromArray の例
  • Example#3661 - SplFixedArray::getSize の例
  • Example#3662 - SplFixedArray::setSize の例
  • Example#3663 - SplFixedArray::toArray の例
  • Example#3664 - SplObjectStorage をセットとして使用
  • Example#3665 - SplObjectStorage をマップとして使用
  • Example#3666 - SplObjectStorage::addAll の例
  • Example#3667 - SplObjectStorage::attach の例
  • Example#3668 - SplObjectStorage::contains の例
  • Example#3669 - SplObjectStorage::count の例
  • Example#3670 - SplObjectStorage::current の例
  • Example#3671 - SplObjectStorage::detach の例
  • Example#3672 - SplObjectStorage::getHash の例
  • Example#3673 - SplObjectStorage::getInfo の例
  • Example#3674 - SplObjectStorage::key の例
  • Example#3675 - SplObjectStorage::next の例
  • Example#3676 - SplObjectStorage::offsetExists の例
  • Example#3677 - SplObjectStorage::offsetGet の例
  • Example#3678 - SplObjectStorage::offsetSet の例
  • Example#3679 - SplObjectStorage::offsetUnset の例
  • Example#3680 - SplObjectStorage::removeAll の例
  • Example#3681 - SplObjectStorage::removeAllExcept の例
  • Example#3682 - SplObjectStorage::rewind の例
  • Example#3683 - SplObjectStorage::serialize の例
  • Example#3684 - SplObjectStorage::setInfo の例
  • Example#3685 - SplObjectStorage::unserialize の例
  • Example#3686 - SplObjectStorage::valid の例
  • Example#3687 - AppendIterator::append の例
  • Example#3688 - AppendIterator の foreach での使用例
  • Example#3689 - AppendIterator API による AppendIterator の処理
  • Example#3690 - AppendIterator.getIteratorIndex の基本的な例
  • Example#3691 - AppendIterator::key の基本的な例
  • Example#3692 - ArrayIterator::current の例
  • Example#3693 - ArrayIterator::key の例
  • Example#3694 - ArrayIterator::next の例
  • Example#3695 - ArrayIterator::rewind の例
  • Example#3696 - ArrayIterator::valid の例
  • Example#3697 - CachingIterator::getCache の例
  • Example#3698 - 利用可能なコールバック引数
  • Example#3699 - コールバックの基本例
  • Example#3700 - DirectoryIterator::__construct の例
  • Example#3701 - DirectoryIterator::current の例
  • Example#3702 - DirectoryIterator::getBasename の例
  • Example#3703 - DirectoryIterator::getExtension の例
  • Example#3704 - DirectoryIterator::getFilename の例
  • Example#3705 - DirectoryIterator::isDot の例
  • Example#3706 - DirectoryIterator::key の例
  • Example#3707 - DirectoryIterator::next の例
  • Example#3708 - DirectoryIterator::rewind の例
  • Example#3709 - DirectoryIterator::seek の例
  • Example#3710 - DirectoryIterator::__toString の例
  • Example#3711 - DirectoryIterator::valid の例
  • Example#3712 - FilesystemIterator::__construct の例
  • Example#3713 - FilesystemIterator::current の例
  • Example#3714 - FilesystemIterator::key の例
  • Example#3715 - FilesystemIterator::next の例
  • Example#3716 - FilesystemIterator::rewind の例
  • Example#3717 - FilesystemIterator::key の例
  • Example#3718 - FilterIterator::accept の例
  • Example#3719 - GlobIterator の例
  • Example#3720 - GlobIterator::count の例
  • Example#3721 - InfiniteIterator::__construct の例
  • Example#3722 - LimitIterator の使用例
  • Example#3723 - LimitIterator::__construct の例
  • Example#3724 - LimitIterator::getPosition の例
  • Example#3725 - MultipleIterator の反復処理
  • Example#3726 - NoRewindIterator::__construct の例
  • Example#3727 - NoRewindIterator::rewind の例
  • Example#3728 - RecursiveArrayIterator::getChildren の例
  • Example#3729 - RecursiveArrayIterator::hasChildren の例
  • Example#3730 - 利用可能なコールバック引数
  • Example#3731 - 再帰コールバックの基本例
  • Example#3732 - RecursiveCallbackFilterIterator::hasChildren の基本的な使用例
  • Example#3733 - RecursiveDirectoryIterator の例
  • Example#3734 - getSubPath の例
  • Example#3735 - getSubPathname の例
  • Example#3736 - RecursiveFilterIterator の基本例
  • Example#3737 - RecursiveFilterIterator の例
  • Example#3738 - RecursiveIteratorIterator の反復処理
  • Example#3739 - RecursiveRegexIterator::__construct の例
  • Example#3740 - RecursiveRegexIterator::getChildren の例
  • Example#3741 - RecursiveRegexIterator::hasChildren の例
  • Example#3742 - RegexIterator::accept の例
  • Example#3743 - RegexIterator::__construct の例
  • Example#3744 - RegexIterator::getFlags の例
  • Example#3745 - RegexIterator::getMode の例
  • Example#3746 - RegexIterator::getPregFlags の例
  • Example#3747 - RegexIterator::setFlags の例
  • Example#3748 - RegexIterator::setMode の例
  • Example#3749 - RegexIterator::setPregFlags の例
  • Example#3750 - Countable::count の例
  • Example#3751 - 基本的な使用法
  • Example#3752 - SeekableIterator::seek の例
  • Example#3753 - class_implements の例
  • Example#3754 - class_parents の例
  • Example#3755 - class_uses の例
  • Example#3756 - iterator_apply の例
  • Example#3757 - iterator_count の例
  • Example#3758 - iterator_count で位置を変更する例
  • Example#3759 - foreach ループ内での iterator_count
  • Example#3760 - iterator_to_array の例
  • Example#3761 - spl_autoload_extensions の例
  • Example#3762 - spl_autoload_register を __autoload 関数の代わりに使う例
  • Example#3763 - spl_autoload_register でクラスをロードしない例
  • Example#3764 - 識別子には先頭のバックスラッシュが付かない
  • Example#3765 - spl_classes の例
  • Example#3766 - spl_object_hash の例
  • Example#3767 - spl_object_id の例
  • Example#3768 - SplFileInfo::__construct の例
  • Example#3769 - SplFileInfo::getATime の例
  • Example#3770 - SplFileInfo::getBasename の例
  • Example#3771 - SplFileInfo::getCTime の例
  • Example#3772 - SplFileInfo::getExtension の例
  • Example#3773 - SplFileInfo::getFilename の例
  • Example#3774 - SplFileInfo::getGroup の例
  • Example#3775 - SplFileInfo::getLinkTarget の例
  • Example#3776 - SplFileInfo::getMTime の例
  • Example#3777 - SplFileInfo::getOwner の例
  • Example#3778 - SplFileInfo::getPath の例
  • Example#3779 - SplFileInfo::getPathInfo の例
  • Example#3780 - SplFileInfo::getPathname の例
  • Example#3781 - SplFileInfo::getPerms の例
  • Example#3782 - SplFileInfo::getRealPath の例
  • Example#3783 - SplFileInfo::getSize の例
  • Example#3784 - SplFileInfo::getType の例
  • Example#3785 - SplFileInfo::isDir の例
  • Example#3786 - SplFileInfo::isExecutable の例
  • Example#3787 - SplFileInfo::isFile の例
  • Example#3788 - SplFileInfo::isLink の例
  • Example#3789 - SplFileInfo::isReadable の例
  • Example#3790 - SplFileInfo::isWriteable の例
  • Example#3791 - SplFileInfo::openFile の例
  • Example#3792 - SplFileInfo::setFileClass の例
  • Example#3793 - SplFileInfo::setFileClass の例
  • Example#3794 - SplFileInfo::__toString の例
  • Example#3795 - SplFileObject::__construct の例
  • Example#3796 - SplFileObject::current の例
  • Example#3797 - SplFileObject::eof の例
  • Example#3798 - SplFileObject::fflush の例
  • Example#3799 - SplFileObject::fgetc の例
  • Example#3800 - SplFileObject::fgetcsv の例
  • Example#3801 - SplFileObject::READ_CSV の例
  • Example#3802 - SplFileObject::fgets の例
  • Example#3803 - SplFileObject::fgetss の例
  • Example#3804 - SplFileObject::flock の例
  • Example#3805 - SplFileObject::fpassthru の例
  • Example#3806 - SplFileObject::fputcsv の例
  • Example#3807 - SplFileObject::fread の例
  • Example#3808 - SplFileObject::fscanf の例
  • Example#3809 - SplFileObject::fseek の例
  • Example#3810 - SplFileObject::fstat の例
  • Example#3811 - SplFileObject::ftell の例
  • Example#3812 - SplFileObject::ftruncate の例
  • Example#3813 - SplFileObject::fwrite の例
  • Example#3814 - SplFileObject::getCsvControl の例
  • Example#3815 - SplFileObject::getFlags の例
  • Example#3816 - SplFileObject::getMaxLineLen の例
  • Example#3817 - SplFileObject::key の例
  • Example#3818 - SplFileObject::setMaxLineLen による SplFileObject::key の例
  • Example#3819 - SplFileObject::next の例
  • Example#3820 - SplFileObject::rewind の例
  • Example#3821 - SplFileObject::seek の例
  • Example#3822 - SplFileObject::setCsvControl の例
  • Example#3823 - SplFileObject::setFlags の例
  • Example#3824 - SplFileObject::setMaxLineLen の例
  • Example#3825 - SplFileObject::valid の例
  • Example#3826 - SplTempFileObject の例
  • Example#3827 - ArrayObject::append の例
  • Example#3828 - ArrayObject::asort の例
  • Example#3829 - ArrayObject::__construct の例
  • Example#3830 - ArrayObject::count の例
  • Example#3831 - ArrayObject::exchangeArray の例
  • Example#3832 - ArrayObject::getArrayCopy の例
  • Example#3833 - ArrayObject::getFlags の例
  • Example#3834 - ArrayObject::getIterator の例
  • Example#3835 - ArrayObject::getIteratorClass の例
  • Example#3836 - ArrayObject::ksort の例
  • Example#3837 - ArrayObject::natcasesort の例
  • Example#3838 - ArrayObject::natsort の例
  • Example#3839 - ArrayObject::offsetExists の例
  • Example#3840 - ArrayObject::offsetGet の例
  • Example#3841 - ArrayObject::offsetSet の例
  • Example#3842 - ArrayObject::offsetUnset の例
  • Example#3843 - ArrayObject::serialize の例
  • Example#3844 - ArrayObject::setFlags の例
  • Example#3845 - ArrayObject::setIteratorClass の例
  • Example#3846 - ArrayObject::uasort の例
  • Example#3847 - ArrayObject::uksort の例
  • Example#3848 - file_get_contents を使って さまざまな場所からデータを取得する
  • Example#3849 - https のサーバーに対して POST リクエストを行う
  • Example#3850 - データを圧縮ファイルに書き込む
  • Example#3851 - グローバル変数の読み書き用のストリーム
  • Example#3852 - tar アーカイブのファイル一覧
  • Example#3853 - stream_bucket_prepend の例
  • Example#3854 - stream_context_create の使用
  • Example#3855 - stream_context_get_default の使用
  • Example#3856 - stream_context_get_options の例
  • Example#3857 - stream_context_get_params の例
  • Example#3858 - stream_context_set_default の例
  • Example#3859 - stream_context_set_options の例
  • Example#3860 - stream_copy_to_stream の例
  • Example#3861 - フィルタの適用される場所を制御する
  • Example#3862 - foo-bar.txt ストリームの文字を大文字化するフィルタ
  • Example#3863 - 複数のフィルタ名に対応する一般的なフィルタクラスを登録する
  • Example#3864 - ストリームの再フィルタリングを動的に行う
  • Example#3865 - stream_get_contents の例
  • Example#3866 - stream_get_filters を使用する
  • Example#3867 - fopen を使い、http 経由で stream_get_meta_data を使う例
  • Example#3868 - stream_socket_client を使い、https 経由で stream_get_meta_data を使う例
  • Example#3869 - stream_get_transports を使った例
  • Example#3870 - stream_get_wrappers の例
  • Example#3871 - ストリームラッパーのが存在するかどうかを調べる
  • Example#3872 - stream_is_local の例
  • Example#3873 - stream_isatty の例
  • Example#3874 - stream_notification_callback の例
  • Example#3875 - コマンドラインのダウンロードツール用のシンプルなプログレスバー
  • Example#3876 - stream_resolve_include_path の例
  • Example#3877 - stream_select の例
  • Example#3878 - stream_set_timeout の例
  • Example#3879 - stream_set_write_buffer の例
  • Example#3880 - stream_socket_client の例
  • Example#3881 - UDP 接続の使用
  • Example#3882 - stream_socket_enable_crypto の例
  • Example#3883 - stream_socket_pair の例
  • Example#3884 - stream_socket_recvfrom の例
  • Example#3885 - stream_socket_sendto の例
  • Example#3886 - TCP サーバーソケットの使用
  • Example#3887 - UDP サーバーソケットを利用する
  • Example#3888 - stream_socket_shutdown の例
  • Example#3889 - ストリームラッパーの登録方法
  • Example#3890 - Tidy の基本的な使用法
  • Example#3891 - tidy::getBody の例
  • Example#3892 - tidy::cleanrepair の例
  • Example#3893 - tidy::__construct の例
  • Example#3894 - tidy::diagnose の例
  • Example#3895 - tidy_get_error_buffer の例
  • Example#3896 - tidy::getConfig の例
  • Example#3897 - tidy_getopt の例
  • Example#3898 - すべてのオプションについてのドキュメントとデフォルト値をプリントする
  • Example#3899 - tidy::getStatus の例
  • Example#3900 - tidy::head の例
  • Example#3901 - tidy::html の例
  • Example#3902 - tidy::parseFile の例
  • Example#3903 - tidy::parseString の例
  • Example#3904 - tidy::repairFile の例
  • Example#3905 - tidy::repairString の例
  • Example#3906 - tidy::root の例
  • Example#3907 - tidyNode::getParent の例
  • Example#3908 - tidyNode::hasChildren の例
  • Example#3909 - tidyNode::hasSiblings の例
  • Example#3910 - HTML ドキュメントからの ASP コードの抽出
  • Example#3911 - HTML ドキュメントからのコメントの抽出
  • Example#3912 - HTML ドキュメントからの HTML コードの抽出
  • Example#3913 - HTML ドキュメントからの JSTE コードの抽出
  • Example#3914 - HTML ドキュメントからの PHP コードの抽出
  • Example#3915 - HTML ドキュメントからのテキストの抽出
  • Example#3916 - ob_tidyhandler の例
  • Example#3917 - tidy_access_count の例
  • Example#3918 - tidy_config_count の例
  • Example#3919 - tidy_error_count の例
  • Example#3920 - tidy_get_output の例
  • Example#3921 - tidy_warning_count の例
  • Example#3922 - tokenizer によるコメントの削除
  • Example#3923 - PhpToken::getTokenName の例
  • Example#3924 - PhpToken::is の例
  • Example#3925 - この関数に配列を渡す例
  • Example#3926 - PhpToken::isIgnorable example
  • Example#3927 - PhpToken::__toString の例
  • Example#3928 - PhpToken::tokenize の例
  • Example#3929 - Extending PhpToken
  • Example#3930 - token_get_all の例
  • Example#3931 - token_get_all の間違った使いかた
  • Example#3932 - 予約語を使ったクラスでの token_get_all の例
  • Example#3933 - token_name の例
  • Example#3934 - base64_decode の例
  • Example#3935 - base64_encode の例
  • Example#3936 - get_headers の例
  • Example#3937 - get_headers で HEAD を使う例
  • Example#3938 - get_meta_tags が何をパースするのか
  • Example#3939 - get_meta_tags が何を返すのか
  • Example#3940 - http_build_query の簡単な使用法
  • Example#3941 - 数値インデックス要素の場合での http_build_query
  • Example#3942 - 複雑な配列の場合での http_build_query
  • Example#3943 - オブジェクトの場合の http_build_query の使用
  • Example#3944 - parse_url の例
  • Example#3945 - parse_url でスキームを省略した例
  • Example#3946 - rawurldecode の例
  • Example#3947 - FTP URL へのパスワードの埋め込み
  • Example#3948 - rawurlencode の例 2
  • Example#3949 - urldecode の例
  • Example#3950 - urlencode の例
  • Example#3951 - urlencode および htmlentities の例
  • Example#3952 - 基本的な JavaScript の実行
  • Example#3953 - Yaml の例
  • Example#3954 - パースコールバックの例
  • Example#3955 - Emit callback example
  • Example#3956 - yaml_emit の例
  • Example#3957 - yaml_parse の例
  • Example#3958 - 標準的なアプリケーションのディレクトリ構造
  • Example#3959 - エントリ
  • Example#3960 - リライトルール
  • Example#3961 - アプリケーションの設定
  • Example#3962 - デフォルトのコントローラ
  • Example#3963 - デフォルトのビューテンプレート
  • Example#3964 - アプリケーションの実行
  • Example#3965 - PHP の配列の例
  • Example#3966 - ini ファイルの例
  • Example#3967 - Bootstrap の例
  • Example#3968 - Yaf_Application::bootstrap の例
  • Example#3969 - Yaf_Application::clearLastError の例
  • Example#3970 - ini ファイルの例
  • Example#3971 - Yaf_Application::__construct の例
  • Example#3972 - Yaf_Application::__construct の例
  • Example#3973 - Yaf_Application::environ の例
  • Example#3974 - Yaf_Application::execute の例
  • Example#3975 - Yaf_Application::getConfig の例
  • Example#3976 - Yaf_Application::getDispatcher の例
  • Example#3977 - Yaf_Application::getLastErrorMsg の例
  • Example#3978 - Yaf_Application::getLastErrorNo の例
  • Example#3979 - Yaf_Application::getModules の例
  • Example#3980 - ブートストラップの例
  • Example#3981 - Yaf_Dispatcher::autoRender の例
  • Example#3982 - Yaf_Dispatcher::catchException の例
  • Example#3983 - Yaf_Dispatcher::registerPlugin の例
  • Example#3984 - カスタムビューエンジンの例
  • Example#3985 - Yaf_Dispatcher::setView の例
  • Example#3986 - Yaf_Dispatcher::throwexception の例
  • Example#3987 - Yaf_Dispatcher::throwexception の例
  • Example#3988 - Yaf_Config_Ini の例
  • Example#3989 - 別ファイルでのアクションの定義
  • Example#3990 - Dummy_action.php
  • Example#3991 - Yaf_Controller_Abstract::forward の例
  • Example#3992 - Yaf_Action_Abstract::execute の例
  • Example#3993 - Yaf_Action_Abstract::execute の例
  • Example#3994 - Yaf_View_Simple::assign の例
  • Example#3995 - テンプレートの例
  • Example#3996 - Yaf_View_Simple::assignRef の例
  • Example#3997 - テンプレートの例
  • Example#3998 - Yaf_View_Simple::clear の例
  • Example#3999 - Yaf_View_Simple::__constructor の例
  • Example#4000 - Yaf_View_Simple::__set の例
  • Example#4001 - 設定の例
  • Example#4002 - localnamespace の登録
  • Example#4003 - クラスのロード
  • Example#4004 - 名前空間つきのクラスのロード
  • Example#4005 - MVC クラスのロード
  • Example#4006 - MVC クラスかどうかの区別
  • Example#4007 - MVC のロード
  • Example#4008 - Yaf_Loader::registerNamespaceexample
  • Example#4009 - Yaf_Loader::registerLocalNamespace の例
  • Example#4010 - Yaf_Loader::registerNamespaceexample
  • Example#4011 - プラグインの例
  • Example#4012 - Yaf_Plugin_Abstract::routerShutdown の例
  • Example#4013 - Yaf_Response_Abstract::appendBody の例
  • Example#4014 - Yaf_Response_Abstract::getBody の例
  • Example#4015 - Yaf_Response_Abstract::prependBody の例
  • Example#4016 - Yaf_Response_Abstract::response の例
  • Example#4017 - Yaf_Response_Abstract::setBody の例
  • Example#4018 - Yaf_Route_Map::assemble の例
  • Example#4019 - Yaf_Route_Map の例
  • Example#4020 - Yaf_Route_Map の例
  • Example#4021 - Yaf_Route_Map の例
  • Example#4022 - Yaf_Route_Regex::assemble の例
  • Example#4023 - Yaf_Route_Regex の例
  • Example#4024 - Yaf_Route_Regex (2.3.0 以降) の例
  • Example#4025 - Yaf_Route_Regex と名前付きキャプチャグループ (2.3.0 以降) の例example
  • Example#4026 - Yaf_Route_Regex の例
  • Example#4027 - Yaf_Route_Rewrite::assemble の例
  • Example#4028 - Yaf_Route_Rewrite の例
  • Example#4029 - Yaf_Route_Rewrite の例
  • Example#4030 - Yaf_Route_Rewrite (2.3.0 以降) の例
  • Example#4031 - Apache 用のリライトルール
  • Example#4032 - Apache 用のリライトルール
  • Example#4033 - Lighttpd 用のリライトルール
  • Example#4034 - Nginx 用のリライトルール
  • Example#4035 - Yaf_Route_Static のデフォルトルート
  • Example#4036 - application.ini の例
  • Example#4037 - Yaf_Dispatcher::autoConfig の例
  • Example#4038 - Yaf_Dispatcher::autoRender の例
  • Example#4039 - ブートストラップでのルートの登録
  • Example#4040 - プラグイン Dummy.php (application.directory/plugins 配下)
  • Example#4041 - Yaf_Route_Simple::assemble の例
  • Example#4042 - Yaf_Route_Simple::route の例
  • Example#4043 - Yaf_Route_Simple::routeexample
  • Example#4044 - Yaf_Route_Static::assemble の例
  • Example#4045 - Yaf_Route_Static::route の例
  • Example#4046 - Yaf_Route_Supervar::assemble の例
  • Example#4047 - Yaf_Route_Supervar の例
  • Example#4048 - INI ファイルの例
  • Example#4049 - INI セクションの例
  • Example#4050 - INIexample
  • Example#4051 - taint の例
  • Example#4052 - Vector
  • Example#4053 - Map
  • Example#4054 - Ds\Collection::clear example
  • Example#4055 - Ds\Collection::copy example
  • Example#4056 - Ds\Collection::isEmpty example
  • Example#4057 - Ds\Collection::toArray example
  • Example#4058 - Ds\Hashable::hash example
  • Example#4059 - Ds\Sequence::allocate example
  • Example#4060 - Ds\Sequence::apply example
  • Example#4061 - Ds\Sequence::capacity example
  • Example#4062 - Ds\Sequence::contains example
  • Example#4063 - Ds\Sequence::filter example using callback function
  • Example#4064 - Ds\Sequence::filter example without a callback function
  • Example#4065 - Ds\Sequence::find example
  • Example#4066 - Ds\Sequence::first example
  • Example#4067 - Ds\Sequence::get example
  • Example#4068 - Ds\Sequence::get example using array syntax
  • Example#4069 - Ds\Sequence::insert example
  • Example#4070 - Ds\Sequence::join example using a separator string
  • Example#4071 - Ds\Sequence::join example without a separator string
  • Example#4072 - Ds\Sequence::last example
  • Example#4073 - Ds\Sequence::map example
  • Example#4074 - Ds\Sequence::merge example
  • Example#4075 - Ds\Sequence::pop example
  • Example#4076 - Ds\Sequence::push example
  • Example#4077 - Ds\Sequence::reduce with initial value example
  • Example#4078 - Ds\Sequence::reduce without an initial value example
  • Example#4079 - Ds\Sequence::remove example
  • Example#4080 - Ds\Sequence::reverse example
  • Example#4081 - Ds\Sequence::reversed example
  • Example#4082 - Ds\Sequence::rotate example
  • Example#4083 - Ds\Sequence::set example
  • Example#4084 - Ds\Sequence::set example using array syntax
  • Example#4085 - Ds\Sequence::shift example
  • Example#4086 - Ds\Sequence::slice example
  • Example#4087 - Ds\Sequence::sort example
  • Example#4088 - Ds\Sequence::sort example using a comparator
  • Example#4089 - Ds\Sequence::sorted example
  • Example#4090 - Ds\Sequence::sorted example using a comparator
  • Example#4091 - Ds\Sequence::sum integer example
  • Example#4092 - Ds\Sequence::sum float example
  • Example#4093 - Ds\Sequence::unshift example
  • Example#4094 - Ds\Vector::allocate example
  • Example#4095 - Ds\Vector::apply example
  • Example#4096 - Ds\Vector::capacity example
  • Example#4097 - Ds\Vector::clear example
  • Example#4098 - Ds\Vector::__construct example
  • Example#4099 - Ds\Vector::contains example
  • Example#4100 - Ds\Vector::copy example
  • Example#4101 - Ds\Vector::filter example using callback function
  • Example#4102 - Ds\Vector::filter example without a callback function
  • Example#4103 - Ds\Vector::find example
  • Example#4104 - Ds\Vector::first example
  • Example#4105 - Ds\Vector::get example
  • Example#4106 - Ds\Vector::get example using array syntax
  • Example#4107 - Ds\Vector::insert example
  • Example#4108 - Ds\Vector::isEmpty example
  • Example#4109 - Ds\Vector::join example using a separator string
  • Example#4110 - Ds\Vector::join example without a separator string
  • Example#4111 - Ds\Vector::last example
  • Example#4112 - Ds\Vector::map example
  • Example#4113 - Ds\Vector::merge example
  • Example#4114 - Ds\Vector::pop example
  • Example#4115 - Ds\Vector::push example
  • Example#4116 - Ds\Vector::reduce with initial value example
  • Example#4117 - Ds\Vector::reduce without an initial value example
  • Example#4118 - Ds\Vector::remove example
  • Example#4119 - Ds\Vector::reverse example
  • Example#4120 - Ds\Vector::reversed example
  • Example#4121 - Ds\Vector::rotate example
  • Example#4122 - Ds\Vector::set example
  • Example#4123 - Ds\Vector::set example using array syntax
  • Example#4124 - Ds\Vector::shift example
  • Example#4125 - Ds\Vector::slice example
  • Example#4126 - Ds\Vector::sort example
  • Example#4127 - Ds\Vector::sort example using a comparator
  • Example#4128 - Ds\Vector::sorted example
  • Example#4129 - Ds\Vector::sorted example using a comparator
  • Example#4130 - Ds\Vector::sum integer example
  • Example#4131 - Ds\Vector::sum float example
  • Example#4132 - Ds\Vector::toArray example
  • Example#4133 - Ds\Vector::unshift example
  • Example#4134 - Ds\Deque::allocate example
  • Example#4135 - Ds\Deque::apply example
  • Example#4136 - Ds\Deque::capacity example
  • Example#4137 - Ds\Deque::clear example
  • Example#4138 - Ds\Deque::__construct example
  • Example#4139 - Ds\Deque::contains example
  • Example#4140 - Ds\Deque::copy example
  • Example#4141 - Ds\Deque::filter example using callback function
  • Example#4142 - Ds\Deque::filter example without a callback function
  • Example#4143 - Ds\Deque::find example
  • Example#4144 - Ds\Deque::first example
  • Example#4145 - Ds\Deque::get example
  • Example#4146 - Ds\Deque::get example using array syntax
  • Example#4147 - Ds\Deque::insert example
  • Example#4148 - Ds\Deque::isEmpty example
  • Example#4149 - Ds\Deque::join example using a separator string
  • Example#4150 - Ds\Deque::join example without a separator string
  • Example#4151 - Ds\Deque::last example
  • Example#4152 - Ds\Deque::map example
  • Example#4153 - Ds\Deque::merge example
  • Example#4154 - Ds\Deque::pop example
  • Example#4155 - Ds\Deque::push example
  • Example#4156 - Ds\Deque::reduce with initial value example
  • Example#4157 - Ds\Deque::reduce without an initial value example
  • Example#4158 - Ds\Deque::remove example
  • Example#4159 - Ds\Deque::reverse example
  • Example#4160 - Ds\Deque::reversed example
  • Example#4161 - Ds\Deque::rotate example
  • Example#4162 - Ds\Deque::set example
  • Example#4163 - Ds\Deque::set example using array syntax
  • Example#4164 - Ds\Deque::shift example
  • Example#4165 - Ds\Deque::slice example
  • Example#4166 - Ds\Deque::sort example
  • Example#4167 - Ds\Deque::sort example using a comparator
  • Example#4168 - Ds\Deque::sorted example
  • Example#4169 - Ds\Deque::sorted example using a comparator
  • Example#4170 - Ds\Deque::sum integer example
  • Example#4171 - Ds\Deque::sum float example
  • Example#4172 - Ds\Deque::toArray example
  • Example#4173 - Ds\Deque::unshift example
  • Example#4174 - Ds\Map::allocate example
  • Example#4175 - Ds\Map::apply example
  • Example#4176 - Ds\Map::capacity example
  • Example#4177 - Ds\Map::clear example
  • Example#4178 - Ds\Map::__construct example
  • Example#4179 - Ds\Map::copy example
  • Example#4180 - Ds\Map::diff example
  • Example#4181 - Ds\Map::filter example using callback function
  • Example#4182 - Ds\Map::filter example without a callback function
  • Example#4183 - Ds\Map::first example
  • Example#4184 - Ds\Map::get example
  • Example#4185 - Ds\Map::get example using array syntax
  • Example#4186 - Ds\Map::hasKey example
  • Example#4187 - Ds\Map::hasValue example
  • Example#4188 - Ds\Map::intersect example
  • Example#4189 - Ds\Map::isEmpty example
  • Example#4190 - Ds\Map::keys example
  • Example#4191 - Ds\Map::ksort example
  • Example#4192 - Ds\Map::ksort example using a comparator
  • Example#4193 - Ds\Map::ksorted example
  • Example#4194 - Ds\Map::ksorted example using a comparator
  • Example#4195 - Ds\Map::last example
  • Example#4196 - Ds\Map::map example
  • Example#4197 - Ds\Map::merge example
  • Example#4198 - Ds\Map::pairs example
  • Example#4199 - Ds\Map::put example
  • Example#4200 - Ds\Map::put example using objects as keys
  • Example#4201 - Ds\Map::putAll example
  • Example#4202 - Ds\Map::reduce with initial value example
  • Example#4203 - Ds\Map::reduce without an initial value example
  • Example#4204 - Ds\Map::remove example
  • Example#4205 - Ds\Map::reverse example
  • Example#4206 - Ds\Map::reversed example
  • Example#4207 - Ds\Map::skip example
  • Example#4208 - Ds\Map::slice example
  • Example#4209 - Ds\Map::sort example
  • Example#4210 - Ds\Map::sort example using a comparator
  • Example#4211 - Ds\Map::sort example
  • Example#4212 - Ds\Map::sort example using a comparator
  • Example#4213 - Ds\Map::sum integer example
  • Example#4214 - Ds\Map::sum float example
  • Example#4215 - Ds\Map::toArray example
  • Example#4216 - Ds\Map::union example
  • Example#4217 - Ds\Map::values example
  • Example#4218 - Ds\Map::xor example
  • Example#4219 - Ds\Pair::clear example
  • Example#4220 - Ds\Pair::copy example
  • Example#4221 - Ds\Pair::isEmpty example
  • Example#4222 - Ds\Pair::toArray example
  • Example#4223 - Ds\Set::add example using integers
  • Example#4224 - Ds\Set::add example using objects
  • Example#4225 - Ds\Set::allocate example
  • Example#4226 - Ds\Set::capacity example
  • Example#4227 - Ds\Set::clear example
  • Example#4228 - Ds\Set::__construct example
  • Example#4229 - Ds\Set::contains example
  • Example#4230 - Ds\Set::copy example
  • Example#4231 - Ds\Set::diff example
  • Example#4232 - Ds\Set::filter example using callback function
  • Example#4233 - Ds\Set::filter example without a callback function
  • Example#4234 - Ds\Set::first example
  • Example#4235 - Ds\Set::get example
  • Example#4236 - Ds\Set::get example using array syntax
  • Example#4237 - Ds\Set::intersect example
  • Example#4238 - Ds\Set::isEmpty example
  • Example#4239 - Ds\Set::join example using a separator string
  • Example#4240 - Ds\Set::join example without a separator string
  • Example#4241 - Ds\Set::last example
  • Example#4242 - Ds\Set::merge example
  • Example#4243 - Ds\Set::reduce with initial value example
  • Example#4244 - Ds\Set::reduce without an initial value example
  • Example#4245 - Ds\Set::remove example
  • Example#4246 - Ds\Set::reverse example
  • Example#4247 - Ds\Set::reversed example
  • Example#4248 - Ds\Set::slice example
  • Example#4249 - Ds\Set::sort example
  • Example#4250 - Ds\Set::sort example using a comparator
  • Example#4251 - Ds\Set::sorted example
  • Example#4252 - Ds\Set::sorted example using a comparator
  • Example#4253 - Ds\Set::sum integer example
  • Example#4254 - Ds\Set::sum float example
  • Example#4255 - Ds\Set::toArray example
  • Example#4256 - Ds\Set::union example
  • Example#4257 - Ds\Set::xor example
  • Example#4258 - Ds\Stack::clear example
  • Example#4259 - Ds\Stack::__construct example
  • Example#4260 - Ds\Stack::copy example
  • Example#4261 - Ds\Stack::isEmpty example
  • Example#4262 - Ds\Stack::peek example
  • Example#4263 - Ds\Stack::pop example
  • Example#4264 - Ds\Stack::push example
  • Example#4265 - Ds\Stack::toArray example
  • Example#4266 - Ds\Queue::allocate example
  • Example#4267 - Ds\Queue::capacity example
  • Example#4268 - Ds\Queue::clear example
  • Example#4269 - Ds\Queue::__construct example
  • Example#4270 - Ds\Queue::copy example
  • Example#4271 - Ds\Queue::isEmpty example
  • Example#4272 - Ds\Queue::peek example
  • Example#4273 - Ds\Queue::pop example
  • Example#4274 - Ds\Queue::push example
  • Example#4275 - Ds\Queue::toArray example
  • Example#4276 - Ds\PriorityQueue::allocate example
  • Example#4277 - Ds\PriorityQueue::capacity example
  • Example#4278 - Ds\PriorityQueue::clear example
  • Example#4279 - Ds\PriorityQueue::__construct example
  • Example#4280 - Ds\PriorityQueue::copy example
  • Example#4281 - Ds\PriorityQueue::isEmpty example
  • Example#4282 - Ds\PriorityQueue::peek example
  • Example#4283 - Ds\PriorityQueue::pop example
  • Example#4284 - Ds\PriorityQueue::push example
  • Example#4285 - Ds\PriorityQueue::toArray example
  • Example#4286 - var_representation Examples
  • Example#4287 - Escaping control characters
  • Example#4288 - Exporting stdClass
  • Example#4289 - Exporting classes
  • Example#4290 - Using __set_state()
  • Example#4291 - PHP の cURL モジュールを使用して example.com のホームページを取得する
  • Example#4292 - 新しい cURL セッションの初期化とウェブページの取得
  • Example#4293 - cURL ハンドルのコピー
  • Example#4294 - curl_errno の例
  • Example#4295 - curl_error の例
  • Example#4296 - curl_escape の例
  • Example#4297 - ウェブページの取得
  • Example#4298 - curl_getinfo の例
  • Example#4299 - curl_getinfo で option パラメータを使う例
  • Example#4300 - 新しい cURL セッションを初期化し、ウェブページを取得する
  • Example#4301 - curl_multi_add_handle の例
  • Example#4302 - curl_multi_close の例
  • Example#4303 - curl_multi_exec の例
  • Example#4304 - curl_multi_info_read の例
  • Example#4305 - curl_multi_init の例
  • Example#4306 - curl_multi_strerror の例
  • Example#4307 - curl_reset の例
  • Example#4308 - 新規に cURL セッションを初期化、ウェブページを取得する
  • Example#4309 - 新規に CURL セッションを初期化、ウェブページを取得する
  • Example#4310 - curl_share_setopt の例
  • Example#4311 - curl_share_init の例
  • Example#4312 - curl_share_setopt の例
  • Example#4313 - curl_errno の例
  • Example#4314 - curl_escape の例
  • Example#4315 - curl_upkeep の例
  • Example#4316 - curl_version の例
  • Example#4317 - CURLFile::__construct の例
  • Example#4318 - CURLFile::__construct で、複数のファイルをアップロードする例
  • Example#4319 - CURLStringFile::__construct の例
  • Example#4320 - Simple HTTP client
  • Example#4321 - HTTP client using asynchronous DNS resolver
  • Example#4322 - Echo server
  • Example#4323 - SSL echo server
  • Example#4324 - Signal handler
  • Example#4325 - Use libevent's loop to process requests of `eio' extension
  • Example#4326 - Miscellaneous
  • Example#4327 - Simple HTTP server
  • Example#4328 - Simple HTTPS server
  • Example#4329 - OpenSSL connection
  • Example#4330 - EventHttpConnection::makeRequest example
  • Example#4331 - Connection listener based on a UNIX domain socket
  • Example#4332 - Simple SMTP server
  • Example#4333 - Handling SIGTERM signal
  • Example#4334 - Adding a custom signal
  • Example#4335 - Adding a timer
  • Example#4336 - EventBase::getFeatures example
  • Example#4337 - EventBase::getMethod example
  • Example#4338 - EventBuffer::search example
  • Example#4339 - EventBufferEvent::connect example
  • Example#4340 - Connect to UNIX domain socket which presumably is served by a server, read response from the server and output it to the console
  • Example#4341 - EventBufferEvent::connectHost example
  • Example#4342 - Buffer event's read callback
  • Example#4343 - EventBufferEvent::getOutput example
  • Example#4344 - EventBufferEvent::sslError example
  • Example#4345 - Simple SMTP server
  • Example#4346 - EventConfig::avoidMethod example
  • Example#4347 - EventConfig::__construct example
  • Example#4348 - EventConfig::requireFeatures example
  • Example#4349 - EventHttp::accept example
  • Example#4350 - EventHttp::addServerAlias example
  • Example#4351 - EventHttp::bind example
  • Example#4352 - Simple HTTP server
  • Example#4353 - EventHttp::setCallback example
  • Example#4354 - EventHttp::setDefaultCallback example
  • Example#4355 - EventHttpConnection::makeRequest example
  • Example#4356 - EventHttpConnection::setCloseCallback example
  • Example#4357 - EventHttpRequest::__construct example
  • Example#4358 - EventHttpRequest::sendError example
  • Example#4359 - EventListener::__construct example
  • Example#4360 - EventSslContext::__construct example
  • Example#4361 - FTP の例
  • Example#4362 - ftp_alloc の例
  • Example#4363 - ftp_cdup の例
  • Example#4364 - ftp_chdir の例
  • Example#4365 - ftp_chmod の例
  • Example#4366 - ftp_close の例
  • Example#4367 - ftp_connect の例
  • Example#4368 - ftp_delete の例
  • Example#4369 - ftp_exec の例
  • Example#4370 - ftp_fget の例
  • Example#4371 - ftp_fput の例
  • Example#4372 - ftp_get の例
  • Example#4373 - ftp_get_option の例
  • Example#4374 - ftp_login の例
  • Example#4375 - ftp_mdtm の例
  • Example#4376 - ftp_mkdir の例
  • Example#4377 - ftp_mlsd の例
  • Example#4378 - ftp_nb_continue の例
  • Example#4379 - ftp_nb_fget の例
  • Example#4380 - ftp_nb_fput の例
  • Example#4381 - ftp_nb_get の例
  • Example#4382 - ftp_nb_get でダウンロードを再開する
  • Example#4383 - ftp_nb_get を用い、ファイルの 100 バイト目以降から ダウンロードを再開する
  • Example#4384 - ftp_nb_put の例
  • Example#4385 - ftp_nb_put でアップロードを再開する
  • Example#4386 - ftp_nlist の例
  • Example#4387 - ftp_pasv の例
  • Example#4388 - ftp_put の例
  • Example#4389 - ftp_pwd の例
  • Example#4390 - ftp_raw を用いて FTP サーバーに手動でログインする
  • Example#4391 - ftp_rawlist の例
  • Example#4392 - ftp_rename の例
  • Example#4393 - ftp_rmdir の例
  • Example#4394 - ftp_set_option の例
  • Example#4395 - SITE コマンドを FTP サーバーに送信する
  • Example#4396 - ftp_size の例
  • Example#4397 - ftp_ssl_connect の例
  • Example#4398 - ftp_systype の例
  • Example#4399 - Basic Gearman client and worker
  • Example#4400 - Basic Gearman client and worker, background
  • Example#4401 - Basic Gearman client and worker, submitting tasks
  • Example#4402 - Adding two job servers
  • Example#4403 - Add two job servers
  • Example#4404 - Basic submission of two tasks
  • Example#4405 - Basic submission of two tasks with passing application context
  • Example#4406 - Two tasks, one background and one not
  • Example#4407 - A high priority task along with two normal tasks
  • Example#4408 - A low priority task along with two normal tasks
  • Example#4409 - Monitor completion of multiple background tasks
  • Example#4410 - Simple job submission with immediate return
  • Example#4411 - Submitting a job and retrieving incremental status
  • Example#4412 - Submit and monitor a background job
  • Example#4413 - Simple job submission with immediate return
  • Example#4414 - Submitting a job and retrieving incremental status
  • Example#4415 - Get the status of a long running job
  • Example#4416 - Monitor the status of a long running background job
  • Example#4417 - Simple worker making use of extra application context data
  • Example#4418 - Add alternate Gearman servers
  • Example#4419 - Add two job servers
  • Example#4420 - GearmanWorker::setId example
  • Example#4421 - A simple worker with a 5 second timeout
  • Example#4422 - Running worker in non-blocking mode
  • Example#4423 - GearmanWorker::work example
  • Example#4424 - ページ分けされた結果コントロールがサポートされているかをテストする
  • Example#4425 - LDAP 検索の例
  • Example#4426 - policy(パスワードポリシー) 情報とバインドする
  • Example#4427 - 空でない場合に限って、説明を変更する
  • Example#4428 - 削除する前に、いくつか値を読み取る
  • Example#4429 - 参照を削除する
  • Example#4430 - 検索結果を複数ページに分割する
  • Example#4431 - 認証型バインドの例
  • Example#4432 - LDAP バインドの使用
  • Example#4433 - LDAP 匿名バインドの使用
  • Example#4434 - パスワード確認の例
  • Example#4435 - LDAP サーバーに接続する例
  • Example#4436 - LDAP サーバーへのセキュアな接続の例
  • Example#4437 - LDAP ページネーション
  • Example#4438 - LDAP ページネーション
  • Example#4439 - ldap_count_entries の例
  • Example#4440 - 全ての LDAP エラーメッセージに番号をふる
  • Example#4441 - エラーを生成し、取得する
  • Example#4442 - Eメールアドレスを検索する
  • Example#4443 - Whoami 拡張オペレーション
  • Example#4444 - PASSWD 拡張オペレーション
  • Example#4445 - 特定のディレクトリエントリに関して保持されている属性のリストを表示
  • Example#4446 - プロトコルのバージョンを調べる
  • Example#4447 - あるディレクトリエントリの全ての "mail" 属性の一覧を表示する
  • Example#4448 - ある組織の全ての組織単位を一覧表示する
  • Example#4449 - contact に電話番号を追加する
  • Example#4450 - ユーザーの名前を変更する
  • Example#4451 - ユーザーにEメールアドレスを2つ追加する
  • Example#4452 - ユーザーのパスワードを変更する
  • Example#4453 - ユーザーのパスワードを変更する(Active Directory)
  • Example#4454 - ldap_parse_result の例
  • Example#4455 - LDAP 検索
  • Example#4456 - プロトコルバージョンの設定
  • Example#4457 - サーバーコントロールの設定
  • Example#4458 - LDAP のソート
  • Example#4459 - memcache 拡張モジュールの概要
  • Example#4460 - memcache セッションハンドラの使用例
  • Example#4461 - Memcache::add の例
  • Example#4462 - Memcache::addServer の例
  • Example#4463 - Memcache::close の例
  • Example#4464 - Memcache::connect の例
  • Example#4465 - Memcache::decrement の例
  • Example#4466 - Memcache::delete の例
  • Example#4467 - Memcache::flush の例
  • Example#4468 - Memcache::get の例
  • Example#4469 - Memcache::getExtendedStats の例
  • Example#4470 - Memcache::getServerStatus の例
  • Example#4471 - Memcache::getVersion の例
  • Example#4472 - Memcache::increment の例
  • Example#4473 - Memcache::pconnect の例
  • Example#4474 - Memcache::replace の例
  • Example#4475 - Memcache::set の例
  • Example#4476 - Memcache::set の例
  • Example#4477 - Memcache::setCompressThreshold の例
  • Example#4478 - Memcache::setServerParams の例
  • Example#4479 - Result コールバックの例
  • Example#4480 - Read-through コールバックの例
  • Example#4481 - Memcached::addServer の例
  • Example#4482 - Memcached::addServers の例
  • Example#4483 - Memcached::append の例
  • Example#4484 - Memcached::cas の例
  • Example#4485 - Memcached オブジェクトの作成
  • Example#4486 - Memcached::decrement の例
  • Example#4487 - Memcached::delete の例
  • Example#4488 - Memcached::fetch の例
  • Example#4489 - Memcached::getDelayed の例
  • Example#4490 - Memcached::flush の例
  • Example#4491 - Memcached::get の例 #1
  • Example#4492 - Memcached::get の例 #2
  • Example#4493 - Memcached::getDelayed の例
  • Example#4494 - Memcached::getMulti example for Memcached v3
  • Example#4495 - Memcached::getMulti example for Memcached v1 and v2
  • Example#4496 - Memcached v3 用の Memcached::GET_PRESERVE_ORDER の例
  • Example#4497 - Memcached v1 および v2 用の Memcached::GET_PRESERVE_ORDER の例
  • Example#4498 - Memcached オプションの取得
  • Example#4499 - Memcached::getResultCode の例
  • Example#4500 - Memcached::getResultMessageメソッドの例
  • Example#4501 - Memcached::getServerByKey の例
  • Example#4502 - Memcached::getServerList の例
  • Example#4503 - Memcached::getStats の例
  • Example#4504 - Memcached::getVersion の例
  • Example#4505 - Memcached::increment の例
  • Example#4506 - Memcached::prepend の例
  • Example#4507 - Memcached::set の例
  • Example#4508 - Memcached::setByKey の例
  • Example#4509 - Memcached::setMulti の例
  • Example#4510 - Memcached オプションの設定
  • Example#4511 - Memcached オプションの設定
  • Example#4512 - mqseries_back の例
  • Example#4513 - mqseries_begin の例
  • Example#4514 - mqseries_close の例
  • Example#4515 - mqseries_cmit の例
  • Example#4516 - mqseries_conn の例
  • Example#4517 - mqseries_connx example
  • Example#4518 - mqseries_connx example using SSL connection & OCSP Responder URL
  • Example#4519 - mqseries_disc の例
  • Example#4520 - mqseries_get example
  • Example#4521 - mqseries_inq の例
  • Example#4522 - mqseries_open の例
  • Example#4523 - mqseries_put の例
  • Example#4524 - mqseries_strerror の例
  • Example#4525 - dns_get_record の使用
  • Example#4526 - dns_get_record と DNS_ANY の使用
  • Example#4527 - fsockopen の例
  • Example#4528 - UDP 接続の使用法
  • Example#4529 - 単純な gethostbyaddr の例
  • Example#4530 - 単純な gethostbyname の例
  • Example#4531 - gethostbynamel の例
  • Example#4532 - 簡単な gethostname 関数の使用例
  • Example#4533 - getprotobyname の例
  • Example#4534 - getservbyname の例
  • Example#4535 - ダウンロードダイアログ
  • Example#4536 - キャッシュディレクティブ
  • Example#4537 - クッキーを設定する
  • Example#4538 - header_register_callback の例
  • Example#4539 - 特定のヘッダを削除する
  • Example#4540 - 以前設定したすべてヘッダを削除する
  • Example#4541 - Example using headers_list
  • Example#4542 - headers_sent 関数の使用例
  • Example#4543 - Web サーバー環境における http_response_code の使用例
  • Example#4544 - CLI 環境における http_response_code の使用例
  • Example#4545 - inet_ntop の例
  • Example#4546 - inet_pton の例
  • Example#4547 - ip2long の例
  • Example#4548 - IP アドレスの表示
  • Example#4549 - setcookie での送信の例
  • Example#4550 - setcookie による削除の例
  • Example#4551 - setcookie と配列
  • Example#4552 - syslog の使用例
  • Example#4553 - Procedural usage of rrd
  • Example#4554 - OO usage of rrd
  • Example#4555 - RRDGraph::setOptions example
  • Example#4556 - Set multiple color options
  • Example#4557 - RRDUpdater::update examples
  • Example#4558 - 収集された呼び出しを取得する
  • Example#4559 - scoutapm が情報を収集する関数の一覧を取得する
  • Example#4560 - snmp_get_quick_print の例
  • Example#4561 - snmp_get_valueretrieval の使用法
  • Example#4562 - snmp_read_mib の使用法
  • Example#4563 - snmp_set_enum_print の使用法
  • Example#4564 - snmprealwalk の使用法
  • Example#4565 - snmp_set_quick_print の使用例
  • Example#4566 - snmp_set_valueretrieval の使用法
  • Example#4567 - snmp2_get の使用法
  • Example#4568 - snmp2_get_next の使用法
  • Example#4569 - snmp2_real_walk の使用法
  • Example#4570 - snmp2_set の使用法
  • Example#4571 - BITS SNMP オブジェクト ID を設定した snmp2_set の使用法
  • Example#4572 - snmp2_pwalk の例
  • Example#4573 - snmp3_get の使用法
  • Example#4574 - snmp3_getnext の使用法
  • Example#4575 - snmp3_real_walk の使用法
  • Example#4576 - snmp3_set の使用法
  • Example#4577 - BITS SNMP オブジェクト ID を設定した snmp3_set の使用法
  • Example#4578 - snmp3_walk の例
  • Example#4579 - snmpget の使用例
  • Example#4580 - snmpgetnext の使用法
  • Example#4581 - snmprealwalk の使用法
  • Example#4582 - snmpset の使用法
  • Example#4583 - BITS SNMP オブジェクト ID を設定した snmpset の使用法
  • Example#4584 - snmpwalk の例
  • Example#4585 - snmpwalkoid の例
  • Example#4586 - SNMP::close の例
  • Example#4587 - sysLocation の取得
  • Example#4588 - 単一の SNMP オブジェクト
  • Example#4589 - 複数の SNMP オブジェクト
  • Example#4590 - SNMP::getErrno の例
  • Example#4591 - SNMP::getError の例
  • Example#4592 - 単一の SNMP オブジェクト
  • Example#4593 - 複数の SNMP オブジェクト
  • Example#4594 - 単一の SNMP オブジェクト ID の設定
  • Example#4595 - 単一の SNMP::set コールによる複数の値の設定
  • Example#4596 - BITS SNMP オブジェクト ID の設定による SNMP::set の使用法
  • Example#4597 - SNMP::setSecurity の例
  • Example#4598 - SNMP::walk の例
  • Example#4599 - suffixAsKey の例
  • Example#4600 - ソケットの例: 簡易 TCP/IP サーバー
  • Example#4601 - ソケットの例: 簡易 TCP/IP クライアント
  • Example#4602 - ソースアドレスを設定するために socket_atmark を使う例
  • Example#4603 - socket_bind を使用してソースアドレスを指定する
  • Example#4604 - socket_create_pair の例
  • Example#4605 - socket_create_pair での IPC の例
  • Example#4606 - socket_get_option の例
  • Example#4607 - socket_import_stream の例
  • Example#4608 - socket_last_error の例
  • Example#4609 - socket_recv の例
  • Example#4610 - socket_recvfrom の例
  • Example#4611 - socket_select での null の使用
  • Example#4612 - socket_select の返す結果を知る
  • Example#4613 - socket_select の例
  • Example#4614 - socket_sendto の例
  • Example#4615 - socket_set_block の例
  • Example#4616 - socket_set_nonblock の例
  • Example#4617 - socket_set_option の例
  • Example#4618 - socket_strerror の例
  • Example#4619 - ssh agent による認証
  • Example#4620 - ホスト公開鍵を使用した認証
  • Example#4621 - 認証メソッドの一覧の取得
  • Example#4622 - パスワードを用いた認証
  • Example#4623 - 公開鍵を用いた認証
  • Example#4624 - ssh2_connect の例
  • Example#4625 - コマンドの実行
  • Example#4626 - シェルをオープンし、それと関連付けられた stderr ストリームを処理する
  • Example#4627 - 既知の値に対するフィンガープリントのチェック
  • Example#4628 - どのメソッドでネゴシエートされたかの判定
  • Example#4629 - ssh2_publickey_add で公開鍵を追加する
  • Example#4630 - 認証済みの鍵の一覧を ssh2_publickey_list で表示する
  • Example#4631 - SCP 経由でのファイルのダウンロード
  • Example#4632 - SCP 経由でのファイルのアップロード
  • Example#4633 - SFTP 経由でのファイルのオープン
  • Example#4634 - リモートサーバー上でのファイルのモード変更
  • Example#4635 - SFTP 経由でのシンボリックリンクの情報の取得
  • Example#4636 - リモートサーバー上へのディレクトリの作成
  • Example#4637 - シンボリックリンクの読み込み
  • Example#4638 - パス名の解決
  • Example#4639 - sftp 経由でのファイルの改名
  • Example#4640 - リモートサーバー上のディレクトリの削除
  • Example#4641 - SFTP 経由でのファイルの情報の取得
  • Example#4642 - シンボリックリンクの作成
  • Example#4643 - ファイルの削除
  • Example#4644 - 対話シェルのリクエスト
  • Example#4645 - 任意のホストへのトンネルのオープン
  • Example#4646 - オブジェクト指向型
  • Example#4647 - 手続き型
  • Example#4648 - stomp_connect_error example
  • Example#4649 - stomp_version example
  • Example#4650 - オブジェクト指向型
  • Example#4651 - 手続き型
  • Example#4652 - オブジェクト指向型
  • Example#4653 - 手続き型
  • Example#4654 - オブジェクト指向型
  • Example#4655 - 手続き型
  • Example#4656 - オブジェクト指向型
  • Example#4657 - 手続き型
  • Example#4658 - オブジェクト指向型
  • Example#4659 - 手続き型
  • Example#4660 - オブジェクト指向型
  • Example#4661 - 手続き型
  • Example#4662 - オブジェクト指向型
  • Example#4663 - 手続き型
  • Example#4664 - オブジェクト指向型
  • Example#4665 - 手続き型
  • Example#4666 - オブジェクト指向型
  • Example#4667 - 手続き型
  • Example#4668 - Train from array
  • Example#4669 - Train from a file
  • Example#4670 - svn_add example
  • Example#4671 - デフォルトの認証の例
  • Example#4672 - svn_blame の例
  • Example#4673 - 基本的な例
  • Example#4674 - 基本的な例
  • Example#4675 - 基本的な例
  • Example#4676 - 基本的な例
  • Example#4677 - Basic example
  • Example#4678 - 基本的な例
  • Example#4679 - あるパスのふたつのリビジョンの差分の取得
  • Example#4680 - ローカルファイルの差分の取得
  • Example#4681 - svn_export example
  • Example#4682 - 基本的な例
  • Example#4683 - svn_log の例
  • Example#4684 - svn_ls example
  • Example#4685 - Basic example
  • Example#4686 - Basic example
  • Example#4687 - ローカルホストからの全接続を拒否する
  • Example#4688 - URL を禁止する
  • Example#4689 - 統計のスナップショットを取得する
  • Example#4690 - varnish の共用メモリログを読み取る
  • Example#4691 - VarnishAdmin::__construct の例
  • Example#4692 - YAZ による並列検索
  • Example#4693 - CCL 設定
  • Example#4694 - CCL のパース
  • Example#4695 - レコードの更新
  • Example#4696 - GRS-1 レコードの配列
  • Example#4697 - MARCXML の使用
  • Example#4698 - タイトルをスキャンする PHP 関数
  • Example#4699 - クエリの例
  • Example#4700 - ソート条件
  • Example#4701 - A ZMQContext example
  • Example#4702 - A ZMQContext example
  • Example#4703 - A ZMQContext example
  • Example#4704 - A ZMQSocket example
  • Example#4705 - A send/recv example
  • Example#4706 - A ZMQPoll example
  • Example#4707 - zookeeper_dispatch example #1
  • Example#4708 - zookeeper_dispatch example #2
  • Example#4709 - Zookeeper::addAuth example
  • Example#4710 - Zookeeper::create example
  • Example#4711 - Zookeeper::delete example
  • Example#4712 - Zookeeper::exists example
  • Example#4713 - Zookeeper::get example
  • Example#4714 - Zookeeper::get stat example
  • Example#4715 - Zookeeper::getAcl example
  • Example#4716 - Zookeeper::getChildren example
  • Example#4717 - Zookeeper::set example
  • Example#4718 - Zookeeper::setAcl example
  • Example#4719 - Zookeeper::setDebugLevel example
  • Example#4720 - ZookeeperConfig::add example
  • Example#4721 - ZookeeperConfig::get example
  • Example#4722 - ZookeeperConfig::remove example
  • Example#4723 - ZookeeperConfig::set example
  • Example#4724 - solr_get_version の例
  • Example#4725 - ブートストラップ・ファイルの内容
  • Example#4726 - インデックスに文書を追加
  • Example#4727 - ある文書を他の文書にマージ
  • Example#4728 - 文書を検索 - SolrObject レスポンス
  • Example#4729 - 文書を検索 - SolrDocument レスポンス
  • Example#4730 - 簡単な TermsComponent 例 - 基本
  • Example#4731 - 簡単な TermsComponent 例 - 接頭辞を使用
  • Example#4732 - 簡単な TermsComponent 例 - 最小の頻度を指定
  • Example#4733 - 簡単なファセット例
  • Example#4734 - 簡単なファセット例 - mincount を越える任意の項目と共に
  • Example#4735 - Facet Date の例
  • Example#4736 - SSL 対応サーバーに接続
  • Example#4737 - Collapsing a SolrQuery
  • Example#4738 - Solr Real Time Get (RTG) の例 SolrClient::getById
  • Example#4739 - SolrInputDocument::addChildDocument example
  • Example#4740 - SolrInputDocument::addChildDocuments example
  • Example#4741 - SolrDocument::toArray の例
  • Example#4742 - SolrObject::__construct 例
  • Example#4743 - SolrObject::offsetUnset の例
  • Example#4744 - SolrClient::addDocument example
  • Example#4745 - SolrClient::addDocument example 2
  • Example#4746 - SolrClient::addDocuments example
  • Example#4747 - SolrClient::__construct example
  • Example#4748 - SolrQuery::deleteByQuery example
  • Example#4749 - SolrClient::getById example
  • Example#4750 - SolrClient::getByIds example
  • Example#4751 - SolrClient::ping example
  • Example#4752 - SolrClient::query example
  • Example#4753 - SolrClient::request example
  • Example#4754 - SolrClient::setResponseWriter example
  • Example#4755 - SolrParams::setParam の例
  • Example#4756 - SolrQuery::addFacetField example
  • Example#4757 - SolrQuery::addFacetField example
  • Example#4758 - SolrQuery::addFilterQuery example
  • Example#4759 - SolrQuery::addGroupSortField example
  • Example#4760 - SolrQuery::collapse example
  • Example#4761 - SolrQuery::setExpand example
  • Example#4762 - SolrDisMaxQuery::addBigramPhraseField example
  • Example#4763 - SolrDisMaxQuery::addBoostQuery example
  • Example#4764 - SolrDisMaxQuery::addPhraseField example
  • Example#4765 - SolrDisMaxQuery::addQueryField example
  • Example#4766 - SolrDisMaxQuery::addTrigramPhraseField example
  • Example#4767 - SolrDisMaxQuery::addUserField example
  • Example#4768 - SolrDisMaxQuery::__construct example
  • Example#4769 - SolrDisMaxQuery::removeBigramPhraseField example
  • Example#4770 - SolrDisMaxQuery::removeBoostQuery example
  • Example#4771 - SolrDisMaxQuery::removePhraseField example
  • Example#4772 - SolrDisMaxQuery::removeQueryField example
  • Example#4773 - SolrDisMaxQuery::removeTrigramPhraseField example
  • Example#4774 - SolrDisMaxQuery::removeUserField example
  • Example#4775 - SolrDisMaxQuery::setBigramPhraseFields example
  • Example#4776 - SolrDisMaxQuery::setBigramPhraseSlop example
  • Example#4777 - SolrDisMaxQuery::setBoostFunction example
  • Example#4778 - SolrDisMaxQuery::setBoostQuery example
  • Example#4779 - SolrDisMaxQuery::setMinimumMatch example
  • Example#4780 - SolrDisMaxQuery::setPhraseFields example
  • Example#4781 - SolrDisMaxQuery::setPhraseSlop example
  • Example#4782 - SolrDisMaxQuery::setQueryAlt example
  • Example#4783 - SolrDisMaxQuery::setQueryPhraseSlop example
  • Example#4784 - SolrDisMaxQuery::setTieBreaker example
  • Example#4785 - SolrDisMaxQuery::setTrigramPhraseFields example
  • Example#4786 - SolrDisMaxQuery::setTrigramPhraseSlop example
  • Example#4787 - SolrDisMaxQuery::setUserFields example
  • Example#4788 - SolrDisMaxQuery::useDisMaxQueryParser example
  • Example#4789 - SolrDisMaxQuery::useEDisMaxQueryParser example
  • Example#4790 - SolrCollapseFunction::__construct example
  • Example#4791 - SolrCollapseFunction::setHint example
  • Example#4792 - SolrCollapseFunction::setMax example
  • Example#4793 - .htaccess により、あるディレクトリの PHP によるパースを無効にする
  • Example#4794 - apache_get_modules の例
  • Example#4795 - apache_get_version の例
  • Example#4796 - apache_getenv の例
  • Example#4797 - apache_lookup_uri の例
  • Example#4798 - PHP と Perl との間での情報のやりとり
  • Example#4799 - access.log への出力
  • Example#4800 - apache_request_headers の例
  • Example#4801 - apache_response_headers の例
  • Example#4802 - apache_setenv を使った Apache 環境変数の設定
  • Example#4803 - getallheaders の例
  • Example#4804 - $_SESSIONで変数を登録
  • Example#4805 - 変数を $_SESSION から削除する
  • Example#4806 - 単一のユーザーに関するヒット数を数える
  • Example#4807 - 情報の例
  • Example#4808 - session_cache_expire の例
  • Example#4809 - session_cache_limiter の例
  • Example#4810 - session_regenerate_id と一緒に、session_create_id を使う例
  • Example#4811 - $_SESSIONでセッションを破棄する
  • Example#4812 - cron のようなタスクマネージャでの session_gc の例
  • Example#4813 - ユーザーがアクセス可能なスクリプトでの session_gc の例
  • Example#4814 - session_name の例
  • Example#4815 - session_regenerate_id の使用例
  • Example#4816 - session_regenerate_id による、セッションの消失を避ける
  • Example#4817 - 自作のセッションハンドラ: 完全なコードは SessionHandlerInterface を参照
  • Example#4818 - page1.php
  • Example#4819 - page2.php
  • Example#4820 - クッキーの有効期限の上書き
  • Example#4821 - セッションの読み込みとクローズ
  • Example#4822 - SessionHandler を使って PHP の保存ハンドラに暗号化機能を追加する例
  • Example#4823 - SessionHandlerInterface の使用例
  • Example#4824 - Tokenize comma separated integer list
  • Example#4825 - Tokenize assign statement
  • Example#4826 - Simple calculator
  • Example#4827 - Parse words out from a sentence
  • Example#4828 - 有効なパターンの例
  • Example#4829 - 無効なパターンの例
  • Example#4830 - パターンの中でのコメントの使い方
  • Example#4831 - preg_filter と preg_replace の比較
  • Example#4832 - preg_grep の例
  • Example#4833 - preg_last_error の例
  • Example#4834 - preg_last_error_msg example
  • Example#4835 - 文字列 "php" を探す
  • Example#4836 - 単語 "web" を探す
  • Example#4837 - URL からドメイン名を得る
  • Example#4838 - 名前つきサブパターンの使用法
  • Example#4839 - テキストからすべての電話番号を得る
  • Example#4840 - HTML タグにマッチするものを見付ける（貪欲）
  • Example#4841 - 名前つきサブパターンの使用法
  • Example#4842 - preg_quote の例
  • Example#4843 - テキスト内の単語の斜体変換
  • Example#4844 - 数字リテラルが後に続く後方参照
  • Example#4845 - 添字配列の使用
  • Example#4846 - 複数値の置換
  • Example#4847 - 空白の削除
  • Example#4848 - count 引数の使用
  • Example#4849 - preg_replace_callback と無名関数
  • Example#4850 - preg_replace_callback の例
  • Example#4851 - カプセル化された BB code を処理するための、 preg_replace_callback での再帰構造の使用
  • Example#4852 - preg_replace_callback_array の例
  • Example#4853 - preg_split の例 : 検索文字列のある部分を取得
  • Example#4854 - 文字列を文字要素に分割
  • Example#4855 - 文字列をマッチするものとそのオフセットに分割
  • Example#4856 - addcslashes の例
  • Example#4857 - addslashes の例
  • Example#4858 - bin2hex の例
  • Example#4859 - chr の例
  • Example#4860 - オーバーフローの挙動
  • Example#4861 - 個別のバイトから、UTF-8 文字列を組み立てる
  • Example#4862 - chunk_split の例
  • Example#4863 - convert_uudecode の例
  • Example#4864 - convert_uuencode の例
  • Example#4865 - count_chars の例
  • Example#4866 - crc32 チェックサムの表示
  • Example#4867 - crypt の例
  • Example#4868 - echo の例
  • Example#4869 -
  • Example#4870 - explode の例
  • Example#4871 - explode の戻り値の例
  • Example#4872 - limit パラメータの例
  • Example#4873 - fprintf: 数値のゼロ埋め
  • Example#4874 - fprintf: 金額のフォーマット
  • Example#4875 - 変換テーブルの例
  • Example#4876 - hex2bin の例
  • Example#4877 - HTML エンティティのデコード
  • Example#4878 - htmlentities の例
  • Example#4879 - ENT_IGNORE の使用例
  • Example#4880 - htmlspecialchars の例
  • Example#4881 - htmlspecialchars_decode の例
  • Example#4882 - implode の例
  • Example#4883 - lcfirst の例
  • Example#4884 - levenshtein の例
  • Example#4885 - localeconv の例
  • Example#4886 - ltrim の使用例
  • Example#4887 - md5 の例
  • Example#4888 - md5_file の使用例
  • Example#4889 - metaphone の基本的な例
  • Example#4890 - phonemes パラメータの使用例
  • Example#4891 - phonemes 引数を使う
  • Example#4892 - money_format の例
  • Example#4893 - nl_langinfo の例
  • Example#4894 - nl2br の使用法
  • Example#4895 - use_xhtml パラメータを使い、妥当な HTML 形式のマークアップを生成する
  • Example#4896 - さまざまな改行文字
  • Example#4897 - number_format の例
  • Example#4898 - ord の例
  • Example#4899 - UTF-8 の文字列をバイト単位で調べる
  • Example#4900 - parse_str の使用法
  • Example#4901 - parse_str name mangling
  • Example#4902 - print の例
  • Example#4903 -
  • Example#4904 -
  • Example#4905 - printf: の様々な例
  • Example#4906 - printf: 文字列の指定子
  • Example#4907 - quoted_printable_decode の例
  • Example#4908 - quoted_printable_encode の例
  • Example#4909 - quotemeta の例
  • Example#4910 - rtrim の使用例
  • Example#4911 - setlocale の例
  • Example#4912 - Windows での setlocale の例
  • Example#4913 - sha1 の例
  • Example#4914 - sha1_file の例
  • Example#4915 - similar_text で、引数を入れ替えた場合の例
  • Example#4916 - Soundex の例
  • Example#4917 - 引数の交換
  • Example#4918 - 埋める文字を指定する
  • Example#4919 - 位置指定子と他の指定との共用
  • Example#4920 - sprintf: ゼロ埋めされた数値
  • Example#4921 - sprintf: 通貨フォーマット
  • Example#4922 - sprintf: 科学的記法
  • Example#4923 - sscanf の例
  • Example#4924 - sscanf - オプションパラメータの使用法
  • Example#4925 - 空文字列 '' を使った場合
  • Example#4926 - 大文字小文字の区別
  • Example#4927 - str_decrement の基本的な使い方
  • Example#4928 - 繰り下がりがある、str_decrement の例
  • Example#4929 - 空文字列 '' を使う場合
  • Example#4930 - 大文字小文字の区別
  • Example#4931 - str_getcsv の例
  • Example#4932 - str_getcsv に空文字列を指定した例
  • Example#4933 - str_increment の基本的な使い方
  • Example#4934 - 繰り上げがある、str_increment の例
  • Example#4935 - str_ireplace の例
  • Example#4936 - str_pad の例
  • Example#4937 - str_repeat の例
  • Example#4938 - 基本的な str_replace の例
  • Example#4939 - str_replace に関するちょっとした事実
  • Example#4940 - str_rot13 の例
  • Example#4941 - str_shuffle の例
  • Example#4942 - str_split の使用例
  • Example#4943 - 空文字列 '' を使う場合
  • Example#4944 - 大文字小文字の区別
  • Example#4945 - str_word_count の例
  • Example#4946 - strcasecmp の例
  • Example#4947 - strcmp の例
  • Example#4948 - strcspn の例
  • Example#4949 - strip_tags の例
  • Example#4950 - stripcslashes の例
  • Example#4951 - stripos の例
  • Example#4952 - stripslashes の例
  • Example#4953 - 配列に対する stripslashes の使用
  • Example#4954 - stristr の例
  • Example#4955 - 文字列が見つかるかどうかをテストする
  • Example#4956 - 文字列以外の needle の指定
  • Example#4957 - strlen の例
  • Example#4958 - strnatcasecmp の例
  • Example#4959 - strncasecmp の例
  • Example#4960 - strncmp の例
  • Example#4961 - strpbrk の例
  • Example#4962 - === の使用
  • Example#4963 - !== の使用
  • Example#4964 - オフセットの使用
  • Example#4965 - strrchr の例
  • Example#4966 - strrev で文字列を逆順にする
  • Example#4967 - 単純な strripos の例
  • Example#4968 - needle が haystack の中にあるかどうかの確認
  • Example#4969 - オフセットつきの検索
  • Example#4970 - strspn の例
  • Example#4971 - strstr の例
  • Example#4972 - strtok の例
  • Example#4973 - 空の部分が見つかった場合の strtok の動作
  • Example#4974 - strtok と explode の違い
  • Example#4975 - strtolower の例
  • Example#4976 - strtoupper の例
  • Example#4977 - strtr の例
  • Example#4978 - 2 つの引数を伴う strtr の例
  • Example#4979 - strtr の挙動の比較
  • Example#4980 - 負の offset の使用
  • Example#4981 - 負の length の使用
  • Example#4982 - 基本的な substr の使用法
  • Example#4983 - substr でのキャストの挙動
  • Example#4984 - 文字列の範囲が不正な場合
  • Example#4985 - substr_compare の例
  • Example#4986 - substr_count の例
  • Example#4987 - シンプルな substr_replace の例
  • Example#4988 - substr_replace で複数の文字列を一度に置換する例
  • Example#4989 - trimの使用例
  • Example#4990 - trim を用いて配列の値をトリミングする
  • Example#4991 - ucfirst の例
  • Example#4992 - ucwords の例
  • Example#4993 - ucwords で、区切り文字を指定する例
  • Example#4994 - ucwords で、追加の区切り文字を指定する例
  • Example#4995 - 基本的な例
  • Example#4996 - 基本的な例
  • Example#4997 - vfprintf: 数値のゼロ埋め
  • Example#4998 - vprintf: 整数のゼロ埋め
  • Example#4999 - vsprintf: 整数のゼロ埋め
  • Example#5000 - wordwrap の例
  • Example#5001 - wordwrap の例
  • Example#5002 - wordwrap の例
  • Example#5003 - array の例
  • Example#5004 - array における自動インデックス
  • Example#5005 - array で 1 から始まる配列を作成
  • Example#5006 - ダブルクオートで囲まれた配列にアクセスする
  • Example#5007 - array_change_key_case の例
  • Example#5008 - array_chunk の例
  • Example#5009 - レコードセットからのファーストネームの取得
  • Example#5010 - レコードセットから姓を取得し、"id"で並べ替える例
  • Example#5011 - オブジェクトの public プロパティ "username" からユーザー名を取得する例
  • Example#5012 - オブジェクトの private プロパティ "name" から、マジックメソッド __get を使って名前を取得する例
  • Example#5013 - array_combineの簡単な例
  • Example#5014 - array_count_values の例
  • Example#5015 - array_diff の例
  • Example#5016 - 型が一致しない場合の array_diff の例
  • Example#5017 - array_diff_assoc の例
  • Example#5018 - array_diff_assoc の例
  • Example#5019 - array_diff_key の例
  • Example#5020 - array_diff_uassoc の例
  • Example#5021 - array_diff_ukey の例
  • Example#5022 - array_fill の例
  • Example#5023 - 最初のインデックスが負の場合の、array_fill の例
  • Example#5024 - array_fill_keys の例
  • Example#5025 - array_filter の例
  • Example#5026 - callback がない array_filter
  • Example#5027 - array_filter で mode を使う例
  • Example#5028 - array_flip の例
  • Example#5029 - array_flip の例 : 衝突
  • Example#5030 - array_intersect の例
  • Example#5031 - array_intersect_assoc の例
  • Example#5032 - array_intersect_key の例
  • Example#5033 - array_intersect_uassoc の例
  • Example#5034 - array_intersect_ukey の例
  • Example#5035 - array_is_list example
  • Example#5036 - array_key_exists の例
  • Example#5037 - array_key_exists 対 isset
  • Example#5038 - 基本的な array_key_first 関数の使い方
  • Example#5039 - array_keys の例
  • Example#5040 - array_map の例
  • Example#5041 - array_map でラムダ関数を使用する例
  • Example#5042 - array_map - もっと配列を使ってみる例
  • Example#5043 - 配列のzip操作を行う
  • Example#5044 - null を callback に渡し、 array だけを渡す例
  • Example#5045 - array_map - 文字列キーの例
  • Example#5046 - array_map と連想配列
  • Example#5047 - array_merge の例
  • Example#5048 - 簡単な array_merge の例
  • Example#5049 - array_merge で配列以外の型を扱う例
  • Example#5050 - array_merge_recursive の例
  • Example#5051 - 複数の配列をソートする
  • Example#5052 - 多次元の配列をソートする
  • Example#5053 - データベースの結果をソートする
  • Example#5054 - 大文字・小文字を区別しないソート
  • Example#5055 - array_pad の例
  • Example#5056 - array_pop の例
  • Example#5057 - array_product の例
  • Example#5058 - array_push の例
  • Example#5059 - array_rand の例
  • Example#5060 - array_reduce の例
  • Example#5061 - array_replace の例
  • Example#5062 - array_replace_recursive の例
  • Example#5063 - array_replace_recursive での再帰的な挙動の例
  • Example#5064 - array_reverse の例
  • Example#5065 - array_search の例
  • Example#5066 - array_shift の例
  • Example#5067 - array_slice の例
  • Example#5068 - array_slice と、キーが1から始まる配列
  • Example#5069 - array_slice に、数値と文字列のキーが混じった配列を渡す例
  • Example#5070 - array_splice の例
  • Example#5071 - 同じ動きをする、array_splice の様々な例
  • Example#5072 - array_sum の例
  • Example#5073 - array_udiff で stdClass オブジェクトを使う例
  • Example#5074 - array_udiff で DateTime オブジェクトを使う例
  • Example#5075 - array_udiff_assoc の例
  • Example#5076 - array_udiff_uassoc の例
  • Example#5077 - array_uintersect の例
  • Example#5078 - array_uintersect_assoc の例
  • Example#5079 - array_uintersect_uassoc の例
  • Example#5080 - array_unique の例
  • Example#5081 - array_unique と型
  • Example#5082 - array_unshift の例
  • Example#5083 - 連想配列と一緒に使う例
  • Example#5084 - array_values の例
  • Example#5085 - array_walk の例
  • Example#5086 - 無名関数を使った、array_walk の例
  • Example#5087 - array_walk_recursive の例
  • Example#5088 - arsort の例
  • Example#5089 - asort の例
  • Example#5090 - compact の例
  • Example#5091 - count の例
  • Example#5092 - Countable|array でない値を渡した場合の count の例 (悪い例です - 真似しないでね！)
  • Example#5093 - 再帰的な count の例
  • Example#5094 - Countable オブジェクトの例
  • Example#5095 - current と類似関数の使用例
  • Example#5096 - each の例
  • Example#5097 - each によって配列を走査する
  • Example#5098 - end の例
  • Example#5099 - extract の例
  • Example#5100 - in_array の例
  • Example#5101 - strict を指定した in_array の例
  • Example#5102 - needleが配列の場合の in_array
  • Example#5103 - key の例
  • Example#5104 - krsort の例
  • Example#5105 - ksort の例
  • Example#5106 - 数値がキーの場合の ksort の振る舞い
  • Example#5107 - list の例
  • Example#5108 - list の使用法の例
  • Example#5109 - ネストした list の使用法
  • Example#5110 - list と添字の定義順
  • Example#5111 - list をキーを指定して使う
  • Example#5112 - natcasesort の例
  • Example#5113 - natsort の基本的な使用例
  • Example#5114 - natsort をより知るための例
  • Example#5115 - next および類似関数の使用例
  • Example#5116 - prev および類似関数の使用例
  • Example#5117 - range の例
  • Example#5118 - reset の例
  • Example#5119 - rsort の例
  • Example#5120 - shuffle の例
  • Example#5121 - sort の例
  • Example#5122 - sort で、大文字小文字を区別せずに自然順での並べ替えを行う例
  • Example#5123 - 基本的な uasort の例
  • Example#5124 - uksort の例
  • Example#5125 - usort の例
  • Example#5126 - 多次元配列を使用する usort の例
  • Example#5127 - usort でオブジェクトのメンバ関数を使用する例
  • Example#5128 - usort で クロージャ を使って多次元配列をソートする例
  • Example#5129 - usort と宇宙船演算子
  • Example#5130 - クラスの定義
  • Example#5131 - test_script.php
  • Example#5132 - class_alias の例
  • Example#5133 - class_exists の例
  • Example#5134 - autoload パラメータの例
  • Example#5135 - enum_exists の例
  • Example#5136 - get_called_class の使用法
  • Example#5137 - get_class の使用例
  • Example#5138 - get_class のスーパークラスでの使用例
  • Example#5139 - 名前空間の中にあるクラスを get_class で使う
  • Example#5140 - get_class_methods の例
  • Example#5141 - get_class_vars の例
  • Example#5142 - get_class_vars でのスコープの挙動
  • Example#5143 - get_declared_classes の例
  • Example#5144 - get_declared_interfaces の例
  • Example#5145 - get_mangled_object_vars の例
  • Example#5146 - get_object_vars の使用例
  • Example#5147 - get_parent_class の使用例
  • Example#5148 - interface_exists の例
  • Example#5149 - is_a の例
  • Example#5150 - instanceof 演算子の使用
  • Example#5151 - is_subclass_of の例
  • Example#5152 - is_subclass_of でインターフェイスを使う例
  • Example#5153 - method_exists の例
  • Example#5154 - staticメソッドに対する method_exists の例
  • Example#5155 - property_exists の例
  • Example#5156 - A ctype_alnum の例 (デフォルトのロケールを使用)
  • Example#5157 - ctype_alphaの例 (デフォルトのロケールを使用)
  • Example#5158 - ctype_cntrl の例
  • Example#5159 - ctype_digit の例
  • Example#5160 - ctype_digit で文字列と整数値を比較する例
  • Example#5161 - ctype_graph の例
  • Example#5162 - ctype_lower の例（デフォルトのロケールを利用）
  • Example#5163 - ctype_print の例
  • Example#5164 - ctype_punct の例
  • Example#5165 - ctype_space の例
  • Example#5166 - ctype_upper の例（デフォルトのロケールを利用）
  • Example#5167 - ctype_xdigit の例
  • Example#5168 - デフォルトフィルタを htmlspecialchars と同様の挙動にする設定
  • Example#5169 - デフォルトのフィルタを htmlspecialchars と同様の挙動にする設定
  • Example#5170 - filter_var でのメールアドレスの検証
  • Example#5171 - filter_var での IP アドレスの検証
  • Example#5172 - filter_var でのオプションの指定
  • Example#5173 - メールアドレスの検証、および不正な部分の除去
  • Example#5174 - デフォルトのフィルタの設定
  • Example#5175 - filter_input の例
  • Example#5176 - filter_input_array の例
  • Example#5177 - filter_list の例
  • Example#5178 - filter_var の例
  • Example#5179 - 配列をフィルタする例
  • Example#5180 - filter_var_array の例
  • Example#5181 - call_user_func の例と参照
  • Example#5182 - call_user_func の例
  • Example#5183 - 名前空間を使用した call_user_func
  • Example#5184 - call_user_func でのクラスメソッドの使用
  • Example#5185 - call_user_func でのラムダ関数の使用
  • Example#5186 - call_user_func_array の例
  • Example#5187 - call_user_func_array での名前空間の使用法
  • Example#5188 - ラムダ関数の使用
  • Example#5189 - 値の参照渡し
  • Example#5190 - call_user_func_array を名前付き引数と一緒に使う
  • Example#5191 - create_function や無名関数を使い、動的に関数を作成する
  • Example#5192 - create_function や無名関数を使い、一般的な処理を行う関数を作成する
  • Example#5193 - 動的な関数をコールバック関数として使う
  • Example#5194 - forward_static_call の例
  • Example#5195 - forward_static_call_array の例
  • Example#5196 - func_get_arg の例
  • Example#5197 - func_get_arg での引数の参照渡しと値渡しの例
  • Example#5198 - func_get_args の例
  • Example#5199 - func_get_args での引数の参照渡しと値渡しの例
  • Example#5200 - func_num_args の例
  • Example#5201 - function_exists の例
  • Example#5202 - get_defined_functions の例
  • Example#5203 - register_shutdown_function の例
  • Example#5204 - register_tick_function の例
  • Example#5205 - Quickhash Example
  • Example#5206 - Quickhash ArrayAccess Example
  • Example#5207 - Quickhash Iterator Example
  • Example#5208 - Quickhash String Values Example
  • Example#5209 - QuickHashIntSet::add example
  • Example#5210 - QuickHashIntSet::__construct example
  • Example#5211 - QuickHashIntSet::delete example
  • Example#5212 - QuickHashIntSet::exists example
  • Example#5213 - QuickHashIntSet::getSize example
  • Example#5214 - QuickHashIntSet::loadFromFile example
  • Example#5215 - QuickHashIntSet::loadFromString example
  • Example#5216 - QuickHashIntSet::saveToFile example
  • Example#5217 - QuickHashIntSet::saveToString example
  • Example#5218 - QuickHashIntHash::add example
  • Example#5219 - QuickHashIntHash::__construct example
  • Example#5220 - QuickHashIntHash::delete example
  • Example#5221 - QuickHashIntHash::exists example
  • Example#5222 - QuickHashIntHash::get example
  • Example#5223 - QuickHashIntHash::getSize example
  • Example#5224 - QuickHash IntHash file format
  • Example#5225 - QuickHash IntHash file format
  • Example#5226 - QuickHashIntHash::loadFromFile example
  • Example#5227 - QuickHashIntHash::loadFromString example
  • Example#5228 - QuickHashIntHash::saveToFile example
  • Example#5229 - QuickHashIntHash::saveToString example
  • Example#5230 - QuickHashIntHash::set example
  • Example#5231 - QuickHashIntHash::update example
  • Example#5232 - QuickHashStringIntHash::add example
  • Example#5233 - QuickHashStringIntHash::__construct example
  • Example#5234 - QuickHashStringIntHash::delete example
  • Example#5235 - QuickHashStringIntHash::get example
  • Example#5236 - QuickHashStringIntHash::getSize example
  • Example#5237 - QuickHash StringIntHash file format
  • Example#5238 - QuickHash IntHash file format
  • Example#5239 - QuickHashStringIntHash::loadFromFile example
  • Example#5240 - QuickHashStringIntHash::loadFromString example
  • Example#5241 - QuickHashStringIntHash::saveToFile example
  • Example#5242 - QuickHashStringIntHash::saveToString example
  • Example#5243 - QuickHashStringIntHash::set example
  • Example#5244 - QuickHashStringIntHash::update example
  • Example#5245 - QuickHashIntStringHash::add example
  • Example#5246 - QuickHashIntStringHash::__construct example
  • Example#5247 - QuickHashIntStringHash::delete example
  • Example#5248 - QuickHashIntStringHash::get example
  • Example#5249 - QuickHashIntStringHash::getSize example
  • Example#5250 - QuickHash IntString file format
  • Example#5251 - QuickHash IntString file format
  • Example#5252 - QuickHashIntStringHash::loadFromFile example
  • Example#5253 - QuickHashIntStringHash::loadFromString example
  • Example#5254 - QuickHashIntStringHash::saveToFile example
  • Example#5255 - QuickHashIntStringHash::saveToString example
  • Example#5256 - QuickHashIntStringHash::set example
  • Example#5257 - QuickHashIntStringHash::update example
  • Example#5258 - シェル (ターミナル) からのリフレクションの例
  • Example#5259 - 組み込みクラスを拡張する
  • Example#5260 - Reflection::getModifierNames の例
  • Example#5261 - ReflectionClass の基本的な使用例
  • Example#5262 - ReflectionClass::export の基本的な使用例
  • Example#5263 - 基本的な使用法
  • Example#5264 - クラス名で結果をフィルタする
  • Example#5265 - クラス名、かつ継承も考慮して結果をフィルタする
  • Example#5266 - ReflectionClass::getConstant の使い方
  • Example#5267 - ReflectionClass::getConstructor の基本的な使用例
  • Example#5268 - ReflectionClass::getDefaultProperties の例
  • Example#5269 - ReflectionClass::getDocComment の例
  • Example#5270 - ReflectionClass::getEndLine の例
  • Example#5271 - ReflectionClass::getExtension の基本的な使用例
  • Example#5272 - ReflectionClass::getExtensionName の基本的な使用例
  • Example#5273 - ReflectionClass::getInterfaceNames の例
  • Example#5274 - ReflectionClass::getInterfaces の例
  • Example#5275 - ReflectionClass::getMethod の基本的な使用例
  • Example#5276 - ReflectionClass::getMethods の基本的な使用例
  • Example#5277 - ReflectionClass::getMethods のフィルタリング
  • Example#5278 - ReflectionClass::getName の例
  • Example#5279 - ReflectionClass::getNamespaceName の例
  • Example#5280 - ReflectionClass::getProperties でのフィルタリングの例
  • Example#5281 - ReflectionClass::getProperty の基本的な使用例
  • Example#5282 - 基本的な ReflectionClass::getReflectionConstants の例
  • Example#5283 - ReflectionClass::getShortName の例
  • Example#5284 - ReflectionClass::getStaticPropertyValue の基本的な使用例
  • Example#5285 - ReflectionClass::hasConstant の例
  • Example#5286 - ReflectionClass::hasMethod の例
  • Example#5287 - ReflectionClass::hasProperty の例
  • Example#5288 - ReflectionClass::inNamespace の例
  • Example#5289 - ReflectionClass::isAbstract の例
  • Example#5290 - ReflectionClass::isAnonymous の例
  • Example#5291 - ReflectionClass::isCloneable の基本的な使用例
  • Example#5292 - ReflectionClass::isFinal の例
  • Example#5293 - ReflectionClass::isInstance の例
  • Example#5294 - ReflectionClass::isInstantiable の例
  • Example#5295 - ReflectionClass::isInterface の基本的な使用例
  • Example#5296 - ReflectionClass::isInternal の基本的な使用例
  • Example#5297 - 基本的な ReflectionClass::isIterable の例
  • Example#5298 - ReflectionClass::isReadOnly の例
  • Example#5299 - ReflectionClass::newInstanceArgs の基本的な使用例
  • Example#5300 - ReflectionClass::__toString の例
  • Example#5301 - 基本的な使い方
  • Example#5302 - クラス名で結果をフィルタする
  • Example#5303 - クラス名、かつ継承も考慮して結果をフィルタする
  • Example#5304 - ReflectionClassConstant::isEnumCase の例
  • Example#5305 - ReflectionEnum::getBackingType の例
  • Example#5306 - ReflectionEnum::getCase の例
  • Example#5307 - ReflectionEnum::getCases の例
  • Example#5308 - ReflectionEnum::hasCase の例
  • Example#5309 - ReflectionEnum::isBacked の例
  • Example#5310 - ReflectionEnum::getValue の例
  • Example#5311 - ReflectionEnum::getBackingValue の例
  • Example#5312 - ReflectionExtension の例
  • Example#5313 - ReflectionExtension::getClasses の例
  • Example#5314 - ReflectionExtension::getClassNames の例
  • Example#5315 - ReflectionExtension::getConstants の例
  • Example#5316 - ReflectionExtension::getDependencies の例
  • Example#5317 - ReflectionExtension::getFunctions の例
  • Example#5318 - ReflectionExtension::getINIEntries の例
  • Example#5319 - ReflectionExtension::getName の例
  • Example#5320 - ReflectionExtension::getVersion の例
  • Example#5321 - ReflectionExtension::info の例
  • Example#5322 - ReflectionFunction::__construct の例
  • Example#5323 - ReflectionFunction::invoke の例
  • Example#5324 - ReflectionFunction::invokeArgs の例
  • Example#5325 - ReflectionFunction::invokeArgs で参照を使う例
  • Example#5326 - ReflectionFunction::isAnonymous の例
  • Example#5327 - ReflectionFunction::__toString の例
  • Example#5328 - メソッドを使った、基本的な使い方
  • Example#5329 - 関数を使った、基本的な使い方
  • Example#5330 - クラス名を使って結果をフィルタする
  • Example#5331 - クラス名、かつ継承も考慮して結果をフィルタする
  • Example#5332 - ReflectionFunctionAbstract::getClosureUsedVariables の例
  • Example#5333 - ReflectionFunctionAbstract::getReturnType の例
  • Example#5334 - ビルトイン関数で使う場合
  • Example#5335 - ReflectionFunctionAbstract::getTentativeReturnType の例
  • Example#5336 - ReflectionFunctionAbstract::hasReturnType の例
  • Example#5337 - ビルトイン関数で使う
  • Example#5338 - ReflectionFunctionAbstract::hasTentativeReturnType の例
  • Example#5339 - ReflectionFunctionAbstract::isClosure の例
  • Example#5340 - ReflectionFunctionAbstract::isDeprecated の例
  • Example#5341 - ReflectionMethod::__construct の例
  • Example#5342 - ReflectionMethod::createFromMethodName の例
  • Example#5343 - ReflectionMethod::getDeclaringClass の例
  • Example#5344 - ReflectionMethod::getModifiers の例
  • Example#5345 - ReflectionMethod::getPrototype の例
  • Example#5346 - ReflectionMethod::hasPrototype の例
  • Example#5347 - ReflectionMethod::invoke の例
  • Example#5348 - ReflectionMethod::invokeArgs の例
  • Example#5349 - 簡単なクラス定義
  • Example#5350 - ReflectionMethod::__toString の例
  • Example#5351 - ReflectionNamedType::isBuiltin の例
  • Example#5352 - ReflectionParameter クラスの使用
  • Example#5353 - 基本的な使い方
  • Example#5354 - クラス名で結果をフィルタする
  • Example#5355 - クラス名、かつ継承も考慮して結果をフィルタする
  • Example#5356 - ReflectionParameter クラスの利用法
  • Example#5357 - メソッドを宣言しているクラスの取得
  • Example#5358 - 関数のパラメータのデフォルト値を取得する
  • Example#5359 - 関数のパラメーターのデフォルト値の定数を取得する
  • Example#5360 - PHP 7.1.0 以降での ReflectionParameter::getType の使い方
  • Example#5361 - PHP 7.1.0 より前の ReflectionParameter::getType の使い方
  • Example#5362 - PHP 8.0.0 以降の ReflectionParameter::getType の使い方
  • Example#5363 - ReflectionParameter::hasType の例
  • Example#5364 - PHP 8.0.0 以降で同等のことを行うには
  • Example#5365 - PHP 8.0.0 以降で同等のことを行うには
  • Example#5366 - ReflectionParameter::__toString の例
  • Example#5367 - ReflectionProperty::__construct の例
  • Example#5368 - ReflectionProperty クラスを用いた、private および protected プロパティの値の取得
  • Example#5369 - 基本的な使い方
  • Example#5370 - クラス名で結果をフィルタする
  • Example#5371 - クラス名、かつ継承も考慮して結果をフィルタする
  • Example#5372 - ReflectionProperty::getDefaultValue の例
  • Example#5373 - ReflectionProperty::getDocComment の例
  • Example#5374 - 複数のプロパティを宣言している場合
  • Example#5375 - ReflectionProperty::getType の例
  • Example#5376 - ReflectionProperty::getValue の例
  • Example#5377 - ReflectionProperty::hasDefaultValue の例
  • Example#5378 - ReflectionProperty::hasType の例
  • Example#5379 - ReflectionProperty::isDefault の例
  • Example#5380 - ReflectionProperty::isInitialized の例
  • Example#5381 - ReflectionProperty::isPromoted の例
  • Example#5382 - 簡単なクラス定義
  • Example#5383 - ReflectionProperty::setValue の例
  • Example#5384 - ReflectionType::allowsNull の例
  • Example#5385 - ReflectionType::__toString の例
  • Example#5386 - ReflectionUnionType::getTypes の例
  • Example#5387 - ReflectionGenerator::__construct の例
  • Example#5388 - ReflectionGenerator::getExecutingFile の例
  • Example#5389 - ReflectionGenerator::getExecutingGenerator の例
  • Example#5390 - ReflectionGenerator::getExecutingLine の例
  • Example#5391 - ReflectionGenerator::getFunction の例
  • Example#5392 - ReflectionGenerator::getThis の例
  • Example#5393 - ReflectionGenerator::getTrace の例
  • Example#5394 - ReflectionIntersectionType::getTypes の例
  • Example#5395 - ReflectionReference::getId の基本的な使い方
  • Example#5396 - boolval の例
  • Example#5397 - debug_zval_dump の例
  • Example#5398 -
  • Example#5399 - 簡単な empty / isset の比較
  • Example#5400 - 文字列のオフセットに対する empty
  • Example#5401 - floatval の例
  • Example#5402 - floatval で、先頭が非数値である場合の例
  • Example#5403 - get_debug_type の例
  • Example#5404 - get_defined_vars の例
  • Example#5405 - get_resource_id が、リソースを数値にキャストした場合と同じ結果になる例
  • Example#5406 - get_resource_type の例
  • Example#5407 - gettype の例
  • Example#5408 - intval の例
  • Example#5409 - 変数が配列かどうか検査する
  • Example#5410 - is_bool の例
  • Example#5411 - is_callable の例
  • Example#5412 - is_callable とコンストラクタ
  • Example#5413 - is_countable の例
  • Example#5414 - is_float の例
  • Example#5415 - is_int の例
  • Example#5416 - is_iterable の例
  • Example#5417 - is_null の例
  • Example#5418 - is_numeric の例
  • Example#5419 - 空白文字と is_numeric 関数
  • Example#5420 - is_object の例
  • Example#5421 - is_resource の例
  • Example#5422 - is_scalar の例
  • Example#5423 - is_string の例
  • Example#5424 - isset の例
  • Example#5425 - 文字列のオフセットに対する isset
  • Example#5426 - print_r の例
  • Example#5427 - return 引数の例
  • Example#5428 - serialize の例
  • Example#5429 - settype の例
  • Example#5430 - マジックメソッド __toString() を使う strval の例
  • Example#5431 - unserialize の例
  • Example#5432 - unserialize_callback_func の例
  • Example#5433 - unset の例
  • Example#5434 - (unset) によるキャスト
  • Example#5435 - var_dump の例
  • Example#5436 - var_export の例
  • Example#5437 - PHP 7.3.0 以降で stdClass をエクスポートする
  • Example#5438 - クラスのエクスポート
  • Example#5439 - __set_state() の使用法
  • Example#5440 -
  • Example#5441 - OAuth::fetch の例
  • Example#5442 - OAuth::getAccessToken の例
  • Example#5443 - OAuth::getRequestToken の例
  • Example#5444 - OAuth::setRequestEngine example
  • Example#5445 - OAuth::setRsaCertificate の例
  • Example#5446 - OAuth::setToken の例
  • Example#5447 - OAuthProvider::__construct の例
  • Example#5448 - OAuthProvider::consumerHandler コールバックの例
  • Example#5449 - OAuthProvider::generateToken の例
  • Example#5450 - OAuthProvider::is2LeggedEndpoint の例
  • Example#5451 - OAuthProvider::timestampNonceHandler コールバックの例
  • Example#5452 - OAuthProvider::tokenHandler コールバックの例
  • Example#5453 - is_soap_fault の例
  • Example#5454 - SOAP の標準的なエラーレポートメソッドは例外となる
  • Example#5455 - TLS 1.3 だけを指定する
  • Example#5456 - SoapClient::__construct の例
  • Example#5457 - SOAP_SINGLE_ELEMENT_ARRAYS の機能を使う
  • Example#5458 - SoapClient::__doRequest の例
  • Example#5459 - SoapClient::__getFunctions の例
  • Example#5460 - SoapClient::__getLastRequest() の例
  • Example#5461 - SoapClient::__getLastRequestHeaders() の例
  • Example#5462 - SoapClient::__getLastResponse() の例
  • Example#5463 - SoapClient::__getLastResponse() の例
  • Example#5464 - SoapClient::__getTypes の例
  • Example#5465 - SoapClient::__setLocation の例
  • Example#5466 - SoapClient::__setSoapHeaders の例
  • Example#5467 - 複数のヘッダの設定
  • Example#5468 - SoapClient::__soapCall の例
  • Example#5469 - SoapServer::addFunction の例
  • Example#5470 - SoapServer::__construct の例
  • Example#5471 - SoapServer::getFunctions の例
  • Example#5472 - SoapServer::handle の例
  • Example#5473 - SoapServer::setPersistence の例
  • Example#5474 - いくつかの例
  • Example#5475 - いくつかの例
  • Example#5476 - SoapHeader::__construct の例
  • Example#5477 - SoapParam::__construct の例
  • Example#5478 - SoapVar::__construct の例
  • Example#5479 - Yar Server Example
  • Example#5480 - Access the server in borwser(GET request)
  • Example#5481 - Yar Client Example
  • Example#5482 - Yar Concurrent Client Example
  • Example#5483 - Yar_Server::__construct example
  • Example#5484 - Yar_Server::handle example
  • Example#5485 - Yar_Client::__call example
  • Example#5486 - Yar_Client::__construct example
  • Example#5487 - Yar_Client::setOpt example
  • Example#5488 - Yar_Concurrent_Client::call example
  • Example#5489 - Yar_Concurrent_Client::loop example
  • Example#5490 - Yar_Concurrent_Client::reset example
  • Example#5491 - Yar_Server_Exception::getType example
  • Example#5492 - Yar_Client_Exception::getType example
  • Example#5493 - XMLRPC クライアント関数の例
  • Example#5494 - XML-RPC の型の例
  • Example#5495 - xmlrpc_set_type の例
  • Example#5496 - ASP における For Each
  • Example#5497 - PHP 5 における foreach
  • Example#5498 - com の例 (1)
  • Example#5499 - com の例 (2)
  • Example#5500 - dotnet の例
  • Example#5501 - variant の例
  • Example#5502 - COMPersistHelper::saveToFile の基本的な使い方
  • Example#5503 - COM イベントシンクの例
  • Example#5504 - PHP スクリプトをサービスとして登録する
  • Example#5505 - サービスの登録を解除する
  • Example#5506 - サービスとして実行する
  • Example#5507 - win32_create_service の例
  • Example#5508 - 依存性を用いた win32_create_service の例
  • Example#5509 - リカバリ設定を用いた win32_create_service の例
  • Example#5510 - win32_delete_service の例
  • Example#5511 - win32_start_service_ctrl_dispatcher の例
  • Example#5512 - book.xml
  • Example#5513 - 新しい DOMAttr オブジェクトを作成する
  • Example#5514 - DOMAttr::isId() の例
  • Example#5515 - 新しい DOMCdataSection オブジェクトの作成
  • Example#5516 - DOMCharacterData::after の例
  • Example#5517 - DOMCharacterData::before の例
  • Example#5518 - DOMCharacterData::remove の例
  • Example#5519 - DOMCharacterData::replaceWith の例
  • Example#5520 - 新しい DOMComment を作成する
  • Example#5521 - DOMDocument::adoptNode の例
  • Example#5522 - DOMDocument::append の例
  • Example#5523 - 新しい DOMDocument を作成する
  • Example#5524 - 新しい要素を作成し、ルートとして挿入する
  • Example#5525 - & をエスケープせずに value に渡す例
  • Example#5526 - 新しい要素を作成し、ルートとして挿入する
  • Example#5527 - 名前空間プレフィックスの例
  • Example#5528 - DOMDocument::getElementById() の例
  • Example#5529 - 基本的な使用例
  • Example#5530 - すべての XInclude 要素を取得する
  • Example#5531 - DOMDocument::importNode の例
  • Example#5532 - ドキュメントの作成
  • Example#5533 - ドキュメントを作成する
  • Example#5534 - ドキュメントを作成する
  • Example#5535 - ドキュメントを作成する
  • Example#5536 - DOMDocument::prepend の例
  • Example#5537 - 新しいメソッドを DOMElement に追加し、コードを書きやすくする
  • Example#5538 - カスタムクラス形式での要素の取得
  • Example#5539 - オーナードキュメントの取得
  • Example#5540 - カスタムオブジェクトは一時的なもの
  • Example#5541 - DOMDocument::replaceChildren の例
  • Example#5542 - DOM ツリーをファイルに保存する
  • Example#5543 - HTML ツリーを文字列に保存する
  • Example#5544 - HTML ツリーをファイルに保存する
  • Example#5545 - DOM ツリーを文字列に保存する
  • Example#5546 - DTD による検証の例
  • Example#5547 - DOMDocument::xinclude() の例
  • Example#5548 - DOMDocumentFragment::append の例
  • Example#5549 - XML データのドキュメントへの追加
  • Example#5550 - DOMDocumentFragment::prepend の例
  • Example#5551 - DOMDocumentFragment::replaceChildren の例
  • Example#5552 - DOMElement::after の例
  • Example#5553 - DOMElement::append の例
  • Example#5554 - DOMElement::before の例
  • Example#5555 - 新しい DOMElement を作成する
  • Example#5556 - DOMElement::getAttributeNames の例
  • Example#5557 - DOMElement::insertAdjacentElement の例
  • Example#5558 - DOMElement::insertAdjacentText の例
  • Example#5559 - DOMElement::prepend の例
  • Example#5560 - DOMElement::remove の例
  • Example#5561 - DOMElement::replaceChildren の例
  • Example#5562 - DOMElement::replaceWith の例
  • Example#5563 - 属性を設定する
  • Example#5564 - DOMElement::toggleAttribute の例
  • Example#5565 - 新しい DOMEntityReference を作成する
  • Example#5566 - DTD を添付してドキュメントを作成する
  • Example#5567 - DOM の実装を調べる
  • Example#5568 - 子要素の追加
  • Example#5569 - ネストされた子ノード
  • Example#5570 - XPath クエリの例
  • Example#5571 - DOMNode::contains の例
  • Example#5572 - DOMNode::getLineNo メソッドの例
  • Example#5573 - DOMNode::getNodePath の例
  • Example#5574 - DOMNode::getRootNode の例
  • Example#5575 - DOMNode::isEqualNode の例
  • Example#5576 - 子要素の削除
  • Example#5577 - テーブル内のすべての要素を取得する
  • Example#5578 - DOMParentNode::replaceChildren の例
  • Example#5579 - 新しい DOMProcessingInstruction を作成する
  • Example#5580 - 新しい DOMText を作成する
  • Example#5581 - 英語の書籍の数を取得する
  • Example#5582 - すべての英語の書籍を取得する
  • Example#5583 - book.xml
  • Example#5584 - DOMXPath::registerPHPFunctions と php:functionString の例
  • Example#5585 - DOMXPath::registerPHPFunctions と php:function の例
  • Example#5586 - dom_import_simplexml を用いて SimpleXML を DOM にインポートする
  • Example#5587 - libxml_get_errors の例
  • Example#5588 - libxml_set_external_entity_loader の例
  • Example#5589 - libxml_set_streams_context の例
  • Example#5590 - libxml_use_internal_errorsの例
  • Example#5591 - XML 文字列を設定するインクルードファイル example.php
  • Example#5592 - <plot> を取得する
  • Example#5593 - <line> を取得する
  • Example#5594 - SimpleXML でユニークでない要素にアクセスする
  • Example#5595 - 属性を使用する
  • Example#5596 - 要素および属性をテキストと比較する
  • Example#5597 - ふたつの要素の比較
  • Example#5598 - XPath の使用
  • Example#5599 - 値を設定する
  • Example#5600 - 要素と属性を追加する
  • Example#5601 - DOM との相互運用性
  • Example#5602 - 壊れた XML 文字列の読み込み
  • Example#5603 - SimpleXML 要素への属性と子要素の追加
  • Example#5604 - SimpleXML 要素への属性と子要素の追加
  • Example#5605 - XML を取得する
  • Example#5606 - SimpleXMLElement::xpath の結果に asXML() を使用する
  • Example#5607 - XML文字列を解釈する
  • Example#5608 - children() 疑似配列を走査する
  • Example#5609 - 名前空間の使用
  • Example#5610 - SimpleXMLElement オブジェクトの作成
  • Example#5611 - URL からの SimpleXMLElement オブジェクトの作成
  • Example#5612 - 子要素の数の取得
  • Example#5613 - 現在の要素を返す
  • Example#5614 - ドキュメントの名前空間の取得
  • Example#5615 - 複数の名前空間での動作
  • Example#5616 - XML 要素の名前の取得
  • Example#5617 - ドキュメントで使用している名前空間の取得
  • Example#5618 - 現在の要素の子要素を返す
  • Example#5619 - 現在の要素が子要素を持つかどうかを調べる
  • Example#5620 - 現在の XML タグキーの取得
  • Example#5621 - 次の要素への移動
  • Example#5622 - XPath クエリで使用する名前空間プレフィックスの設定
  • Example#5623 - 最初の要素に巻き戻す
  • Example#5624 - 文字列で内容を取得する
  • Example#5625 - 現在の要素が有効かどうかを調べる
  • Example#5626 - Xpath
  • Example#5627 - DOM のインポート
  • Example#5628 - XMLドキュメントをパースする
  • Example#5629 - XML 文字列をパースする
  • Example#5630 - WDDX を使用した単一の値のシリアル化
  • Example#5631 - WDDX を使用してパケットを追加する例
  • Example#5632 - wddx_serialize_vars の例
  • Example#5633 - XML エレメント構造を表示
  • Example#5634 - XMLをHTMLにマップする
  • Example#5635 - 外部エンティティの例
  • Example#5636 - xmltest.xml
  • Example#5637 - xmltest2.xml
  • Example#5638 - 巨大なXML文書を切り分けてパースする
  • Example#5639 - xml_parse_into_struct の例
  • Example#5640 - moldb.xml - 分子情報の小さなデータベース
  • Example#5641 - parsemoldb.php - moldb.xml を処理し、分子オブジェクトの配列に代入
  • Example#5642 - xml_set_object の例
  • Example#5643 - XML の妥当性の検証
  • Example#5644 - 単純な XML ドキュメントの作成
  • Example#5645 - XML 名前空間の使用
  • Example#5646 - オブジェクト指向 API の使用
  • Example#5647 - XML を直接出力する
  • Example#5648 - XMLWriter::setIndent と mixed content
  • Example#5649 - XMLWriter::startAttribute の基本的な使い方
  • Example#5650 - 子要素と属性を混在させる
  • Example#5651 - xmlwriter_write_cdata の基本的な使い方
  • Example#5652 - collection.xml
  • Example#5653 - collection.xsl
  • Example#5654 - fruits.xml
  • Example#5655 - fruits.xsl
  • Example#5656 - エラーの捕捉と表示
  • Example#5657 - XSLTProcessor の作成
  • Example#5658 - EXSLT サポートの判定
  • Example#5659 - スタイルシートからの単純な PHP 関数コール
  • Example#5660 - 変換前に所有者を変更する
  • Example#5661 - プロファイル出力の例
  • Example#5662 - DOMDocument への変換
  • Example#5663 - HTML ファイルへの変換
  • Example#5664 - 文字列への変換
  • Example#5665 - HTML の hidden 要素
  • Example#5666 - ユーザーによって編集するデータ
  • Example#5667 - URL 中の場合
  • Example#5668 - PHP による JavaScript の生成
  • Example#5669 - PHP/FI のコード例
  • Example#5670 - dev. ドメインではエラーを画面に表示させるようにする例
  • Example#5671 - 保護エリア内でのスクリプトのセキュリティ確保
  • Example#5672 - Unix include_path
  • Example#5673 - Windows include_path
  • Example#5674 - Unix include_path で環境変数 ${USER} を使う例
  • Example#5675 - string.rot13
  • Example#5676 - string.toupper
  • Example#5677 - string.tolower
  • Example#5678 - string.strip_tags
  • Example#5679 - convert.base64-encode と convert.base64-decode
  • Example#5680 - convert.quoted-printable-encode と convert.quoted-printable-decode
  • Example#5681 - convert.iconv.*
  • Example#5682 - zlib.deflate と zlib.inflate
  • Example#5683 - zlib.deflate のシンプルな例
  • Example#5684 - bzip2.compress と bzip2.decompress
  • Example#5685 - Blowfish を用いた 暗号化/復号化
  • Example#5686 - ファイルを AES-128 CBC と SHA256 HMAC で暗号化する

User Contributed Notes

There are no user contributed notes for this page.


変更履歴

標準添付の拡張モジュールには次のような変更がありました。

Version Function 説明

User Contributed Notes

There are no user contributed notes for this page.


HTML ヘルプ版

  • このヘルプについて
  • CHM版 の PHPマニュアル を使う
    • HTMLヘルプのツールバー
    • ナビゲーションペイン
    • キーボードショートカット
  • 全文検索
    • 一般的な検索のルール
    • 単語またはフレーズを検索する
    • 検索後を定義する
    • 入れ子の検索条件を使う
  • Integrating the PHP Manual

User Contributed Notes

There are no user contributed notes for this page.


このヘルプについて

PHPマニュアル の Windowsヘルプ版 は、このマニュアルをいつも手元に置いておきたかったり、Webページをダウンロードするのを待つことなくマニュアルページやユーザーが書き込んだ Note を読みたい開発者を対象にしています。Windowsヘルプ版 は、PHPマニュアルの全ての内容と、ユーザーが書き込んだ Note が全て含まれていますし、このフォーマットを生成するスクリプトや他のコントリビューターがスキンの形で提供したビューアアプリケーションの素晴らしい機能がいくつか付いてきます。

PHPマニュアル の配布物に多くのファイルが含まれており、それらはメインマニュアルファイルである php_manual_ja.chm に入っています。(既にお察しの通り) あなたは PHPマニュアル をこのファイルをダブルクリックすることで見ることが出来ます。 同じフォルダで php_manual_ja.chw というファイルを見ることがあるかもしれません。これは「キーワード」タブをはじめて使うときに生成され、マニュアルページのインデックスが含まれています。

Microsoft HTMLヘルプ の技術的な詳細に興味がある方向けの素晴らしいリソースに、» http://www.helpware.net/ があります。Microsoft ヘルプフォーマットやサービスの歴史における Windows HTMLヘルプの位置付けや、さらに詳しい情報は » WinWriters の記事 を参照ください。

User Contributed Notes

There are no user contributed notes for this page.


CHM版 の PHPマニュアル を使う

目次

  • HTMLヘルプのツールバー
  • ナビゲーションペイン
  • キーボードショートカット

CHMファイル をダブルクリックすると、HTMLヘルプビューア のウィンドウが起動します。これは3つのペインに分かれています。ウィンドウの左側はナビゲーションペインで、4つのタブがあります。目次、キーワード、検索、そしてお気に入りです。ウィンドウの右側はトピックペインで、選択したヘルプトピックを表示させたり、起動時のデフォルトのヘルプトピックが表示されたりします。ヘルプページは全て別々のHTMLファイルで、Internet Explorer がページをトピックペインに表示します。3つめのペインはツールバーです。これはウィンドウのタイトルバーの下にあります。ナビゲーションペインとトピックペインの境目は、縦方向のバーをドラッグすることでレイアウトを調整できます。

CHMファイルをはじめて開くとき、ウィンドウの位置とサイズがおかしな状態かもしれません。2回目以降は、Windows が位置とサイズ、そして最後に開いたタブを記憶しています。これら全ての情報とお気に入りに入れた情報は hh.dat に保存されます。このファイルを別の場所に移動すると、これらの情報が(お気に入りの情報も含めて!)失われてしまいます。CHMファイルを新しいものに置き換えるのは、同じファイル名であれば問題ありません。ファイル名とパス名は hh.dat に保存されています。

User Contributed Notes

There are no user contributed notes for this page.


HTMLヘルプのツールバー

PHPマニュアルを表示したとき、HTMLヘルプのツールバーには次のアイコンが表示されます:

  • 表示/非表示 - ナビゲーションペインを表示/非表示 にします。
  • 同期 - 目次タブの内容をトピックのペインの内容に合わせます。 (検索、キーワード、お気に入りからトピックにたどり着いた場合 や目次にあるツリーの内容を見たくなったりした場合に使います)
  • 戻る - 履歴のひとつ前に戻ります。
  • 進む - ひとつ後の履歴に進みます。
  • 更新 - 現在のページを更新します。
  • ホーム - CHMのスタートアップページを開きます。
  • 印刷 - 印刷ダイアログボックスを開きます。
  • オプション - ドロップダウンで追加のオプションを提供します。
このツールバーは本当に簡単に使えます。多くのツールバーアイコンは Internet Explorer にある同様の機能と強い関連があります。

User Contributed Notes

There are no user contributed notes for this page.


ナビゲーションペイン

ナビゲーションペインには4つのタブがあります: 目次、キーワード、検索、そしてお気に入りです。これらのタブはヘルプファイルのトピックにアクセスする異なる方法を提供します。

  • 目次タブは目次をツリー状に表示します。ここでは、ツリーの一部分を開いたり閉じたりして望みのトピックに移動することができます。目次を使うとセクションの一番深い部分にさえアクセスできます。見出しの項目を右クリックして「印刷」を選ぶと、選択中のトピックか、選択中のトピックとそのサブトピック全てを印刷するオプションが表示されます。しかし、マニュアルを印刷する機能はこのマニュアルの代表的な機能ではありません。(PDFバージョンの方が印刷に適しています)
  • キーワードタブは、莫大な数(マニュアルのタイトル全て)の「キーワード」を一覧にします。 あなたは表示されているものからひとつ選んだり、キーワードを打ち込んで表示される一覧を調整してトピックをクリックしたり、選択したトピックが見たいものであれば、エンターキーを押してトピックを表示させることも出来ます。
  • 検索タブはHTMLヘルプビューアのもっとも強力な機能、全文検索(FTS=Full Text Search)を提供します。 ここでは、検索条件を入力し、オプションでそれらの条件を AND/OR/NEAR/NOT で繋ぐこともできます。 「検索開始」ボタンをクリックする前に、画面左下にあるオプションをいくつか設定することもできます。 検索結果が表示された後、マニュアルの検索結果と User Note の検索結果は別であることに気付くでしょう。 これらふたつのタイプをソートするには、「場所」カラムヘッダをクリックします。これで、検索結果から トピックを選び出し、閲覧することが出来ます。検索したキーワードはページ上でハイライトされています。
  • お気に入りタブを使うと、もっともよく使うトピックを一覧にし、簡単にアクセスすることが出来ます。 お気に入りのリストを見ることも出来ますし、現在表示しているトピックを追加することも出来ます。 また、お気に入りのうちのひとつを削除することもできますし、お気に入りのうちのひとつをトピックペインに表示させることもできます。 「現在のトピック」ボックスにテキストを入力することで、お気に入りに独自のタイトルを付けることも出来ます。 User Noteのお気に入りページのタイトルには、通常のマニュアルページと後で簡単に区別できるように N: という文字列がはじめにつきます。

User Contributed Notes

There are no user contributed notes for this page.


キーボードショートカット

生産性を高めるために、たくさんのキーボードショートカットがあります。 クリックするかわりに、これらのキーボードショートカットを使う方が トピックにアクセスするのに適切だと多くの人が気付いています。

ヘルプビューアの一般的なショートカット
実行する操作 | ショートカット
ヘルプビューアを閉じる | ALT+F4
オプションメニューを表示 | ALT+O
ナビゲーションペインを表示/非表示にする | ALT+O を押し、Tを押す
トピックを印刷 | ALT+O を押し、Pを押す
一つ前のトピックに戻る | ALT+LEFT ARROW
ひとつ後のトピックに移動する (以前にトピックを見ていた場合) | ALT+RIGHT ARROW
検索のハイライトを 有効/無効 にする | ALT+O を押し、O を押す
ヘルプファイルのホームに戻る | ALT+O を押し、Hを押す
ナビゲーションペインとトピックペインを切り替える | F6
ナビゲーションペインのタブにあるオプション、またはトピックペインにある全てのリンクを移動しながらスクロールする | TAB
コンテキストメニュー(右クリック) を表示する | SHIFT+F10
目次タブのショートカット
実行する操作 | ショートカット
目次タブを表示する | ALT+C
ブックまたはフォルダを開いたり閉じたりする | PLUS SIGN と MINUS SIGN または、LEFT ARROW と RIGHT ARROW
トピックを選択する | DOWN ARROW と UP ARROW
選択したトピックを表示する | ENTER
キーワードタブのショートカット
実行する操作 | ショートカット
キーワードタブを表示する | ALT+N
検索するキーワードを入力する | ALT+W を押し、検索語を入力
リスト中のキーワードを選択する | UP ARROW と DOWN ARROW
関連するトピックを表示する | ENTER または ALT+D
検索タブのショートカット
実行する操作 | ショートカット
検索タブを表示する | ALT+S
検索するキーワードを入力する | ALT+W を押し、検索語を入力
検索を開始 | ALT+L
検索結果リストにあるトピックを選択する | ALT+T を押し、UP ARROW と DOWN ARROWを押す
選択したトピックを表示する | ENTER または ALT+D
以前行った検索結果からキーワード検索する | ALT+U
キーワードに似た単語で検索する。たとえば、"run" というキーワードに対して、"running" や "runs" のような単語で検索する | ALT+M
タイトルのみ検索 | ALT+R
お気に入りタブのショートカット
実行する操作 | ショートカット
お気に入りタブを表示する | ALT+I
現在見ているトピックをお気に入りリストに追加する | ALT+A
お気に入りリストにあるトピックを選択する | ALT+P を押し、UP ARROW と DOWN ARROW を押す
選択したトピックを表示する | ENTER または ALT+D
お気に入りリストから、選択したトピックを削除する | ALT+R
トピックペインのショートカット
実行する操作 | ショートカット
インデックスを探す | 探したい単語を選択し、F1を押す
ページ内検索 | CTRL+F を押し、オプションを調整する
ページを更新する | F5

User Contributed Notes

There are no user contributed notes for this page.


全文検索

目次

  • 一般的な検索のルール
  • 単語またはフレーズを検索する
  • 検索後を定義する
  • 入れ子の検索条件を使う

This edition of the PHP Manual includes an advanced full text search possibility provided by the viewer application. This enables users to search through every word in the help file to find a match. For example, if a user does a full-text search on the word "Apache", every topic that contains the word "Apache" will be listed. Advanced full-text search allows a user to search using boolean, wildcard, and nested expressions. A user can also limit the search to previous results, match similar words, or search topic titles only.

The usage of the search feature is fairly straightforward. Click on the search tab, type in the desired words and press ENTER (or click on "List Topics"). Then you'll receive a list of matches from the PHP Manual (and the notes). You can use the button with a right arrow on it to add boolean operators to your search (or you can type them in). As you see the results, you can use the column headings (Title, Location and Rank) to sort the topic list. The default order is by Rank. You can also adjust some parameters at the bottom of this tab.

The words found are highlighted on the current page in the Topic pane by default. You can turn off this feature by choosing the "Search Highlight Off" menu item in the Options menu. To can get this feature back similarly. If you are viewing a long topic, only the first 500 instances of a search word or phrase will be highlighted, due to a limitation of the viewer.

User Contributed Notes

There are no user contributed notes for this page.


一般的な検索のルール

A basic search consists of the word or phrase you want to find. You can use wildcard expressions, nested expressions, boolean operators, similar word matches, a previous results list, or topic titles to further define your search.

The basic rules for formulating queries are as follows:

  • Searches are not case-sensitive, so you can type your search in uppercase or lowercase characters.
  • You may search for any combination of letters (a-z) and numbers (0-9). You cannot search for single letters (a, b, c, etc.) and common words, like: an, and, as, at, be, but, by, do, for, from, have, he, in, it, not, of, on, or, she, that, the, there, they, this, to, we, which, with, you.
  • Punctuation marks such as the period (.), colon (:), semicolon (;), comma (,), and hyphen (-) are ignored during a search.
  • Group the elements of your search using double quotes or parentheses to set apart each element. You cannot search for quotation marks.

注意:

If you are searching for a file name with an extension, you should group the entire string in double quotes, ("filename.ext"). Otherwise, the period will break the file name into two separate terms. The default operation between terms is AND, so you will create the logical equivalent to "filename AND ext."

User Contributed Notes

There are no user contributed notes for this page.


単語またはフレーズを検索する

You can search for words or phrases and use wildcard expressions. Wildcard expressions allow you to search for one or more characters using a question mark or asterisk. The table below describes the results of these different kinds of searches.

Word and phrase searches
Search for | Example | Results
A single word | select | Topics that contain the word "select". (You will also find its grammatical variations, such as "selector" and "selection".)
A phrase | "new operator" or new operator | Topics that contain the literal phrase "new operator" and all its grammatical variations. Without the quotation marks, the query is equivalent to specifying "new AND operator," which will find topics containing both of the individual words, instead of the phrase.
Wildcard expressions | esc* or HT?? | Results for the first example include topics that contain the terms "ESC", "escape", "escalation", and so on. The asterisk cannot be the only character in the term. Results for the second example include topics that contain the terms "HTTP", "HTML" and so on. The question mark cannot be the only character in the term.

注意:

Select the Match similar words check box to include minor grammatical variations for the phrase you search. This feature only locates variations of the word with common suffixes. For example, a search on the word "add" will find "added," but it will not find "additive". This option is independent of other options or syntax. If you do a titles-only search, variations in titles will be matched. If you use quotes (or any other query operator) any variation of the word can appear; for example, "stemmed search" will also match "stemming search".

User Contributed Notes

There are no user contributed notes for this page.


検索後を定義する

The AND, OR, NOT, and NEAR operators enable you to precisely define your search by creating a relationship between search terms. The following table shows how you can use each of these operators. If no operator is specified, AND is used. For example, the query "server cgi security" is equivalent to "server AND cgi AND security".

Search operators
Search for | Example | Results
Both terms in the same topic | http AND apache | Topics containing both the words "http" and "apache".
Either term in a topic | ming OR swflib | Topics containing either the word "ming" or the word "swflib" or both.
The first term without the second term | xml NOT expat | Topics containing the word "xml" but not the word "expat".
Both terms in the same topic, close together | database NEAR security | Topics containing the word "database" within eight words of the word "security".

注意:

The |, &, and ! characters can also be used in place of OR AND and NOT respectively. This may not work if you use a very old version of the viewer.

User Contributed Notes

There are no user contributed notes for this page.


入れ子の検索条件を使う

Nested expressions allow you to create complex searches for information. For example, "html AND ((smtp OR pop3) NEAR mail)" finds topics containing the word "html" along with the words "smtp" and "mail" close together, or containing "html" along with the words "pop3" and "mail" close together.

The basic rules for searching help topics using nested expressions are as follows:

  • You can use parentheses to nest expressions within a query. The expressions in parentheses are evaluated before the rest of the query.
  • If a query does not contain a nested expression, it is evaluated from left to right. For example: "mail NOT pop3 OR smtp" finds topics containing the word "mail" without the word "pop3" or topics containing the word "smtp". On the other hand, "mail NOT (pop3 OR smtp)" finds topics containing the word "mail" without either of the words "pop3" or "smtp".
  • You cannot nest expressions more than five levels deep.

User Contributed Notes

There are no user contributed notes for this page.


Integrating the PHP Manual

注意:

The information provided here is mainly aimed at IDE authors, or advanced users who would like to integrate this CHM file to their favorite IDEs or other production environment components.

There are several editors out there with support for CHM integration, but you may need to know a few things about what the CHM contains to successfully integrate the manual into your environment.

The CHM is built using XSL style sheets from XML sources. This is unique currently in the PHP Manual family, as all other versions are generated using DSSSL style sheets. This also means, that non-intentional rendering differences may come up. A special conversion script is run on the XSLT output, adding several cute features, and packing up the manual with the preferences files and skin examples.

If you never worked with CHMs, you can think of them as compressed files with OS supported access for files inside and some added search and index support. However CHMs can only be viewed using the HTML Help Viewer, you can directly access files inside them using a special URL prefix, the CHM file name and the file you request from inside. As all the help content is stored in HTML files, you can show pages of the CHM in Internet Explorer.

Assume that you placed your php_manual_en.chm to c:\phpmanual the index file in the manual (which you see the first time) can be accessed with the following URL: mk:@MSITStore:C:\phpmanual\php_manual_en.chm::/_index.html. Here mk:@MSITStore: is the special "protocol", C:\phpmanual\php_manual_en.chm is the CHM with it's full path. The /_index.html part is the path to the index file inside the CHM and :: is just what you need to put between the CHM path and this file path.

注意:

All files are in the root directory of the CHM, unlike the previous CHM versions which included a language directory. Images, style sheets and other supplemental files have names starting with an underscore (like the main index shown above), to avoid name collisions.

The names of generated files follow the same rules as the online manual, except that the extension is .html and not .php. The most important is that function documentation files are named function.FUNCNAME.html where FUNCNAME is the function name, with all underscores converted to hyphens. Some examples are function.echo.html, function.mysql-close.html, function.imagecopy.html.

Using all this information, you can show a manual page for a function requested by a user. A simple example is included in the distribution, named php_quickref.hta. This is a » HTML Application to demonstrate the simple process of showing a manual page for a function. The quickRef() function defined therein does the job.

If you would like to integrate the manual into an IDE without direct support for the PHP manual (actually the underscore to hyphen conversion), you can use the included _function.html file to access a function page. This file is simply a redirector, and can be parameterized via the URL, as _function.html#mysql_close. This page will redirect you to the mysql_close function page (function.mysql-close.html) automatically. You can provide the full path of this file if your IDE supports context sensitive help, and provide the IDE specified string as the parameter. An example for this is the UltraEdit 9 intergation (see the edition's website).

The index of the manual (accessible via the index tab on the navigation pane) can also be used for integrational purposes. All the HTML pages are included in the index with their titles as index terms (including function description pages).

If you are a desktop application developer and would like to tightly integrate the CHM into your program (such as displaying the TOC tree in your IDE's help box), you can find more information at » http://www.helpware.net/, as well as links to other useful resources. The official site for HTML Help is at » http://www.microsoft.com/download/en/details.aspx?id=21138.

User Contributed Notes

There are no user contributed notes for this page.