rfc:linking_in_stream_wrappers

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:linking_in_stream_wrappers [2014/10/25 11:29] thekidrfc:linking_in_stream_wrappers [2021/03/27 14:47] (current) – Move to inactive ilutov
Line 3: Line 3:
   * Date: 2014-10-25   * Date: 2014-10-25
   * Author: Timm Friebe, thekid@php.net   * Author: Timm Friebe, thekid@php.net
-  * Status: Draft+  * Contributor: Frank Kleine, https://github.com/mikey179/ 
 +  * Status: Inactive
   * First Published at: https://wiki.php.net/rfc/linking_in_stream_wrappers   * First Published at: https://wiki.php.net/rfc/linking_in_stream_wrappers
  
Line 19: Line 20:
 Currently, #2 and #3 are already supported by [[http://php.net/manual/en/streamwrapper.url-stat.php|streamWrapper::url_stat()]]. With this accomplished, frameworks such as [[http://vfs.bovigo.org/|vfsStream]] can support testability of symlinking correctly. Currently, #2 and #3 are already supported by [[http://php.net/manual/en/streamwrapper.url-stat.php|streamWrapper::url_stat()]]. With this accomplished, frameworks such as [[http://vfs.bovigo.org/|vfsStream]] can support testability of symlinking correctly.
  
-Use case #1:+Use case #1 - **new functionality**:
 <PHP>  <PHP> 
 class wrapper { class wrapper {
Line 47: Line 48:
 </PHP> </PHP>
  
-Use cases #2 and #3:+Use cases #2 and #3 - //already possible today//:
 <PHP> <PHP>
 class wrapper { class wrapper {
 +
 +  /**
 +   * See http://php.net/manual/en/streamwrapper.url-stat.php
 +   *
 +   * @param  string $url
 +   * @param  int $flags
 +   * @return array or FALSE on error
 +   */
   function url_stat($url, $flags) {   function url_stat($url, $flags) {
     if ($flags & STREAM_URL_STAT_LINK) {     if ($flags & STREAM_URL_STAT_LINK) {
       // Stat the link, not the file it points to       // Stat the link, not the file it points to
     }     }
 +
 +    // ...
    
     return [     return [
Line 63: Line 74:
 </PHP> </PHP>
  
-Use case #4:+Use case #4 - **new functionality**:
 <PHP> <PHP>
 class wrapper { class wrapper {
  
   /**   /**
-   4 - Reads a link and returns the target+   * Reads a link and returns the target
    *    *
    * @param  string $link    * @param  string $link
-   * @return string The link target or NULL+   * @return string The link target or FALSE if the does not exist
    */    */
   function url_readlink($link) {   function url_readlink($link) {
Line 77: Line 88:
   }   }
 } }
 +</PHP>
 +
 +  * When url_readlink() returns a string, it will be used as readlink()'s return value.
 +  * When url_readlink() returns FALSE, readlink() quietly returns FALSE
 +  * For all other return values of url_readlink(), a warning is raised and readlink() returns FALSE
 +  * When url_readlink() is not implemented, a warning is raised an readlink() returns FALSE.
 +
 +==== Limitations ====
 +
 +It will not be possible to create links between two different stream wrappers like this: 
 +
 +<PHP>
 +symlink('foo://some/resource', 'bar://another/resource'); // will yield a PHP_WARNING and return false
 </PHP> </PHP>
  
Line 112: Line 136:
 ===== Patches and Tests ===== ===== Patches and Tests =====
 TODO: Implement and submit GitHub pull request. TODO: Implement and submit GitHub pull request.
 +https://github.com/thekid/php-src/compare/rfc/linking_in_stream_wrappers
  
 ===== References ===== ===== References =====
-See http://php.net/manual/en/class.streamwrapper.php +  * http://php.net/manual/en/class.streamwrapper.php 
-See https://github.com/mikey179/vfsStream/wiki/Known-Issues +  * [[https://github.com/mikey179/vfsStream/wiki/Known-Issues|List of known issues in vfsStream]] 
 +  * [[https://github.com/mikey179/vfsStream/tree/linking|vfsStream reference userland implementation]]
rfc/linking_in_stream_wrappers.1414236598.txt.gz · Last modified: 2017/09/22 13:28 (external edit)