/**
	 * Get file permissions from the requested directory.
	 *
	 * If the directory permissions cannot be read, a default value of 0644 will be returned.
	 *
	 * @since 1.15.0
	 *
	 * @param string $dir Full path to the file to retrieve permissions from.
	 * @return int|WP_Error The permissions as an int or a WP_Error object if an error occurs.
	 */
	public static function get_permissions( $dir ) {
		if ( ! self::is_dir( $dir ) ) {
			return new WP_Error( 'itsec-lib-dir-get-permissions-missing-dir', sprintf( __( 'Permissions for the directory %s could not be read as the directory could not be found.', 'it-l10n-ithemes-security-pro' ), $dir ) );
		}
		
		if ( ! ITSEC_Lib_Utility::is_callable_function( 'fileperms' ) ) {
			return new WP_Error( 'itsec-lib-directory-get-permissions-fileperms-is-disabled', sprintf( __( 'Permissions for the directory %s could not be read as the fileperms() function is disabled. This is a system configuration issue.', 'it-l10n-ithemes-security-pro' ), $dir ) );
		}
		
		
		$dir = rtrim( $dir, '/' );
		@clearstatcache( true, $dir );
		
		return fileperms( $dir ) & 0777;
	}
 /**
  * Get file permissions from the requested file.
  *
  * @since 1.15.0
  *
  * @param string $file Full path to the file to retrieve permissions from.
  * @return int|WP_Error The permissions as an int or a WP_Error object if an error occurs.
  */
 public static function get_permissions($file)
 {
     if (!self::is_file($file)) {
         return new WP_Error('itsec-lib-file-get-permissions-missing-file', sprintf(__('Permissions for the file %s could not be read as the file could not be found.', 'it-l10n-better-wp-security'), $file));
     }
     if (!ITSEC_Lib_Utility::is_callable_function('fileperms')) {
         return new WP_Error('itsec-lib-file-get-permissions-fileperms-is-disabled', sprintf(__('Permissions for the file %s could not be read as the fileperms() function is disabled. This is a system configuration issue.', 'it-l10n-better-wp-security'), $file));
     }
     @clearstatcache(true, $file);
     return fileperms($file) & 0777;
 }
 /**
  * Internal class function to remove comments from a string containing PHP code.
  *
  * @since 1.15.0
  * @access protected
  *
  * @param string $contents String containing the code to strip of comments.
  * @return string|WP_Error Returns a string containing the stripped source or a WP_Error object on an error.
  */
 protected static function strip_php_comments($contents)
 {
     if (!ITSEC_Lib_Utility::is_callable_function('token_get_all')) {
         return new WP_Error('itsec-lib-config-file-strip-php-comments-token-get-all-is-disabled', __('Unable to strip comments from the source code as the token_get_all() function is disabled. This is a system configuration issue.', 'it-l10n-better-wp-security'));
     }
     $tokens = token_get_all($contents);
     if (!is_array($tokens)) {
         return new WP_Error('itsec-lib-config-file-strip-php-comments-token-get-all-invalid-response', sprintf(__('Unable to strip comments from the source code as the token_get_all() function returned an unrecognized value (type: %s)', 'it-l10n-better-wp-security'), gettype($tokens)));
     }
     if (!defined('T_ML_COMMENT')) {
         define('T_ML_COMMENT', T_COMMENT);
     }
     if (!defined('T_DOC_COMMENT')) {
         define('T_DOC_COMMENT', T_ML_COMMENT);
     }
     $contents = '';
     foreach ($tokens as $token) {
         if (is_string($token)) {
             $contents .= $token;
         } else {
             list($id, $text) = $token;
             switch ($id) {
                 case T_COMMENT:
                 case T_ML_COMMENT:
                 case T_DOC_COMMENT:
                     break;
                 default:
                     $contents .= $text;
                     break;
             }
         }
     }
     return $contents;
 }