Title: PO::read_line
Published: April 25, 2014
Last modified: May 20, 2026

---

# PO::read_line( resource $f, string $action = 'read' ): bool

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#related)

[ Back to top](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#wp--skip-link--target)

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#parameters)󠁿

 `$f`resourcerequired

`$action`stringoptional

Default:`'read'`

## 󠀁[Return](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#return)󠁿

 bool

## 󠀁[Source](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#source)󠁿

    ```php
    public function read_line( $f, $action = 'read' ) {
    	static $last_line     = '';
    	static $use_last_line = false;
    	if ( 'clear' === $action ) {
    		$last_line = '';
    		return true;
    	}
    	if ( 'put-back' === $action ) {
    		$use_last_line = true;
    		return true;
    	}

    	if ( $use_last_line ) {
    		$line = $last_line;
    	} else {
    		$line = fgets( $f );
    		if ( false === $line ) {
    			return $line;
    		}

    		// Handle \r-only terminated lines after the deprecation of auto_detect_line_endings in PHP 8.1.
    		$r = strpos( $line, "\r" );
    		if ( false !== $r ) {
    			if ( strlen( $line ) === $r + 1
    				&& "\r\n" === substr( $line, $r )
    			) {
    				$line = rtrim( $line, "\r\n" ) . "\n";
    			} else {
    				// The lines are terminated by just \r, so we end the line there and rewind.
    				$rewind = strlen( $line ) - $r - 1;
    				$line   = substr( $line, 0, $r ) . "\n";
    				fseek( $f, - $rewind, SEEK_CUR );
    			}
    		}
    	}

    	$last_line     = $line;
    	$use_last_line = false;
    	return $line;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/pomo/po.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/pomo/po.php#L457)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/pomo/po.php#L457-L496)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/po/read_line/?output_format=md#related)󠁿

| Used by | Description | 
| [PO::read_entry()](https://developer.wordpress.org/reference/classes/po/read_entry/)`wp-includes/pomo/po.php` |  | 
| [PO::import_from_file()](https://developer.wordpress.org/reference/classes/po/import_from_file/)`wp-includes/pomo/po.php` |  |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fpo%2Fread_line%2F)
before being able to contribute a note or feedback.