Doctrine 1
  1. Doctrine 1
  2. DC-1056

Doctrine is not compatible with PHP 5.4 due to change in serialize() behaviour.

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 1.2.3
    • Fix Version/s: None
    • Component/s: Record, Relations
    • Labels:
      None
    • Environment:
      PHP 5.4+

      Description

      In PHP 5.4 there is a change in the way the object references are serialized:

      Quote:
      "Support for object references in recursive serialize() calls
      Prior to PHP 5.4, object references where not saved in recursive serialize calls."

      This minor change, breaks down serialization of collections when column of type "array" is present - double serialization occurs.
      I'm attaching a patch fixing the issue.

        Activity

        Marcin Gil created issue -
        Marcin Gil made changes -
        Field Original Value New Value
        Description In PHP 5.4 there is a change in the way the object references are serialized:

        Quote:
        "Support for object references in recursive serialize() calls
        Prior to PHP 5.4, object references where not saved in recursive serialize calls."

        This minor change, which is in fact a resolution of a bug report ( https://bugs.php.net/bug.php?id=36424 ), breaks down possibility to serialize collections together with relations ( by usage of ->serializeReferences(true); ).
        This issue results in absense of some of the referenced objects upon unserialization.
        The missing objects are objects which are present more than once (more than one record has the same relation), only the first occurence of the object is preserved.

        The below DIFF explains the difference between PHP 5.3 and PHP 5.3 serialization output on the example of doctrine collection:
        http://diffchecker.com/9L51AtF6

        I tried to create a testCase to debug this issue (attached), however I still must be missing a key difference between Doctrine and the testCase, as the testCase maintains all the referenced objects.

        I am afraid that many Doctrine users may encounter this issue when it is too late (PHP may be automatically updated to 5.4 on some servers).
        I would be grateful is someone could look into the issue, it is possible I have failed to notice something trivial.

        In PHP 5.4 there is a change in the way the object references are serialized:

        Quote:
        "Support for object references in recursive serialize() calls
        Prior to PHP 5.4, object references where not saved in recursive serialize calls."

        This minor change, breaks down serialization of collections when column of type "array" is present - double serialization occurs.
        I'm attaching a patch fixing the issue.

        Attachment Record.php.patch [ 11197 ]
        Marcin Gil made changes -
        Attachment testCase1.php [ 11196 ]
        Marcin Gil made changes -
        Attachment Record.php.patch [ 11197 ]
        Marcin Gil made changes -
        Attachment Record.php.patch [ 11633 ]

          People

          • Assignee:
            Jonathan H. Wage
            Reporter:
            Marcin Gil
          • Votes:
            2 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated: